diff --git a/Makefile b/Makefile index dfc0264..7d03891 100644 --- a/Makefile +++ b/Makefile @@ -1,2 +1,2 @@ nexus: Makefile defs.h nexus.c nexus.h ai.c ai.h attack.c attack.h flag.c flag.h io.c io.h lf.c lf.h map.c map.h move.c move.h objects.c objects.h text.c text.h save.c save.h spell.c spell.h - gcc -g -o nexus nexus.c ai.c attack.c flag.c io.c lf.c map.c move.c objects.c text.c save.c spell.c -lncurses + gcc -Wall -g -o nexus nexus.c ai.c attack.c flag.c io.c lf.c map.c move.c objects.c text.c save.c spell.c -lncurses diff --git a/ai.c b/ai.c index 53e095c..aaf63c2 100644 --- a/ai.c +++ b/ai.c @@ -1,22 +1,36 @@ #include #include #include "ai.h" +#include "attack.h" #include "defs.h" #include "flag.h" +#include "io.h" #include "lf.h" #include "map.h" +#include "move.h" +#include "nexus.h" #include "objects.h" +#include "spell.h" +#include "text.h" extern lifeform_t *player; +extern enum ERROR reason; void aimove(lifeform_t *lf) { - int dir; int wantdb = B_TRUE; int db = B_FALSE; - object_t *curwep,*bestwep; + object_t *curwep,*bestwep, *o; + object_t *curgun,*bestgun; flag_t *f; + //flag_t *nextf; + // lifeform_t *fleefrom = NULL; lifeform_t *target; - char buf[BUFLEN]; + enum BODYPART bp; + int x,y; + cell_t *c; + obpile_t *unarmedpile = NULL; + flag_t *unarmedflag = NULL; + if (wantdb && haslos(player, lf->cell)) { @@ -25,16 +39,21 @@ void aimove(lifeform_t *lf) { db = B_FALSE; } - if (db) dblog("AIMOVE: %s", lf->race->name); - - + if (db) { + char lfname[BUFLEN]; + getlfname(lf, lfname); + dblog("AIMOVE: %s", lfname); + } + /* // if lifeform isn't alive, skip turn if (isdead(lf)) { if (db) dblog(".oO { i am not alive, skipping turn. }"); taketime(lf, SPEED_DEAD); return; } + */ + // do we have a better weapon we could use? @@ -44,117 +63,557 @@ void aimove(lifeform_t *lf) { if (curwep != bestwep) { if (db) dblog(".oO { i have a better weapon than my current one (%s > %s) }",bestwep->type->name, curwep ? curwep->type->name : "nothing"); // weild better one - weild(lf, bestwep); + if (!weild(lf, bestwep)) return; + } + + // do we have a better firearm ? + curgun = getfirearm(lf); + bestgun = getbestfirearm(lf); + + if (curgun != bestgun) { + if (db) dblog(".oO { i have a better gun than my current one (%s > %s) }",bestgun->type->name, curgun ? curgun->type->name : "nothing"); + // weild better one + if (!weild(lf, bestgun)) return; + } + + // do we have better armour? + for (bp = BP_RIGHTHAND ; bp < MAXBODYPARTS; bp++) { + object_t *curarm; + curarm = getarmour(lf, bp); + // do we have a better one? + for (o = lf->pack->first ; o ; o = o->next) { + if (isbetterarmourthan(o, curarm)) { + // wear this armour instead + if (!wear(lf, o)) return; + } + } + } + + + // now check whetehr we have ANY weapon + curwep = getattackwep(lf, &unarmedpile, &unarmedflag); + if (unarmedpile) killobpile(unarmedpile); + + // before attacking targets, + // look for any object which we _covet_. + // ie. if we covet something, we will pick it up + // instead of attacking our target. + if (db) dblog(".oO { looking for covetted objects... }"); + if (lookforobs(lf, B_COVETS)) { + if (db) dblog(".oO { found covetted object. returning. }"); return; } - // do we already have a target we are attacking? f = hasflag(lf->flags, F_TARGET); if (f) { int targid; + int lastx,lasty; if (db) dblog(".oO { i have a target... }"); targid = f->val[0]; + lastx = f->val[1]; + lasty = f->val[2]; target = findlf(lf->cell->map, targid); if (target) { if (db) dblog(".oO { my target is lfid %d (%s). }", targid, target->race->name); if (haslos(lf, target->cell)) { - if (db) dblog(".oO { i can see my target. will move towards it. }"); - movetowards(lf, target->cell); - return; - } else { - if (db) dblog(".oO { i cannot see my target }"); - // TODO: move towards last known location + int goingtomove = B_TRUE; + enum OBTYPE spell; + object_t *gun; + // reset F_TARGET lifetime to full. + f->lifetime = AI_FOLLOWTIME; + if (db) dblog(".oO { i can see my target (at %d,%d). will move towards it. }",target->cell->x,target->cell->y); + // remember last known loc + f->val[1] = target->cell->x; + f->val[2] = target->cell->y; + + goingtomove = B_TRUE; + + + // can we attack with spells (ie. ones which target the victim)? + spell = getattackspell(lf); + if (spell != OT_NONE) { + int spellfailed = B_FALSE; + lifeform_t *spelllf = NULL; + cell_t *spellcell = NULL; + object_t *spellob = NULL; + if (db) { + objecttype_t *st; + st = findot(spell); + dblog(".oO { will cast attack spell: %s }", st->name); + } + + // special cases: eg. spells like telekenesis + if (spell == OT_S_TELEKINESIS) { + float maxweight; + object_t *poss[MAXPILEOBS]; + int nposs; + int i; + // find nearest object which can be picked up + + // this is copied out of the telekenesis spell code! + maxweight = getlfweight(lf, B_NOOBS) + + (getlfweight(lf, B_NOOBS) * (getstatmod(lf, A_IQ) / 100)); + + nposs = 0; + for (i = 0; i < lf->nlos; i++) { + object_t *o; + for (o = lf->los[i]->obpile->first ; o ; o = o->next) { + if (!hasflag(o->flags, F_NOPICKUP) && + getobweight(o) <= maxweight) { + poss[nposs] = o; + nposs++; + if (nposs >= MAXPILEOBS) break; + } + } + if (nposs >= MAXPILEOBS) break; + } + if (nposs > 0) { + spellob = poss[rnd(0,nposs-1)]; + } else { + spellfailed = B_TRUE; + } + + // cast spell at the player + spelllf = target; + spellcell = target->cell; + } else { + spelllf = target; + spellcell = target->cell; + spellob = NULL; + } + + + if (!spellfailed && !castspell(lf, spell, spelllf, spellob, spellcell)) { + // spell succesful + return; + } else { + if (db) dblog(".oO { cast spell failed! }"); + } + } + + // can we attack by firing something? + gun = getfirearm(lf); + if (goingtomove && gun && getammo(lf)) { + setguntarget(lf, target); + if (!shoot(lf)) { + // succesful + return; + } else { + if (db) dblog(".oO { shoot gun failed! }"); + } + } + + // can we attack by throwing something? + if (goingtomove && getcelldist(lf->cell, target->cell) > 1) { + // TODO: or firing! check if we have a firearm first. + o = getbestmissile(lf); + if (o) { + if (db) dblog(".oO { will throw %s at my target instead of moving }", o->type->name); + // try to throw it! + if (!throwat(lf, o, target->cell)) { + // succesful + goingtomove = B_FALSE; + } else { + if (db) dblog(".oO { throw failed! }"); + } + } + } + + // do we have a valid melee attack? + if (!curwep) { + if (db) dblog(".oO { won't move towards target - i have no weapon. }"); + goingtomove = B_FALSE; + } + + if (goingtomove) { + if (!movetowards(lf, target->cell)) { + // success + return; + } else { + if (db) dblog(".oO { move towards failed! - reason = %d }",reason); + } + } + } else { + if (db) dblog(".oO { i cannot see my target. moving to last known loc %d/%d }",lastx,lasty); + + // can't see target. + // move towards their last known location instead + addflag(lf->flags, F_TARGETCELL, lastx, lasty, NA, NULL); + // remove f_target + killflag(f); + + /* // just try to move in a random direction if (db) dblog(".oO { will move randomly }"); + // dorandommove will call taketime() if it fails, + // so it's safe to just return dorandommove(lf, B_NOBADMOVES); return; + */ } } - } else { - // not attacking anyone in particular - - if (db) dblog(".oO { i do not have a target. }"); - // TODO: are we hostile? if so, look for a target - f = hasflag(lf->flags, F_HOSTILE); - if (f) { - int x,y; - cell_t *c; - if (db) dblog(".oO { i am hostile. looking for a target. }"); - // look around for a target - // TODO: use our vis rang einstead of 10! - for (y = lf->cell->y - 10; y <= lf->cell->y + 10; y++) { - for (x = lf->cell->x - 10; x <= lf->cell->x + 10; x++) { - c = getcellat(lf->cell->map, x, y); - // cell exists and we can see it? - if (c && haslos(lf, c)) { - // player there? - if (c->lf && c->lf->controller == C_PLAYER) { - if (db) dblog(".oO { found a target - lfid %d (%s) ! }",c->lf->id, c->lf->race->name); - // target them! - addflag(lf->flags, F_TARGET, c->lf->id, -1, -1, ""); - // tell the player - if (haslos(player, lf->cell)) { - getlfname(lf, buf); - capitalise(buf); - msg("%s sees you!", buf); - } - // then move towards them... - if (db) dblog(".oO { moving towards my new target }"); - movetowards(lf, c); - return; + } + + + + /* + if (lookforobs(lf, B_COVETS)) { + if (db) dblog(".oO { found covetted object. returning. }"); + return; + } + */ + + // do we have a target cell? + f = hasflag(lf->flags, F_TARGETCELL); + if (f) { + // if so, move towards it + x = f->val[0]; + y = f->val[1]; + if (db) dblog(".oO { walking from %d,%d towards f_targetcell (%d,%d) ... }", lf->cell->x, lf->cell->y, x, y); + c = getcellat(lf->cell->map, x, y); + if (c) { + if (movetowards(lf, c)) { + // couldn't move towards it for some reason. + // so stop trying. + if (db) dblog(".oO { couldn't walk towards f_targetcell. abandoning it. }"); + killflag(f); + // remember NOT to target this one. + lf->ignorecell = c; + } else { + if (db) dblog(".oO { successfully walked towards f_targetcell. }"); + // moved towards it. + // reset lifetime + f->lifetime = AI_FOLLOWTIME; + + // are we there yet? + if (lf->cell == c) { + if (db) dblog(".oO { arrived at f_targetcell. removing. }"); + killflag(f); + } + } + } else { + if (db) dblog(".oO { f_targetcell doesn't exist. abandoning. }"); + // destination doesn't exist! + killflag(f); + // remember NOT to target this one. + lf->ignorecell = c; + } + return; + } + + // look for any object which we want + if (db) dblog(".oO { looking for any ob which i want. }"); + if (lookforobs(lf, B_ANY)) { + if (db) dblog(".oO { found ob that i want. returning. }"); + return; + } + + + // not attacking anyone in particular + if (db) dblog(".oO { i do not have a target or can't move towards it. }"); + // are we hostile? if so, look for a target + f = hasflag(lf->flags, F_HOSTILE); + if (f) { + int x,y; + if (db) dblog(".oO { i am hostile. looking for a target. }"); + // look around for a target + // TODO: use our vis rang einstead of 10! + for (y = lf->cell->y - 10; y <= lf->cell->y + 10; y++) { + for (x = lf->cell->x - 10; x <= lf->cell->x + 10; x++) { + c = getcellat(lf->cell->map, x, y); + // cell exists and we can see it? + if (c && haslos(lf, c)) { + // player there? + if (c->lf && (c->lf != lf) && isplayer(c->lf)) { + if (db) dblog(".oO { found a target - lfid %d (%s) ! }",c->lf->id, c->lf->race->name); + // target them! + addtempflag(lf->flags, F_TARGET, c->lf->id, NA, NA, NULL, AI_FOLLOWTIME); + // tell the player + if (haslos(player, lf->cell)) { + makenoise(lf, N_GETANGRY); } + // then move towards them... + if (db) dblog(".oO { moving towards my new target }"); + + if (curwep) { + if (!movetowards(lf, c)) return; + } else { + if (db) dblog(".oO { won't move towards target - i have no weapon. }"); + } } } } } + } - // just try to move in a random direction - if (db) dblog(".oO { default - moving randomly }"); - dorandommove(lf, B_NOBADMOVES); - return; - } - - // if we get this far, just wait - dowait(lf); -} - -int getdirtowards(lifeform_t *lf, cell_t *dst) { - int d; - cell_t *c; - int mindist=9999,bestdir=D_NONE; - - for (d = DC_N; d <= DC_NW; d++) { - c = getcellindir(lf->cell, d); - if (!c) continue; - if (c == dst) { - // destination is adjacent! - bestdir = d; - break; - } - - if (canmove(lf, d)) { - int thisdist; - thisdist = getcelldist(c, dst); - if (thisdist < mindist) { - mindist = thisdist; - bestdir = d; + // are we friendly? if so, look for a target + f = hasflag(lf->flags, F_FRIENDLY); + if (f) { + int x,y; + if (db) dblog(".oO { i am friendly to the player. looking for a target. }"); + // look around for a target + // TODO: use our vis rang einstead of 10! + for (y = lf->cell->y - 10; y <= lf->cell->y + 10; y++) { + for (x = lf->cell->x - 10; x <= lf->cell->x + 10; x++) { + c = getcellat(lf->cell->map, x, y); + // cell exists and we can see it? + if (c && haslos(lf, c)) { + // player there? + if (c->lf && (c->lf != lf) && !isplayer(c->lf)) { + if (db) dblog(".oO { found a target - lfid %d (%s) ! }",c->lf->id, c->lf->race->name); + // target them! + addtempflag(lf->flags, F_TARGET, c->lf->id, NA, NA, NULL, AI_FOLLOWTIME); + // then move towards them... + if (db) dblog(".oO { moving towards my new target }"); + if (!movetowards(lf, c)) return; + } + } } } } - // TODO: handle ties - return bestdir; + // just try to move in a random direction + if (db) dblog(".oO { default - moving randomly }"); + dorandommove(lf, B_NOBADMOVES); + return; + + // if we get this far, just wait + rest(lf, B_TRUE); } -void movetowards(lifeform_t *lf, cell_t *dst) { - int dir; - // move towards them - dir = getdirtowards(lf, dst); - if (dir != D_NONE) { - trymove(lf, dir); +int aipickup(lifeform_t *lf, object_t *o) { + if (isedible(o)) { + return eat(lf, o); + } else { + return pickup(lf, o, o->amt); } + return B_FALSE; } +enum OBTYPE getattackspell(lifeform_t *lf) { + flag_t *f; + enum OBTYPE poss[MAXPILEOBS]; + int nposs = 0; + int db = B_TRUE; + for (f = lf->flags->first ; f ; f = f->next) { + if (f->id == F_CANWILL) { + poss[nposs] = f->val[0]; + nposs++; + } else if (f->id == F_CANCAST) { + objecttype_t *ot; + ot = findot(f->val[0]); + if (cancast(lf, f->val[0], NULL)) { + if (db) { + dblog(".oO { spell possibility: %s }", ot ? ot->name : "?unkownspell?"); + + } + poss[nposs] = f->val[0]; + nposs++; + } else { + if (db) { + if (ot) { + dblog(".oO { can't cast %s right now (mpcost=%d, i have %d) }", + ot ? ot->name : "?unkownspell?", + getmpcost(ot->id), lf->mp); + } else { + dblog(".oO { can't cast ?unknownspell? right now }"); + } + } + } + } + } + + // select a random one + if (nposs > 0) { + int sel; + sel = rnd(0,nposs-1); + return poss[sel]; + } + + return OT_NONE; +} + + +object_t *hasbetterarmour(lifeform_t *lf, obpile_t *op) { + object_t *o; + + for (o = op->first ; o ; o = o->next) { + if (isarmour(o)) { + object_t *curarm; + enum BODYPART bp; + flag_t *f; + // where does it go? + f = hasflag(o->flags, F_GOESON); + bp = f->val[0]; + // is it better than what we have in that position? + curarm = getarmour(lf, bp); + if (isbetterwepthan(o, curarm)) { + return o; + } + } + } + return NULL; +} + +object_t *hasbetterweapon(lifeform_t *lf, obpile_t *op) { + object_t *bestwep, *o; + + bestwep = getbestweapon(lf); + for (o = op->first ; o ; o = o->next) { + if (isweapon(o) && isbetterwepthan(o, bestwep) && canweild(lf, o)) { + return o; + } + } + return NULL; +} + + +// returns B_TRUE if we did something +int lookforobs(lifeform_t *lf, int covetsonly) { + object_t *o; + enum OBTYPE oid[MAXPILEOBS]; + int noids = 0; + enum FLAG wantflag[MAXPILEOBS]; + int nwantflags = 0; + int db = B_TRUE; + flag_t *f; + cell_t *c; + int n; + int i; + + // construct a list of objects which we want + noids = 0; + for (f = lf->flags->first ; f ; f = f->next) { + if (f->id == F_WANTS) { + if (!covetsonly || (f->val[1] == B_COVETS)) { + oid[noids] = f->val[0]; + noids++; + } + } else if (f->id == F_WANTSOBFLAG) { + if (!covetsonly || (f->val[1] == B_COVETS)) { + wantflag[nwantflags] = f->val[0]; + nwantflags++; + } + } + } + + // current cell has an object we want? + o = hasobmulti(lf->cell->obpile, oid, noids); + if (o && (canpickup(lf, o) || caneat(lf,o)) ) { + if (db) dblog(".oO { current cell has ob i want (%s) }",o->type->name); + // try to pick it up + if (!aipickup(lf, o)) return B_TRUE; + if (db) dblog(".oO { pickup of %s failed, trying to eat! }",o->type->name); + if (!eat(lf, o)) return B_TRUE; + if (db) dblog(".oO { eating %s failed }",o->type->name); + } + // has an object with a flag we want? + for (n = 0; n < nwantflags; n++) { + o = hasobwithflag(lf->cell->obpile, wantflag[n]); + if (o && (canpickup(lf, o) || caneat(lf,o)) ) { + if (db) dblog(".oO { current cell has ob with flag i want (%s) }",o->type->name); + // try to pick it up + if (!aipickup(lf, o)) return B_TRUE; + if (db) dblog(".oO { pickup of %s with wantflag failed, trying to eat! }",o->type->name); + if (!eat(lf, o)) return B_TRUE; + if (db) dblog(".oO { eating %s with wantflag failed }",o->type->name); + + } + } + // current cell has better weapon? + f = hasflag(lf->flags, F_WANTSBETTERWEP); + if (f ) { + if (!covetsonly || (f->val[1] == B_COVETS)) { + o = hasbetterweapon(lf, lf->cell->obpile); + if (o && canpickup(lf, o)) { + if (db) dblog(".oO { current cell has better weapon (%s) }",o->type->name); + // try to pick it up + if (!aipickup(lf, o)) return B_TRUE; + if (db) dblog(".oO { pickup of better wep %s failed! }",o->type->name); + } + } + } + // current cell has better armour? + f = hasflag(lf->flags, F_WANTSBETTERARM); + if (f ) { + if (!covetsonly || (f->val[1] == B_COVETS)) { + o = hasbetterarmour(lf, lf->cell->obpile); + if (o && canpickup(lf, o)) { + if (db) dblog(".oO { current cell has better armour (%s) }",o->type->name); + // try to pick it up + if (!aipickup(lf, o)) return B_TRUE; + if (db) dblog(".oO { pickup of better armour %s failed! }",o->type->name); + } + } + } + + // look around for objects which we want, if we don't already have a targetcell. + if (!hasflag(lf->flags, F_TARGETCELL)) { + if (db) dblog(".oO { no targetcell, so looking for remote objects }"); + for (i = 0 ; i < lf->nlos; i++) { + int gothere = B_FALSE; + + c = lf->los[i]; + if (c != lf->ignorecell) { + o = hasobmulti(c->obpile, oid, noids); + if (o && (canpickup(lf, o) || caneat(lf,o)) ) { + if (db) dblog(".oO { remote cell has ob i want (%s). setting f_targetcell. }",o->type->name); + gothere = B_TRUE; + } + if (!gothere) { + // has an object with a flag we want? + for (n = 0; n < nwantflags; n++) { + o = hasobwithflag(c->obpile, wantflag[n]); + if (o && (canpickup(lf, o) || caneat(lf, o)) ) { + if (db) dblog(".oO { remote cell has ob with flag i want (%s) }", o->type->name); + gothere = B_TRUE; + } + } + } + if (!gothere) { + // remote cell has better weapon? + f = hasflag(lf->flags, F_WANTSBETTERWEP); + if (f) { + if (!covetsonly || (f->val[1] == B_COVETS)) { + + o = hasbetterweapon(lf, c->obpile); + if (o && canpickup(lf, o)) { + if (db) dblog(".oO { remote cell has better weapon (%s). setting f_targetcell }",o->type->name); + gothere = B_TRUE; + } + } + } + } + if (!gothere) { + // remote cell has better armour? + f = hasflag(lf->flags, F_WANTSBETTERARM); + if (f) { + if (!covetsonly || (f->val[1] == B_COVETS)) { + + o = hasbetterarmour(lf, c->obpile); + if (o && canpickup(lf, o)) { + if (db) dblog(".oO { remote cell has better armour (%s). setting f_targetcell }",o->type->name); + gothere = B_TRUE; + } + } + } + } + + + if (gothere) { + // start walking towards target cell + addtempflag(lf->flags, F_TARGETCELL, c->x, c->y, NA, NULL, AI_FOLLOWTIME); + // forget about people we are attacking + killflagsofid(lf->flags, F_TARGET); + return B_TRUE; + } + } + } + } + return B_FALSE; +} + + diff --git a/ai.h b/ai.h index fc62c19..cabdb60 100644 --- a/ai.h +++ b/ai.h @@ -1,5 +1,8 @@ #include "defs.h" void aimove(lifeform_t *lf); -int getdirtowards(lifeform_t *lf, cell_t *dst); -void movetowards(lifeform_t *lf, cell_t *dst); +int aipickup(lifeform_t *lf, object_t *o); +enum OBTYPE getattackspell(lifeform_t *lf); +object_t *hasbetterarmour(lifeform_t *lf, obpile_t *op); +object_t *hasbetterweapon(lifeform_t *lf, obpile_t *op); +int lookforobs(lifeform_t *lf, int covetsonly); diff --git a/attack.c b/attack.c index 797a24e..2a203c0 100644 --- a/attack.c +++ b/attack.c @@ -1,279 +1,627 @@ +#include +#include #include #include #include #include "attack.h" #include "defs.h" #include "flag.h" +#include "io.h" #include "lf.h" +#include "nexus.h" #include "objects.h" +#include "text.h" extern lifeform_t *player; -int doattack(lifeform_t *lf, lifeform_t *victim) { - int dam; + +int attackcell(lifeform_t *lf, cell_t *c) { + // anyone there? if so just attack. + if (c->lf) { + attacklf(lf, c->lf); + } else { + object_t *o; + // has an mpassable object? + o = hasobwithflag(c->obpile, F_IMPASSABLE); + if (o) { + attackob(lf, o); + } else { + // TODO: attack wall? + return B_TRUE; + } + } + return B_FALSE; +} + +int attacklf(lifeform_t *lf, lifeform_t *victim) { + unsigned int dam[100]; + enum DAMTYPE damtype[100]; + int ndam = 0; char buf[BUFLEN]; char attackername[BUFLEN]; char victimname[BUFLEN]; int fatal = B_FALSE; - flag_t *f; + flag_t *unarmedflag = NULL; object_t *wep; - enum DAMTYPE damtype; - obpile_t *op; + obpile_t *op = NULL; int attacktime; int acc; int hit = B_FALSE; - double dampct; - int unarmed = B_FALSE; char wepname[BUFLEN]; int ev; + int i; + int aidb = B_TRUE; + + + if (aidb) { + if (isplayer(lf)) { + aidb = B_FALSE; + } else if (!haslos(player, lf->cell)) { + aidb = B_FALSE; + } + } // get names getlfname(lf, attackername); getlfname(victim, victimname); + if (aidb) dblog(".oO { trying to attack %s }", victimname); + // get weapon - op = addobpile(lf, NULL); // for use if we are unarmed - wep = getweapon(lf); + //wep = getweapon(lf); + wep = getattackwep(lf, &op, &unarmedflag); if (!wep) { - unarmed = B_TRUE; - - // ie. unarmed - getunarmedweapon(lf, op); - - if (op->first) { - wep = op->first; - } else { - // cannot attack! - if (lf->controller == C_PLAYER) { - msg("You cannot attack!"); - } else if (haslos(player, lf->cell)) { - sprintf(buf, "%s",attackername); - capitalise(buf); - msg("%s looks like it wants to attack!",buf); - } - - if (lf->controller != C_PLAYER) { - // take some time to avoid infinite loops! - taketime(lf, 1); - } - free(op); - return B_TRUE; + if (isplayer(lf)) { + msg("You cannot attack!"); + } else if (haslos(player, lf->cell)) { + //msg("%s looks like it wants to attack!",attackername); } + /* + if (!isplayer(lf)) { + // if ai, take some time to avoid infinite loops! + taketime(lf, getmovespeed(lf)); + } + */ + if (op) killobpile(op); + return B_TRUE; } + getobname(wep, wepname, 1); - - f = hasflag(wep->flags, F_DAMTYPE); - if (f) { - damtype = f->val[0]; - } else { - // default - you are just bashing with whatever - // you weilded. - damtype = DT_BASH; - } + if (aidb) dblog(".oO { my weapon is %s %s }", wepname, unarmedflag ? "(unarmed)" : ""); // depends on weapon, race attackspeed modifier flag, etc - attacktime = getobattackspeed(wep) + getlfattackspeed(lf); + attacktime = getattackspeed(lf); + taketime(lf, attacktime); - - // TODO: figure out if you hit - - // TODO: figure out if you do damage, and how much - acc = 100; // base accuracy of 100% - - // modify for weapon's (lack of) accuracy - f = hasflag(wep->flags, F_ACCURACY); - if (f) { - // ie. accuracy of 100% means no penalty - // ie. accuracy of 75% means 25% penalty - // etc - acc -= (100 - f->val[0]); - } + acc = getlfaccuracy(lf); // modify for defender's evasion ev = getevasion(victim); acc -= ev; - // modify for attacker's level - acc += (lf->level * 2); + // metal weapon versus magnetic shield? + if (lfhasflag(victim, F_MAGSHIELD) && ismetal(wep->material->id)) { + acc -= 45; + } if (acc < 0) acc = 0; if (acc > 100) acc = 100; + if (aidb) dblog(".oO { my modified chance to hit is %d %% }", acc); // did you hit? + ndam = 0; if (rnd(1,100) <= acc) { hit = B_TRUE; + if (aidb) dblog(".oO { i hit! }"); + + // special case + if (isplayer(lf) && (victim->race->id == R_GLOWBUG)) { + if ((wep->type->id == OT_EMPTYFLASK) || (wep->type->id == OT_EMPTYVIAL)) { + object_t *o; + // catch the glowbug! + msg("You catch %s in your %s.", victimname, noprefix(wepname)); + removeob(wep, 1); + killlf(victim); // don't leave a corpse + o = addob(lf->pack, "glowing flask"); + if (o) { + getobname(o, buf, o->amt); + msglower("%c - %s.",o->letter, buf); + } else { + // add to the ground + o = addob(lf->cell->obpile, "glowing flask"); + if (o) { + getobname(o, buf, o->amt); + msg("%s drops to the ground.", buf); + } + } + if (op) { + killobpile(op); + } + return B_FALSE; + } + } + + + // determine base damage + + // determine damage + //if (unarmed && (unarmedflag->val[0] != NA)) { + if (unarmedflag) { + // this mosnter's unarmed attack will + // override normal damage calculation + dam[ndam] = getdamrollfromflag(unarmedflag); + } else { + dam[ndam] = getdamroll(wep); + } + dblog("rolled dam[%d] = %d",ndam,dam[ndam]); + + // modify for strength + dam[ndam] = (int)((float)dam[ndam] * getstrdammod(lf)); + + // damtype? + damtype[ndam] = getdamtype(wep); + if (aidb) dblog(".oO { dealing %d %s damage }", dam[ndam], getdamname(damtype[ndam])); + ndam++; + + // blessed vs undead etc? + if (isblessed(wep) && lfhasflagval(victim, F_DTVULN, DT_HOLY, NA, NA, NULL)) { + // a little extra damage + dam[ndam] = (int) ( (float)dam[ndam] * 1.25 ); + } + + // determine extra damage + getextradam(wep, &dam[ndam], &damtype[ndam]); } else { hit = B_FALSE; + ndam = 0; } - if (hit) { - int reducepct; - int ar; - int reduceamt; - // determine damage - dam = getdamroll(wep); - // modify for attacker's armour - ar = getarmour(victim); - reducepct = ar * 2; - reduceamt = (int)(((float)reducepct / 100.0) * (float)dam); + if (ndam > 0) { + for (i = 0; i < ndam; i++) { + float reducepct; + int ar; + int reduceamt; - dam -= reduceamt; - if (dam < 0) dam = 0; + dblog("initial dam[%d] = %d",i,dam[i]); - // TODO: armour gets damaged + // modify based on resistances + adjustdamlf(victim, &dam[i], damtype[i]); + dblog("adjusted for lf to dam[%d] = %d",i,dam[i]); - losehp(victim, dam, damtype, lf, attackername); + // modify for defender's armour + ar = getarmourrating(victim); + reducepct = getdamreducepct(ar); + reduceamt = (int) ceil((reducepct / 100.0) * (float)dam[i]); - if (victim->hp <= 0) { - fatal = B_TRUE; - } + dam[i] -= reduceamt; + if (dam[i] < 0) dam[i] = 0; + dblog("reduced by armour to dam[%d] = %d",i,dam[i]); - // announce it - if (lf->controller == C_PLAYER) { - msg("You %s %s%s%s", - fatal ? getkillverb(damtype, dam) : getattackverb(damtype, dam), - victimname, - (dam == 0) ? " but do no damage" : "", - fatal ? "!" : "."); - - if (fatal && !hasflag(victim->flags, F_NODEATHANNOUNCE)) { - // don't also say "the xx dies" - addflag(victim->flags, F_NODEATHANNOUNCE, B_TRUE, NA, NA, NULL); + // will this hit be fatal? + if (dam[i] >= victim->hp) { + fatal = B_TRUE; } - } else { - if (haslos(player, lf->cell)) { - char withwep[BUFLEN]; - // capitalise first letter - sprintf(buf, "%s",attackername); - capitalise(buf); - - if (wep && !unarmed) { - sprintf(withwep, " with %s", wepname); + // announce it + if (isplayer(lf)) { + char extradambuf[BUFLEN]; + if (dam[i] == 0) { + strcpy(extradambuf, " but do no damage"); + } else if (lfhasflag(player, F_EXTRAINFO) || lfhasflag(player, F_OMNIPOTENT) ) { + sprintf(extradambuf, " [%d dmg]",dam[i]); } else { - strcpy(withwep, ""); - } + strcpy(extradambuf, ""); + } + warn("You %s %s%s%s", + fatal ? getkillverb(damtype[i], dam[i], victim->maxhp) : getattackverb(damtype[i], dam[i], victim->maxhp), + victimname, extradambuf, + fatal ? "!" : "."); - msg("%s %ss %s%s%s.", buf, getattackverb(damtype,dam), victimname,withwep, - (dam == 0) ? " but does no damage" : "" ); + if (fatal && !hasflag(victim->flags, F_NODEATHANNOUNCE)) { + // don't also say "the xx dies" + addflag(victim->flags, F_NODEATHANNOUNCE, B_TRUE, NA, NA, NULL); + } + } else { + if (haslos(player, lf->cell) || isplayer(victim)) { + char withwep[BUFLEN]; + char attackverb[BUFLEN]; + char nodamstr[BUFLEN]; + + // capitalise first letter + sprintf(buf, "%s",attackername); + capitalise(buf); + + if (wep && !unarmedflag && (lf->race->id != R_DANCINGWEAPON)) { + sprintf(withwep, " with %s", wepname); + } else { + strcpy(withwep, ""); + } + + strcpy(attackverb, getattackverb(damtype[i],dam[i],victim->maxhp)); + if ((dam[i] == 0) && (damtype[i] != DT_TOUCH)) { + strcpy(nodamstr, " but does no damage"); + } else { + strcpy(nodamstr, ""); + } + warn("%s %s%s %s%s%s.", buf, attackverb, + attackverb[strlen(attackverb)-1] == 's' ? "es" : "s", + victimname,withwep, nodamstr); + } else { + youhear(lf->cell, "sounds of fighting"); + } } - // TODO: else {if (haslineofhearing() etc - } - } else { // miss! - // announce it - if (lf->controller == C_PLAYER) { - msg("You miss %s.", victimname); - } else { - if (haslos(player, lf->cell)) { - // capitalise first letter - sprintf(buf, "%s",attackername); - capitalise(buf); - msg("%s misses %s.", buf, victimname); + // victim loses hp + // don't adjust damage - we've already done that + if (wep && !unarmedflag) { + char wepname[BUFLEN]; + getobname(wep, wepname, 1); + sprintf(buf, "%s^weilding %s",attackername, wepname); + } else { + strcpy(buf, attackername); + } + // check + /* + if (dam[i] >= 120) { + // potential bug + msg("DB: potential bug: huge dam=%d",dam[i]); + assert(1 == 2); + } + */ + + losehp_real(victim, dam[i], damtype[i], lf, buf, B_FALSE); + + // victim's armour loses hp + if (reduceamt) { + object_t *armour; + int adam; + // damage reduction goes towards armour + adam = (reduceamt / 2); + // pick a random piece of armour + armour = getrandomarmour(victim); + if (armour) { + takedamage(armour,adam, damtype[i]); + } + } + } // end foreach damtype + + // special weapon effects + wepeffects(wep, victim->cell); + } else { // miss! + if (aidb) dblog(".oO { i missed! }"); + // announce it + if (lfhasflag(victim, F_MAGSHIELD) && ismetal(wep->material->id)) { + if (isplayer(lf) || haslos(player, lf->cell)) { + sprintf(buf, "%s",attackername); + + msg("%s%s magnetic shield repels %s%s attack.", victimname, getpossessive(victimname), + buf, getpossessive(buf)); + } + } else { + if (isplayer(lf)) { + msg("You miss %s.", victimname); + } else { + if (haslos(player, lf->cell)) { + // capitalise first letter + sprintf(buf, "%s",attackername); + + msg("%s misses %s.", buf, victimname); + } } } fightback(victim, lf); } - // get rid of temp unarmed object - if (op->first) { - killob(op->first); + // get rid of temp unarmed object pile + if (op) { + killobpile(op); } - free(op); - + + + // induction of fear? + if (!isdead(victim)) { + if (lfhasflag(victim, F_INDUCEFEAR)) { + scare(lf, victim, rnd(2,3)); + } + } + + if (aidb) dblog(".oO { doattack about to return B_FALSE }"); return B_FALSE; } -char *getattackverb(enum DAMTYPE damtype, int dam) { +int attackob(lifeform_t *lf, object_t *o) { + unsigned int dam[100]; + enum DAMTYPE damtype[100]; + int ndam = 0; + char attackername[BUFLEN]; + char obname[BUFLEN]; + flag_t *f; + flag_t *unarmedflag = NULL; + object_t *wep; + obpile_t *op = NULL; + cell_t *obloc = NULL; + int attacktime; + int unarmed = B_FALSE; + char wepname[BUFLEN]; + int i; + //int aidb = B_TRUE; + int maxhp; + + + // get names + getlfname(lf, attackername); + getobname(o, obname, o->amt); + + // get target object details + obloc = o->pile->where; + f = hasflag(o->flags, F_OBHP); + if (f) { + maxhp = f->val[1]; + } else { + maxhp = 1; + } + + // get weapon + wep = getattackwep(lf, &op, &unarmedflag); + if (!wep) { + if (isplayer(lf)) { + msg("You cannot attack!"); + } else if (haslos(player, lf->cell)) { + //msg("%s looks like it wants to attack!",attackername); + } + if (!isplayer(lf)) { + // if ai, take some time to avoid infinite loops! + taketime(lf, getmovespeed(lf)); + } + if (op) killobpile(op); + return B_TRUE; + } + + getobname(wep, wepname, 1); + + // depends on weapon, race attackspeed modifier flag, etc + attacktime = getattackspeed(lf); + + taketime(lf, attacktime); + + // don't need to figure out accuracy - we always hit. + + // determine damage + ndam = 0; + //if (unarmedflag && (unarmedflag->val[0] != NA)) { + if (unarmedflag) { + // this mosnter's unarmed attack will + // override normal damage calculation + dam[ndam] = getdamrollfromflag(unarmedflag); + } else { + dam[ndam] = getdamroll(wep); + } + + // damtype? + damtype[ndam] = getdamtype(wep); + ndam++; + + // don't need to check for blessed vs mosnters + + // determine extra damage + getextradam(wep, &dam[ndam], &damtype[ndam]); + + for (i = 0; i < ndam; i++) { + // announce the hit + if (isplayer(lf)) { + char extradambuf[BUFLEN]; + if (lfhasflag(player, F_EXTRAINFO) || lfhasflag(player, F_OMNIPOTENT) ) { + sprintf(extradambuf, " [%d dmg]",dam[i]); + } else { + strcpy(extradambuf, ""); + } + msg("You %s %s.", getattackverb(damtype[i], dam[i], maxhp), + obname, extradambuf); + } else if (haslos(player, lf->cell)) { + char withwep[BUFLEN]; + + if (wep && !unarmed && !isblind(player)) { // announce weapon used + sprintf(withwep, " with %s", wepname); + } else { + strcpy(withwep, ""); + } + + msg("%s %ss %s%s.", attackername, + getattackverb(damtype[i],dam[i],maxhp), obname,withwep); + } else { + youhear(lf->cell, "sounds of fighting"); + } + + // object loses hp + takedamage(o, dam[i], damtype[i]); + + } // end foreach damtype + + // special weapon effects + wepeffects(wep, obloc); + + // get rid of temp unarmed object pile + if (op) { + killobpile(op); + } + + return B_FALSE; +} + + +// returns a const char * +const char *getattackverb(enum DAMTYPE damtype, int dam, int maxhp) { + float pct; + pct = (int)(((float) dam / (float) maxhp) * 100.0); if (damtype == DT_PROJECTILE) { return "hit"; } else if (damtype == DT_HOLY) { - return "smite"; + switch (rnd(1,2)) { + case 1: + return "smite"; + case 2: + return "cleanse"; + } } else if (damtype == DT_PIERCE) { - if (dam == 0) { + if (pct <= 5) { return "poke"; - } else if (dam <= 5) { - return "nick"; - } else if (dam <= 10) { + } else if (pct <= 15) { return "stab"; - } else if (dam <= 15) { + } else if (pct <= 30) { return "pierce"; - } else if (dam <= 20) { + } else if (pct <= 40) { return "spear"; } else { return "deeply stab"; } + } else if (damtype == DT_POISONGAS) { + return "poison"; + } else if (damtype == DT_ELECTRIC) { + if (pct <= 5) { + return "zap"; + } else if (pct <= 15) { + return "jolt"; + } else if (pct <= 20) { + return "shock"; + } else if (pct <= 30) { + return "electrify"; + } else { + return "electrocute"; + } } else if (damtype == DT_CLAW) { - if (dam == 0) { + if (pct <= 5) { return "scratch"; - } else if (dam <= 5) { + } else if (pct <= 15) { return "claw"; - } else if (dam <= 15) { + } else if (pct <= 30) { return "rake"; - } else if (dam <= 30) { + } else if (pct <= 50) { return "gouge"; } else { return "eviscerate"; } } else if (damtype == DT_SLASH) { - if (dam == 0) { + if (pct <= 5) { return "scratch"; - } else if (dam <= 10) { + } else if (pct <= 15) { return "hit"; - } else if (dam <= 20) { + } else if (pct <= 30) { return "slash"; } else { return "slice"; } } else if (damtype == DT_CHOP) { - if (dam == 0) { + if (pct <= 5) { return "hit"; - } else if (dam <= 10) { + } else if (pct <= 15) { return "hack"; } else { return "chop"; } } else if (damtype == DT_BASH) { - if (dam == 0) { + if (pct <= 5) { return "whack"; - } else if (dam <= 5) { - return "hit"; - } else if (dam <= 10) { - return "bash"; - } else if (dam <= 15) { - return "pummel"; - } else if (dam <= 20) { - return "pound"; + } else if (pct <= 20) { + if (rnd(1,2) == 1) { + return "hit"; + } else { + return "bash"; + } } else { - return "flatten"; + return "pummel"; } } else if (damtype == DT_BITE) { - if (dam == 0) { + if (pct <= 5) { return "gnaw"; - } else if (dam <= 15) { + } else if (pct <= 30) { return "bite"; } else { return "savage"; } + } else if (damtype == DT_FIRE) { + if (pct <= 5) { + return "scorch"; + } else if (pct <= 20) { + return "burn"; + } else if (pct <= 40) { + return "scald"; + } else { + return "incinerate"; + } + } else if (damtype == DT_COLD) { + if (pct <= 10) { + return "chill"; + } else { + return "freeze"; + } + } else if (damtype == DT_TOUCH) { + return "touch"; } return "hit"; } -char *getkillverb(enum DAMTYPE damtype, int dam) { +object_t *getattackwep(lifeform_t *lf, obpile_t **unarmedpile, flag_t **unarmedflag) { + object_t *wep; + + wep = getweapon(lf); + if (!wep) { + // ie. unarmed + *unarmedpile = getunarmedweapon(lf, unarmedflag); + + if ((*unarmedpile)->first) { + wep = (*unarmedpile)->first; + } else { + wep = NULL; + } + } + return wep; +} + +enum DAMTYPE getdamtype(object_t *wep) { + flag_t *f; + enum DAMTYPE dt = DT_NONE; + + f = hasflag(wep->flags, F_DAMTYPE); + if (f) { + dt = f->val[0]; + } else { + // default - you are just bashing with whatever + // you weilded. + dt = DT_BASH; + } + return dt; +} + +int getextradam(object_t *wep, unsigned int *dam, enum DAMTYPE *damtype) { + flag_t *f; + for (f = wep->flags->first ; f ; f = f->next) { + if (f->id == F_ONFIRE) { + *dam = rnd(5,10); // TODO: don't hardcode? + *damtype = DT_FIRE; + } + } + return *dam; +} + +char *getkillverb(enum DAMTYPE damtype, int dam, int maxhp) { + float pct; + pct = (int)(((float) dam / (float) maxhp) * 100.0); + if (damtype == DT_HOLY) { return "smite"; } - if (dam >= 50) { - if (damtype == DT_PIERCE) return "fatally stab"; + if (pct >= 70) { + if (damtype == DT_PIERCE) return "impale"; + if (damtype == DT_BASH) return "flatten"; if (damtype == DT_BITE) return "gore"; if (damtype == DT_CLAW) return "disembowel"; if (damtype == DT_SLASH) return "behead"; // TODO: only if they have a head! otherwise "bisect" @@ -285,12 +633,11 @@ char *getkillverb(enum DAMTYPE damtype, int dam) { -// return TRUE if no damage -int getdamrange(object_t *o, int *min, int *max) { +void getdamrange(flagpile_t *fp, int *min, int *max) { int mindam,maxdam; flag_t *f; - f = hasflag(o->flags, F_DAM); + f = hasflag(fp, F_DAM); if (f) { int mod,ndice,sides; ndice = f->val[0]; @@ -304,6 +651,7 @@ int getdamrange(object_t *o, int *min, int *max) { mindam = (ndice * 1) + mod; maxdam = (ndice * sides) + mod; } else { + // TODO wepaon does damage based on weight mindam = 0; maxdam = 0; } @@ -315,53 +663,219 @@ int getdamrange(object_t *o, int *min, int *max) { // roll for damage int getdamroll(object_t *o) { int dam; - int ndice, sides, mod; flag_t *f; f = hasflag(o->flags, F_DAM); - if (f) { - ndice = f->val[0]; - sides = f->val[1]; - if (f->val[2] != NA) { - mod = f->val[2]; - } else { - mod = 0; + dam = getdamrollfromflag(f); + if (isblessed(o)) { + int dam2; + // blessed weapons get two rolls, and take the best + dam2 = getdamrollfromflag(f); + if (dam2 > dam) dam = dam2; + } else if (iscursed(o)) { + int dam2; + // cursed weapons get two rolls, and take the worst + dam2 = getdamrollfromflag(f); + if (dam2 < dam) dam = dam2; } - dam = rolldie(ndice, sides) + mod; + } else { + // TODO wepaon does damage based on weight // weapon does no damage dam = 0; } + // modify for bonus + f = hasflag(o->flags, F_BONUS); + if (f) { + dam += f->val[0]; + } + + if (dam < 0) dam = 0; + + return dam; +} + +float getdamreducepct(float armourrating) { + float reducepct; + reducepct = (armourrating * 1.5); + return reducepct; +} + +int getdamrollfromflag(flag_t *f) { + objecttype_t *ot; + int dam; + int ndice, sides, mod; + flag_t *damflag = NULL; + + ot = findotn(f->text); + if (ot) { + damflag = hasflag(ot->flags, F_DAM); + } + + // how many dice? + ndice = f->val[0]; + if (ndice == NA) { + // get it from weapon definition + if (damflag && (damflag->val[0] != NA)) { + ndice = damflag->val[0]; + } else { + ndice = 1; + } + } + + sides = f->val[1]; + if (sides == NA) { + // get it from weapon definition + if (damflag && (damflag->val[1] != NA)) { + sides = damflag->val[1]; + } else { + sides = 1; + } + } + + mod = f->val[2]; + if (mod == NA) { + // get it from weapon definition + if (damflag && (damflag->val[2] != NA)) { + mod = damflag->val[2]; + } else { + mod = 0; + } + } + + dam = rolldie(ndice, sides) + mod; + + assert(dam < 1000); + assert(dam >= 0); + return dam; } +// returns a multiplier +float getstrdammod(lifeform_t *lf) { + float mod = 0; + float base; + // <9 = penalty + // 9,10,11,12 = average + // >12 = bonus + base = getattr(lf, A_STR); + if ((base >= 9) && (base <= 12)) { + mod = 1; + } else if (base > 12) { + base -= 12; // ie. 1 - 6 + + // 13 = 1 = 1.1 + // 14 = 2 = 1.2 + // 15 = 3 = 1.3 + // 16 = 4 = 1.4 + // 17 = 5 = 1.6 + // 18 = 6 = 1.5 + + mod = 1 + (base / 10.0); + } else { // ie. 0 through 8 + // 0 = 0.1 + // 1 = 0.2 + // 2 = 0.3 + // 3 = 0.4 + // 4 = 0.5 + // 5 = 0.6 + // 6 = 0.7 + // 7 = 0.8 + // 8 = 0.9 + + mod = (base * 0.1); // ie. 8 -> 0.8 or 4 -> 0.4 + mod += 0.1; // ie. 8 -> 0.9 or 4 -> 0.5 + } + return mod; +} + + // determine attack type for lifeform. -// add an object of this kind to the pile 'op' -// return its type; -objecttype_t *getunarmedweapon(lifeform_t *lf,obpile_t *op) { +// allocate a pile and add weapon to it. +// return the pile. remember to free it! +obpile_t *getunarmedweapon(lifeform_t *lf,flag_t **uflag) { int nposs; flag_t *f; int sel; char poss[MAXPILEOBS][BUFLEN]; + obpile_t *op; + flag_t *possflag[MAXPILEOBS]; + + op = addobpile(NULL, NULL); // pick a random attack type. nposs = 0; for (f = lf->flags->first ; f ; f = f->next) { - if (f->id == F_UNARMEDATTACKOB) { + if (f->id == F_HASATTACK) { strcpy(poss[nposs],f->text); + possflag[nposs] = f; nposs++; } } if (nposs > 0) { + object_t *uob; sel = rnd(0,nposs-1); - addob(op, poss[sel]); + uob = addob(op, poss[sel]); + assert(uob); + if (uflag) *uflag = possflag[sel]; } - if (op->first) { - return op->first->type; - } else { - return NULL; + if (!op->first) { + if (uflag) *uflag = NULL; + } + return op; +} + +void wepeffects(object_t *wep, cell_t *where) { + flag_t *f; + lifeform_t *victim; + + victim = where->lf; + + if (!where) return; + for (f = wep->flags->first ; f ; f = f->next) { + if (f->id == F_FLAMESTRIKE) { + if (!hasob(where->obpile, OT_FIRESMALL)) { + // ignite! + addob(where->obpile, "small fire"); + // announce + if (haslos(player, where)) { + msg("A column of fire erupts from the ground!"); + f->known = B_KNOWN; + } + } + } else if ((f->id == F_HITCONFER) && victim) { + enum FLAG fid; + int val0,val1; + int min,max,howlong; + fid = f->val[0]; + if (!lfhasflag(victim, fid)) { + val0 = f->val[1]; + val1 = f->val[2]; + if (f->text) { + char loctext[BUFLEN]; + char *word, *dummy; + strcpy(loctext,f->text); + word = strtok_r(loctext, "-", &dummy); + if (word) { + min = atoi(word); + word = strtok_r(NULL, "-", &dummy); + if (word) { + max = atoi(word); + howlong = rnd(min,max); + } else { + howlong = PERMENANT; + } + } else { + howlong = PERMENANT; + } + } else { + howlong = PERMENANT; + } + addtempflag(victim->flags, fid, val0, val1, NA, NULL, howlong); + } + } } } diff --git a/attack.h b/attack.h index eba4189..5544700 100644 --- a/attack.h +++ b/attack.h @@ -1,8 +1,17 @@ #include "defs.h" -int doattack(lifeform_t *lf, lifeform_t *victim); -char *getattackverb(enum DAMTYPE damtype, int dam); -char *getkillverb(enum DAMTYPE damtype, int dam); -int getdamrange(object_t *o, int *min, int *max); +int attackcell(lifeform_t *lf, cell_t *c); +int attacklf(lifeform_t *lf, lifeform_t *victim); +int attackob(lifeform_t *lf, object_t *o); +const char *getattackverb(enum DAMTYPE damtype, int dam, int maxhp); +object_t *getattackwep(lifeform_t *lf, obpile_t **unarmedpile, flag_t **unarmedflag); +enum DAMTYPE getdamtype(object_t *wep); +int getextradam(object_t *wep, unsigned int *dam, enum DAMTYPE *damtype); +char *getkillverb(enum DAMTYPE damtype, int dam, int maxhp); +void getdamrange(flagpile_t *fp, int *min, int *max); +float getdamreducepct(float armourrating); int getdamroll(object_t *o); -objecttype_t *getunarmedweapon(lifeform_t *lf, obpile_t *op); +int getdamrollfromflag(flag_t *f); +float getstrdammod(lifeform_t *lf); +obpile_t *getunarmedweapon(lifeform_t *lf, flag_t **uflag); +void wepeffects(object_t *wep, cell_t *where); diff --git a/defs.h b/defs.h index c98dcef..ee896f9 100644 --- a/defs.h +++ b/defs.h @@ -13,6 +13,62 @@ #define UNLIMITED (-9876) #define ALL (-9875) #define NA (-9874) +#define NOBODY (-1) +#define ALLCONFERRED (-9873) + + +enum ATTRIB { + A_NONE = -1, + A_STR = 0, + A_DEX = 1, + A_IQ = 2, +}; +#define MAXATTS 3 + +enum BURDENED { + BR_NONE = 0, + BR_BURDENED = 1, + BR_OVERLOADED = 2, +}; + + +enum LFCONDITION { + C_DEAD = 0, + C_CRITICAL = 1, + C_SERIOUS = 2, + C_WOUNDED = 3, + C_HURT = 4, + C_HEALTHY = 5, +}; + +// AI defs + +// if target lf is out of view for this many turns, abandon chase +#define AI_FOLLOWTIME (10) + + +// object confitions for random objects +#define RO_NONE 0 +#define RO_DAMTYPE 1 +#define RO_OBCLASS 2 + +// for flags +#define PERMENANT (-9873) +#define FROMRACE (-9872) +#define FROMJOB (-9871) +#define FROMOBEQUIP (-9870) +#define FROMOBHOLD (-9869) +#define FROMOBACTIVATE (-9868) +#define FROMMAT (-9867) +#define FROMBLESSING (-9866) + + +#define IFKNOWN (-9772) // used by f_xxconfer. only confer a flag if item is known. +#define IFACTIVE (-9771) // used by f_prodeuceslight. only does so if object is activated + +#define ANYROOM (-9770) + +#define TICK_INTERVAL (20) // STRINGS @@ -23,20 +79,31 @@ #define MORESTRING "--More--" +// hunger constant +#define HUNGERCONST 10000 + // LIMITS -#define SCREENW 80 -#define SCREENH 24 +#define DEF_SCREENW 80 +#define DEF_SCREENH 24 #define MAXPILEOBS 52 +#define MAXCHOICES 150 + +#define MAXDEPTH 25 // max dungeon depth + #define MAXRANDOMOBCANDIDATES 100 #define MAXRANDOMLFCANDIDATES 100 +//#define MAX_MAPW 80 +//#define MAX_MAPH 50 #define MAX_MAPW 80 -#define MAX_MAPH 50 +#define MAX_MAPH 20 + + //#define MAX_MAPROOMS 10 #define MIN_ROOMH 4 @@ -47,39 +114,78 @@ #define MAXDIR_ORTH 4 #define MAXDIR_COMPASS 8 +#define MAXHISTORY 20 // max lines of history to keep + // MAP BUILDING #define DEF_TURNPCT 40 -#define DEF_SPARSENESS 14 +//#define DEF_SPARSENESS 14 +#define DEF_SPARSENESS 20 //#define DEF_SPARSENESS 0 #define DEF_LOOPPCT 70 //#define DEF_LOOPPCT 0 -#define MINROOMS 15 -#define MAXROOMS 25 +#define MINROOMS 5 +#define MAXROOMS 10 #define DEF_WINDOWPCT 5 // #define ANIMDELAY (1000000 / 100) // 1/100 of a second +#define MAXVISRANGE 10 // max visible range in full light + // askobject options #define AO_NONE 0 #define AO_INCLUDENOTHING 1 #define AO_ONLYEQUIPPED 2 +#define AO_EDIBLE 4 +#define AO_NOTIDENTIFIED 8 +#define AO_WEARABLE 16 +#define AO_OPERABLE 32 +#define AO_POURABLE 64 +#define AO_EQUIPPEDARMOUR 128 +#define AO_WEILDABLE 256 +#define AO_SPECIFIED 512 + +// askcoords target types +#define TT_NONE 0 +#define TT_MONSTER 1 +#define TT_OBJECT 2 +#define TT_DOOR 4 +#define TT_PLAYER 8 + +// target requirements +#define TR_NONE 0 +#define TR_NEEDLOS 1 +#define TR_NEEDLOF 2 // CONTROLLERS #define C_AI 0 #define C_PLAYER 1 +// deafult +//#define DEF_HEALTIME 100 // time to heal 1 hp + +// speeds +#define SP_GODLIKE 1 +#define SP_ULTRAFAST 5 +#define SP_VERYFAST 10 +#define SP_FAST 15 +#define SP_NORMAL 20 +#define SP_SLOW 25 +#define SP_VERYSLOW 30 +#define SP_ULTRASLOW 35 +#define SP_SLOWEST 40 + // speed settings (lower is faster) -#define SPEED_ATTACK 10 +#define SPEED_ATTACK SP_NORMAL #define SPEED_DEAD 50 -#define SPEED_MOVE 10 -#define SPEED_DROP 5 -#define SPEED_PICKUP 5 -#define SPEED_THROW 10 -#define SPEED_WAIT 10 -#define SPEED_READ 10 -#define SPEED_DRINK 5 +#define SPEED_MOVE SP_NORMAL +#define SPEED_DROP SP_FAST +#define SPEED_PICKUP SP_FAST +#define SPEED_THROW SP_FAST +#define SPEED_WAIT SP_NORMAL +#define SPEED_READ SP_NORMAL +#define SPEED_DRINK SP_FAST // DIRECTION TYPES @@ -108,51 +214,119 @@ #define DC_W 10 #define DC_NW 11 +// altitude directions +#define D_UP 12 +#define D_DOWN 13 + // Cell types -#define CT_WALL 0 -#define CT_ROOMWALL 1 -#define CT_CORRIDOR 2 -#define CT_ROOM 3 -#define CT_DOOROPEN 4 -#define CT_DOORCLOSED 5 -#define CT_LOOPCORRIDOR 6 +enum CELLTYPE { + CT_WALL, + CT_ROOMWALL, + CT_CORRIDOR, + CT_ROOM, + CT_LOOPCORRIDOR, +}; + +enum SPELLSCHOOL { + SS_DIVINE = 2, + SS_ABILITY = 0, + SS_ALLOMANCY = 1, + SS_DEATH = 3, + SS_ELEMENTAL = 4, + SS_DIVINATION = 5, + SS_GRAVITY = 6, + SS_LIFE = 7, + SS_MODIFICATION = 8, + SS_MENTAL = 9, + SS_SUMMONING = 10, + SS_TRANSLOCATION = 11, + SS_WILD = 12, + SS_LAST = 13, +}; + +enum STRBRACKET { + ST_HELPLESS = 0, + ST_FEEBLE = 1, + ST_VWEAK = 2, + ST_WEAK = 3, + ST_AVERAGE = 4, + ST_STRONG = 5, + ST_MIGHTY = 6, + ST_TITANIC = 7, +}; + +enum DEXBRACKET { + DX_INCOMPETENT = 0, + DX_OAFISH = 1, + DX_INEPT = 2, + DX_CLUMSY = 3, + DX_AWKWARD = 4, + DX_AVERAGE = 5, + DX_DEXTROUS = 6, + DX_NIMBLE = 7, + DX_AGILE = 8, + DX_SWIFT = 9, + DX_SUPERSONIC = 10, +}; + +enum IQBRACKET { + IQ_MINDLESS = 0, + IQ_VEGETABLE = 1, + IQ_ANIMAL = 2, + IQ_STUPID = 3, + IQ_DIMWITTED = 4, + IQ_DOPEY = 5, + IQ_AVERAGE = 6, + IQ_SMART = 7, + IQ_ENLIGHTENED = 8, + IQ_GENIUS = 9, +}; // damage type enum DAMTYPE { - DT_PIERCE, - DT_SLASH, - DT_CLAW, - DT_BASH, - DT_BITE, - DT_CHOP, - DT_PROJECTILE, - DT_HOLY, + DT_PIERCE = 0, + DT_SLASH = 1, + DT_FIRE = 2, + DT_COLD = 3, + DT_CLAW = 4, + DT_BASH = 5, + DT_BITE = 6, + DT_CHOP = 7, + DT_PROJECTILE = 8, + DT_HOLY = 9, + DT_WATER = 10, + DT_ACID = 11, + DT_MELT = 12, + DT_DIRECT = 13, // eg. from f_obhpdrain flag + DT_ELECTRIC = 14, + DT_EXPLOSIVE = 15, + DT_DECAY = 16, + DT_MAGIC = 17, + DT_TOUCH = 18, + DT_POISONGAS = 19, + DT_NONE = 20, // for direclty dealt damage, not really any type }; - -// speeds -#define SP_GODLIKE 1 -#define SP_ULTRAFAST 5 -#define SP_VERYFAST 10 -#define SP_FAST 15 -#define SP_NORMAL 20 -#define SP_SLOW 25 -#define SP_VERYSLOW 30 -#define SP_ULTRASLOW 35 -#define SP_SLOWEST 40 +#define MAXDAMTYPE 21 // Object Classes enum OBCLASS { OC_MONEY, OC_WEAPON, OC_ARMOUR, + OC_RING, OC_SCROLL, OC_POTION, OC_FOOD, + OC_CORPSE, OC_ROCK, + OC_TECH, OC_MISC, OC_SPELL, + OC_ABILITY, + OC_EFFECT, + OC_DFEATURE, OC_NULL = -999 }; @@ -167,6 +341,7 @@ enum HABITAT { H_ALL = 999 }; +/* enum RARITY { RR_UNIQUE = 7, RR_NEVER = 6, @@ -176,156 +351,662 @@ enum RARITY { RR_COMMON = 2, RR_FREQUENT = 1, }; +*/ enum RACE { + R_NONE, R_RANDOM, + R_HUMAN, + // monsters + R_EYEBAT, + R_GOBLIN, + R_GOBLINGUARD, + R_GOBLINCHAMP, + R_LIZARDMAN, + R_OGRE, + R_ORC, + R_ORK, + R_POLTERGEIST, + R_SLIME, + R_TROLL, + R_LURKINGHORROR, + // small animals R_BAT, + R_NEWT, R_RAT, + R_WOLF, + // insects + R_GLOWBUG, R_GIANTFLY, R_GIANTBLOWFLY, - R_HUMAN, - R_GOBLIN, + // undead + R_GHAST, + R_GHOUL, + R_SKELETON, + R_ZOMBIE, + // special + R_GASCLOUD, + R_DANCINGWEAPON, +}; + +enum JOB { + J_NONE, + J_GOD, + J_ADVENTURER, + J_ALLOMANCER, + J_COMMANDO, + J_PLUMBER, + J_PRINCE, }; // Object Materials enum MATERIAL { - MT_NOTHING, - MT_BONE, - MT_STONE, - MT_FIRE, - MT_PLASTIC, - MT_METAL, - MT_GLASS, - MT_FLESH, - MT_WOOD, - MT_GOLD, - MT_PAPER, - MT_ICE, - MT_WATER, - MT_LEATHER + MT_NOTHING = 0, + MT_BONE = 1, + MT_STONE = 2, + MT_FIRE = 3, + MT_PLASTIC = 4, + MT_METAL = 5, + MT_GLASS = 6, + MT_FLESH = 7, + MT_WOOD = 8, + MT_GOLD = 9, + MT_PAPER = 10, + MT_WETPAPER = 11, + MT_ICE = 12, + MT_WATER = 13, + MT_BLOOD = 14, + MT_LEATHER = 15, + MT_CLOTH = 16, + MT_FOOD = 17, + MT_RUBBER = 18, + MT_MAGIC = 19, + MT_GAS = 20, + MT_SLIME = 21, }; // Object Types enum OBTYPE { + OT_NONE, + // dungeon features + OT_BOULDER, + OT_WOODENDOOR, + OT_WOODENTABLE, + OT_WOODENBARREL, + OT_WOODENSTOOL, + OT_STAIRSDOWN, + OT_STAIRSUP, + OT_VENDINGMACHINE, // rocks OT_GOLD, OT_STONE, + OT_ASH, + OT_GEMOFSEEING, + // food + OT_BERRY, + OT_NUT, + OT_BANANA, + OT_APPLE, + OT_MUSHROOM, + OT_BREADSTALE, + OT_CHEESE, + OT_ROASTMEAT, + OT_BREADFRESH, + OT_CHOCOLATE, // corpses - OT_CORPSEHUMAN, - OT_CORPSEGOBLIN, + OT_CORPSEEYEBAT, OT_CORPSEBAT, OT_CORPSEFLY, - // spells - OT_S_RNDTELEPORT, - OT_S_MAPPING, + OT_CORPSEGLOWBUG, + OT_CORPSEGOBLIN, + OT_CORPSEHUMAN, + OT_CORPSELIZARD, + OT_CORPSEOGRE, + OT_CORPSEORK, + OT_CORPSERODENT, + OT_CORPSETROLL, + OT_CORPSEWOLF, // potions + OT_POT_ACID, + OT_POT_ACROBATICS, + OT_POT_AMBROSIA, + OT_POT_COMPETENCE, + OT_POT_ELEMENTENDURE, + OT_POT_ELEMENTIMMUNE, + OT_POT_GASEOUSFORM, OT_POT_HEALING, + OT_POT_HEALINGMIN, + OT_POT_INVULN, + OT_POT_MAGIC, + OT_POT_OIL, + OT_POT_POLYMORPH, + OT_POT_RESTORATION, + OT_POT_SANCTUARY, + OT_POT_SPEED, + OT_POT_WATER, + OT_POT_JUICE, // scrolls OT_MAP, - OT_SCR_RNDTELEPORT, + OT_SCR_NOTHING, + OT_SCR_CREATEMONSTER, + OT_SCR_DETECTAURA, + OT_SCR_DETECTLIFE, + OT_SCR_FIREBALL, + OT_SCR_FLAMEPILLAR, + OT_SCR_IDENTIFY, + OT_SCR_LIGHT, OT_SCR_MAPPING, + OT_SCR_MINDSCAN, + OT_SCR_FREEZEOB, + OT_SCR_TELEPORTRND, + OT_SCR_WISH, + // spells + // -- allomancy + OT_S_ABSORBMETAL, + OT_S_ACCELMETAL, + OT_S_ANIMATEMETAL, + OT_S_DETECTMETAL, + OT_S_DETONATE, + OT_S_PULLMETAL, + OT_S_MAGSHIELD, + // -- death + OT_S_INFINITEDEATH, + OT_S_WEAKEN, + // -- divination + OT_S_DETECTAURA, + OT_S_DETECTLIFE, + OT_S_IDENTIFY, + OT_S_MAPPING, + // -- elemental + OT_S_FIREDART, + OT_S_CONECOLD, + OT_S_FIREBALL, + OT_S_FLAMEPILLAR, + // -- gravity + OT_S_GRAVBOOST, + OT_S_HASTE, + OT_S_SLOW, + // -- life + OT_S_HEALING, + OT_S_HEALINGMIN, + OT_S_TURNUNDEAD, + // -- mental + OT_S_MINDSCAN, + OT_S_TELEKINESIS, + // -- modification + OT_S_FREEZEOB, + OT_S_GASEOUSFORM, + OT_S_INSCRIBE, + OT_S_LIGHT, + OT_S_POLYMORPH, + OT_S_POLYMORPHRND, + // -- summoning + OT_S_CREATEMONSTER, + // -- translocation + OT_S_DISPERSAL, + OT_S_LEVTELEPORT, + OT_S_TELEPORT, + OT_S_TELEPORTRND, + // -- wild + OT_S_MANASPIKE, + OT_S_ENERGYBOLT, + OT_S_ENERGYBLAST, + OT_S_FLASH, + // -- divine powers + OT_S_WISH, + // abilities + OT_A_JUMP, + // tech/tools + OT_BLINDFOLD, + OT_POCKETWATCH, + OT_C4, + OT_CREDITCARD, + OT_DIGITALWATCH, + OT_FLASHBANG, + OT_GRENADE, + OT_INFOVISOR, + OT_INSECTICIDE, + OT_JETPACK, + OT_BUGLAMP, + OT_LANTERNLED, + OT_LANTERNOIL, + OT_LOCKHACKER, + OT_LOCKPICK, + OT_MOTIONSCANNER, + OT_NVGOGGLES, + OT_PAPERCLIP, + OT_PICKAXE, + OT_TELEPAD, + OT_XRAYGOGGLES, // misc objects + OT_BONE, OT_EMPTYFLASK, + OT_EMPTYVIAL, + OT_CALTROP, OT_BROKENGLASS, + OT_ICECHUNK, OT_PUDDLEWATER, + OT_SLIMEPOOL, + OT_VOMITPOOL, + OT_BLOODSTAIN, + OT_BLOODPOOL, + OT_SOGGYPAPER, + OT_FLESHCHUNK, + // effects + OT_FIRELARGE, + OT_FIREMED, + OT_FIRESMALL, + OT_MAGICBARRIER, + OT_SMOKECLOUD, + OT_SMOKEPUFF, + OT_POISONCLOUD, + OT_POISONPUFF, + // armour - body + OT_ARMOURLEATHER, + OT_FLAKJACKET, + OT_OVERALLS, + OT_COTTONSHIRT, + OT_SILKSHIRT, + // armour - shoulders + OT_CLOAK, + OT_VELVETROBE, + // armour - legs + OT_CLOTHTROUSERS, + OT_RIDINGTROUSERS, + OT_COMBATPANTS, // armour - feet + OT_SANDALS, + OT_SHOESLEATHER, OT_BOOTSLEATHER, + OT_BOOTSRUBBER, // armour - hands + OT_GLOVESCLOTH, OT_GLOVESLEATHER, + OT_GAUNTLETS, + // armour - head + OT_SUNHAT, + OT_CAP, + OT_HELM, + OT_GASMASK, + OT_GOLDCROWN, + OT_HELMBONE, + OT_HELMFOOTBALL, + // armour - eyes + OT_SUNGLASSES, + // armour - shields + OT_BUCKLER, + // rings + OT_RING_INVULN, + OT_RING_MPREGEN, + OT_RING_PROTFIRE, + OT_RING_REGENERATION, + OT_RING_RESISTMAG, // animal weapons - OT_TEETHT, - OT_CLAWST, - OT_CLAWSS, + OT_CLAWS, OT_FISTS, + OT_TAIL, + OT_TEETH, + OT_ZAPPER, + // monster weapons + OT_ACIDATTACK, + OT_TOUCHPARALYZE, + OT_TOUCHPARALYZE2, // stabbing weapons - OT_STEAKKNIFE, OT_DAGGER, + OT_COMBATKNIFE, + OT_ORNDAGGER, OT_RAPIER, OT_TRIDENT, OT_QUICKBLADE, + // chopping weapons + OT_AXE, + OT_BATTLEAXE, + OT_GREATAXE, // slashing weapons + OT_KNIFE, + OT_STEAKKNIFE, OT_SCYTHE, OT_SHORTSWORD, OT_SCIMITAR, OT_LONGSWORD, + OT_ORNSWORD, // polearms OT_SPEAR, OT_QUARTERSTAFF, // bashing weapons + OT_STICK, + OT_SPANNER, OT_CLUB, OT_MACE, OT_MORNINGSTAR, OT_GREATCLUB, OT_SICKLE, - // holy + // projectile weapons + OT_REVOLVER, + OT_SLING, + // ammo + OT_BULLET, + OT_RUBBERBULLET, + // holy weapons OT_HANDOFGOD, }; + +#define BP_NONE (-1) enum BODYPART { - BP_WEAPON, + BP_WEAPON = 0, + BP_SECWEAPON, + BP_EYES, + BP_HEAD, + BP_SHOULDERS, + BP_BODY, + BP_HANDS, + BP_LEGS, + BP_FEET, BP_RIGHTHAND, BP_LEFTHAND, - BP_HANDS, - BP_HEAD, - BP_BODY, - BP_SHOULDERS, - BP_FEET, +}; +#define MAXBODYPARTS (11) + +// empty types +#define WE_NOTSOLID 1 +#define WE_EMPTY 2 + +enum NOISETYPE { + N_GETANGRY, }; +enum LFSIZE { + SZ_MINI, // ie. fly + SZ_TINY, // ie. mouse + SZ_SMALL, // ie. cat + SZ_MEDIUM, // ie. wolf/dog + SZ_HUMAN, // ie. human-sized + SZ_LARGE, // ie. bear/horse + SZ_HUGE, // ie. elephant, dragon + SZ_ENORMOUS, // ie. ??? kraken? +}; + + enum FLAG { + F_NONE, // dummy flag // object flags + F_DEAD, // object will be removed F_STACKABLE, // can stack multiple objects togethr F_NO_PLURAL, // this obname doesn't need an 's' for plurals (eg. gold, money) F_NO_A, // this obname doesn't need to start with 'a' for singular (eg. gold) - F_EDIBLE, // you can eat this. val2 = nutrition + F_CONTAINSOB, // for vending machiens. text is an object it contains. + // for items in shops + F_SHOPITEM, // causes shops to show this item as identified + F_VALUE, // how much an item is worth (over its base weight+material) + // weapon/armour flags F_EQUIPPED, // val0 = where it is equipped. CLEAR WHEN OB MOVED! + F_CURAMMO, // currently equipped ammo F_GOESON, // val0 = where it can be equipped. + F_BONUS, // val0=bonus/penalty to damage/armour. ie. +1 sword + F_MISSILE, // weapon would make a good missle - used by AI + F_UNIQUE, // only one may appear + F_GLYPH, // override the glyph with the first char of text + F_NOPICKUP, // cannot pick this up + F_IMPASSABLE, // cannot walk past this + F_BLOCKSVIEW, // cannot see past this + F_BLOCKSTHROW, // cannot throw past this + F_DIETEXT, // text when the object dies + F_DIECONVERTTEXT, // text when the object converts. eg. "melts" + F_DIECONVERTTEXTPL, // text when the object converts, if there are more than 1. eg. "melt" + F_DIECONVERT, // val0 = what this turns into when dying + F_NOBLESS, // can't be blessed or cursed + F_CORPSEOF, // this is a corpse of montype val0. + F_DTCONVERT, // damtype val0 converts this to f->text + F_MATCONVERT, // touching material id val0 converts this to f->text + F_MATCONVERTTEXT, // description when F_MATCONVERT happens. ie. "is consumed in flame" + F_MATCONVERTTEXTPL, // plural for matconverttext. + F_DTIMMUNE, // immune to damtype val0 + F_DTRESIST, // half dam from damtype val0 + F_DTVULN, // double dam from damtype val0 + F_MATIMMUNE, // immune to damage from obs with material 'mat' + F_DAMAGABLE, // this ob can be damaged via takedamage() + F_TINTED, // when worn on eyes, protects against bright lights + F_HOLDCONFER, // gives flag v0+v1 when carried. v2 specifies if it must be id'd. + F_EQUIPCONFER, // gives flag v0+v1 when weilded/worn. v2 specifies if it must be id'd. + F_ACTIVATECONFER, // gives flag v0+v1 when activated. v2 specifies if it must be id'd. + + F_HITCONFER, // hitting with this gives flagid=v0 + // with flagval0 = val1 + // with flagval1 = val2 + // with timeleft = text ("min-max") + F_ACTIVATED, // val0 = is this object turned on? + F_GRENADE, // this obkejct will drain charge when activated, then die + F_EXPLODEONDEATH, // explodes when it dies, deals val0 vamage. + // val1 = BIG means hit surrounding cells + // val2 = ifactivated, only explodes if activated. + F_EXPLODEONDAM, // explodes when it is damaged, deals val0 vamage. + // val1 = BIG means hit surrounding cells + // val2 = ifactivated, only explodes if activated. + F_FLASHONDEATH, // produce a bright flash when it dies,v0=range + F_FLASHONDAM, // produces a bright flash when it is damaged,v0=range,v2=ifacctivated + F_LASTDAMTYPE, // object equivilant of lf->lastdamtype + F_OPERONOFF, // operating this will just turn it on/off + F_OPERUSECHARGE, // operating this will use 1 charge + F_OPERNEEDTARGET, // need to ask for a target of type val0 when opering + // v1 is target requirements (los/lof) + // text is prompt + // what can ou do with this object? + F_EDIBLE, // you can eat this. val2 = nutrition. 100 = a meal + // -1 means "nutrition is weight x abs(val1)" + F_OPERABLE, // can operate? + F_POURABLE, // can pour? + F_PUSHABLE, // can push this object + F_PICKLOCKS, // can pick locks? val0=% change, + // val1=b_false, f_dieonfail, f_bluntonfail + F_LOCKABLE,// this object can be locked + // doors + F_DOOR, // this object is a door - ie. can open it + F_OPEN, // is this door open? + F_LOCKED,// door is locked + // stairs / teleporters / portals + F_CLIMBABLE, // this is a stiarcase + F_STAIRDIR, // val0 = direcion + F_OPPOSITESTAIRS, // val0 = opposite kind of stairs + F_MAPLINK, // val0 = map to link to + F_FLAMMABLE, // object will catch alight if burnt + + // object mods/effects + F_ONFIRE, // burning, also deals extra fire damage + // weapon flags F_OBATTACKSPEED, // how long weapon takes to attack F_DAMTYPE, // val0 = damage type F_DAM, // val0 = ndice, val1 = nsidesondie, val2 = mod F_ACCURACY, // 100 - val0 = penalty to tohit% (ie. higher is better) F_TWOHANDED, // weapon uses two hands to weild - F_UNIQUE, // only one may appear - F_GLYPH, // override the glyph with the first char of text - F_SHARP, // does damage when you step on it - F_NOPICKUP, // cannot pick this up + F_FIREARM, // this weapon is equipped in bp_secweapon, not _weapon. + F_FIRESPEED, // how fast this weapon shoots projectimes + F_AMMOOB, // what object this weapon fires + F_RANGE, // range of projectile firing weapon + F_FLAMESTRIKE, // causes fires where you hit + // tech flags + F_RNDCHARGES, // ob starts with between val0 and val1 charges + // this will cause F_CHARGES to be filled in + F_CHARGES, // generally the number of uses left,v0=min, v1=max + F_DONTSHOWCHARGES, // don't show 'xx charges left' when id'd + F_RECHARGEWHENOFF, // get power back when you turn it off + F_REFILLWITH, // pour obj id val0 onto this to refill its charges + // ob appearance flags + F_SHINY, + F_SHARP, // does damage when you step on it. v0/1 are min/max dam // armour flags F_ARMOURRATING, // val0 * 2 = pct of damage reduced + F_SHIELD, // this is a shield - use special bodyhitchance code + F_OBHP, // val0 = object health, val1 = object maxhealth + F_OBHPDRAIN, // val0 = amt hp to lose each second. val1 = NA or damtype + // if no damtype specified, it will be DT_DIRECT + F_NOOBDAMTEXT, // don't anounce damage to this object + F_NOOBDIETEXT, // don't anounce destruction of this object // scroll flags F_LINKSPELL, // val0 = spell this scroll will cast when read // ob identification flags F_HASHIDDENNAME, // whether this object class has a hidden name F_IDENTIFIED, // whether this object is fully identified + // bad flags + F_WALKDAM, // val0 = dam per sec, val1 = damtype + // magic + F_SPELLSCHOOL, // val0 = SPELLSCHOOL enum + F_SPELLLEVEL, // val0 = difficulty level of spell + F_MPCOST, // v0=mp cost of spell. if missing, mpcost if splev^2 + //F_SPELLLETTER, // text[0] = letter to cast this spell + F_AICASTATVICTIM, // hints for AI to cast spells + F_AICASTATSELF, // hints for AI to cast spells + F_AICASTANYWHERE, // hints for AI to cast spells // lifeform flags + F_ATTRMOD, // modify attribute val0 by val1. ie. 0=A_STR,1=-3 + F_SIZE, // val0 = lf size (enum LFSIZE) + F_RESTCOUNT, // val0 = how long you've been resting for + F_RESTHEALTIME, // val0 = how long to rest before healing hp + F_RESTHEALAMT, // val0 = how many hp to gain after resting x turns + F_AUTOCMD, // val0 = how many times to repeat this + F_LASTCMD, // text[0] = last command performed, v0/1 = x/y of cell, v2=various F_STARTOB, // val0 = %chance of starting with it, text = ob name + // val1,2 = min/max amounts. if NA, min=max=1. F_STARTOBDT, // val0 = %chance of starting with damtype val1 + F_STARTOBCLASS, // val0 = %chance of starting with obclass val1 + F_STARTIQ, // val0 = start iq bracket (ie. IQ_GENIUS) + F_STARTDEX, // val0 = start dex bracket (ie. DEX_xxx) + F_STARTSTR, // val0 = start str bracket (ie. STR_STRONG) F_CORPSETYPE, // text field specifies what corpse obtype to leave - F_LFATTACKDELAY, // how long this race takes to attack - F_FLYING, // lf is flying - F_HOSTILE, // lf will attack anything the player if in sight + F_NOCORPSE, // monster's body crumbles to dust after death + F_UNARMEDSPEED, // how long this race takes to attack + F_VISRANGE, // how far you can see (in the light) + F_VISRANGEMOD, // modifications to visrange + F_GUNTARGET, // current projectile weapon target + // MONSTER AI FLAGS + F_HOSTILE, // lf will attack the player if in sight + F_FRIENDLY, // lf will attack all non-players if in sight + F_WANTS, // lf will try to pick up object type val0. if + // val1 = B_COVETS, will even abandon attacks + // for it! + F_WANTSOBFLAG, // lf will look for obs with this flag. val1=covets + F_WANTSBETTERWEP, // lf will look for better weapons, val1=covets + F_WANTSBETTERARM, // lf will look for better armour, val1=covets + F_FLEEONDAM, // lf will run away instead of counterattacking + F_TARGET, // lf will attack lfid v0. lastknown x/y is v1/v2 + F_TARGETCELL, // lf will go towards this place. val0=x,val1=y + F_FLEEFROM, // lf will run away from this lf id + + // TEMP FLAGS + F_KILLEDBYPLAYER, // did the player kill this lf? + // monster noise flags + F_NOISETEXT, // val0 is a enum NOISETYPE + // text is "verb^noun" + // eg. "shouts^a shout" + F_SPELLCASTTEXT, // text is announcement for spellcast F_NODEATHANNOUNCE, // don't say 'the xx dies' if this lf dies - F_TARGET, // lf will attack this lf id F_MOVESPEED, // override default move speed + F_SPELLSPEED, // override default spellcast speed (ie. movespeed) F_RARITY, // val[0] = habitat, val[1] = rarity F_NUMAPPEAR, // when randomly appearing, can have > 1. val[0] = min, val[1] = max - F_HITDICE, // val0: # d4 to roll for hitdice. val1: +xx + F_HITDICE, // val0: # d4 to roll for maxhp per level. val1: +xx + F_MPDICE, // val0: # d4 to roll for maxmp per level. val1: +xx + F_JOB, // val0 = player's class/job + F_NAME, // text = player's name + F_XPVAL, // how much xp this is worth + F_BLOODOB, // text = type of object to drop for blood + F_OBESE, // double base weight for race! + F_ORIGRACE, // original player race (if you polymorphed) + F_ORIGJOB, // original player job (if you polymorphed) + F_POLYMORPHED, // lf has been polymorphed + // for monsters + F_INSECT, // this race is classed as an insect + F_ANIMAL, // this race is classed as an animal + F_UNDEAD, // this race is classed as undead + F_COLDBLOOD, // this race is coldblooded + F_NOBODYPART, // this race doesn't have bodypart val0 + F_NOPACK, // this race cannot hold objects + F_NOSPELLS, // this race cannot cast spells + F_INDUCEFEAR, // causes fear when you attack it + // INTRINSICS + F_BLIND, // cannot see anything + F_CANCAST, // can cast the spell val0 (need MP) + F_CANWILL, // can cast the spell val0 without using MP + F_DETECTAURAS, // autodetect bless/curse + F_DETECTLIFE, // autodetect nearby lifeforms + F_DETECTMETAL, // autodetect nearby metal + F_EXTRAINFO, // knows extra info + F_FLYING, // lf is flying + F_FASTMOVE, // modifier for move speed + F_FOODPOISONED, // has food poisoning + F_FREEZINGTOUCH,// next thing touched turns to ice! + F_GRAVBOOSTED,// cannot walk or throw stuff + F_PARALYZED,// cannot do anything + F_INVULNERABLE,// immune to most damage + F_MAGSHIELD,// magnetic shield + F_OMNIPOTENT, // knows extra info + F_PHOTOMEM, // you don't forget your surroundings + F_REGENERATES, // regenerate HP at val0 per turn + F_RESISTMAG, // immune to most magic effects + F_MPREGEN, // regenerate MP at val0 per turn + F_SEEINDARK, // nightvis range is val0 + F_PRODUCESLIGHT, // produces light of val0 radius. + // (but not for obs in pack) + // if val2 is true, will only make light if ob + // is activated! + F_SLOWMOVE, // modifier for move speed + F_XRAYVIS, //val0=num of walls we can see through // COMBAT - F_UNARMEDATTACKOB, // objecttype id to use when attacking unarmed + F_HASATTACK, // objecttype id to use when attacking unarmed + // if val0-3 are filled in, they override the object's + // damage (x y-sided dice + z) F_EVASION, // % chance of evading an attack + + // healing + F_RESTING, // are we resting? cleared on any action other than rest. + // + F_RUNNING, // are we running? + // nutrition + F_HUNGER, // val0 = hunger, higher = hungrier + // F_NULL = -1 }; +// hunger levels +enum HUNGER { + H_STUFFED = -2, + H_FULL = -1, + H_NONE = 0, + H_PECKISH = 1, + H_HUNGRY = 2, + H_VHUNGRY = 3, + H_STARVING = 4, + H_STARVED = 5 +}; + // probabilities //#define CH_DEADENDOB 35 //#define CH_EMPTYCELLOB 3 #define CH_PILLAR 5 + // Booleans #define B_FALSE (0) #define B_TRUE (-1) +#define B_TEMP (-1) +#define B_PERM (-2) + +#define B_DIEONFAIL (-1) +#define B_BLUNTONFAIL (-2) + +#define B_COVETS (-1) +#define B_ANY (0) + +#define B_SINGLE (0) +#define B_MULTI (-1) +#define B_MULTIPLE (-1) + +#define B_NOOBS (0) +#define B_WITHOBS (-1) + #define B_UNKNOWN (0) #define B_KNOWN (-1) @@ -348,6 +1029,10 @@ enum FLAG { #define B_TRANS (-1) +#define B_IFACTIVATED (-1) + +#define B_BIG (-1) + // errors enum ERROR { E_OK = 0, @@ -359,11 +1044,30 @@ enum ERROR { E_WEARINGSOMETHINGELSE = 6, E_NOUNARMEDATTACK = 7, E_NOTEQUIPPED = 8, - E_NOPICKUP = 9 + E_NOPICKUP = 9, + E_MONSTERNEARBY = 10, + E_NOEFFECT = 11, + E_FAILED = 12, + E_WRONGCELLTYPE = 13, + E_OBINWAY = 14, + E_TOOHEAVY = 15, + E_NOHANDS = 16, + E_NOPACK = 17, + E_INSUBSTANTIAL = 18, + E_WRONGOBTYPE = 19, + E_CURSED = 20, + E_NOLOS = 21, + E_NOLOF = 22, + E_IMPOSSIBLE = 23, + E_NOTARGET = 24, + E_NOAMMO = 25, + E_GRAVBOOSTED = 26, + E_NOMP = 27, }; typedef struct map_s { int id; + int depth; char *name; // name of this map enum HABITAT habitat; // eg. dungeon, forest, etc unsigned int seed; @@ -371,7 +1075,6 @@ typedef struct map_s { struct cell_s *cell[MAX_MAPW*MAX_MAPH]; // list of cells in this map int nextmap[MAXDIR_ORTH]; // which map is in each direction - long nextlfid; struct lifeform_s *lf,*lastlf; struct map_s *next, *prev; @@ -383,6 +1086,9 @@ typedef struct cell_s { int roomid; struct celltype_s *type; struct obpile_s *obpile; + int lit; + + char *writing; // lifeform pile struct lifeform_s *lf; @@ -396,15 +1102,23 @@ typedef struct cell_s { typedef struct celltype_s { int id; // eg. dungeonfloor, wall, door char glyph; // how to display it + char *name; // name of cell type int solid; // can you walk through it? int transparent; // can you see through it? + struct material_s *material; + + struct flagpile_s *flags; + struct celltype_s *next, *prev; + } celltype_t; typedef struct race_s { enum RACE id; + struct material_s *material; char *name; char glyph; + float weight; struct flagpile_s *flags; // speed modifiers // hit dice @@ -416,23 +1130,38 @@ typedef struct lifeform_s { int controller; struct race_s *race; int level; + long xp; int hp,maxhp; + int mp,maxmp; int alive; char *lastdam; + enum DAMTYPE lastdamtype; int timespent; int sorted; + int att[MAXATTS]; + int baseatt[MAXATTS]; + float forgettimer; struct obpile_s *pack; struct flagpile_s *flags; + int created; // set to TRUE once lf creation is done. + + int polyrevert; // about to revert form a polymorph? + // for loading long oblist[MAXPILEOBS]; int x,y; + int nlos; + cell_t **los; + + // for ai movement - don't need to save. + struct cell_s *ignorecell; struct cell_s *cell; struct lifeform_s *next, *prev; @@ -450,6 +1179,8 @@ typedef struct obpile_s { typedef struct flagpile_s { + lifeform_t *owner; + struct object_s *ob; struct flag_s *first,*last; } flagpile_t; @@ -458,6 +1189,13 @@ typedef struct flag_s { int nvals; int val[3]; char *text; + + long obfrom; // for conferred flags, link to object->id. -1 if not conferred. + + // + int known; + int lifetime; + struct flagpile_s *pile; struct flag_s *next, *prev; } flag_t; @@ -465,6 +1203,8 @@ typedef struct flag_s { typedef struct material_s { enum MATERIAL id; char *name; + float weightrating; + struct flagpile_s *flags; struct material_s *next,*prev; } material_t; @@ -475,6 +1215,13 @@ typedef struct knowledge_s { struct knowledge_s *next, *prev; } knowledge_t; +typedef struct job_s { + enum JOB id; + char *name; + flagpile_t *flags; + struct job_s *next, *prev; +} job_t; + typedef struct objectclass_s { enum OBCLASS id; char *name; @@ -510,11 +1257,31 @@ typedef struct object_s { enum BLESSTYPE blessed; int blessknown; int amt; // for stackable objects + long birthtime; flagpile_t *flags; struct object_s *next, *prev; } object_t; +typedef struct choice_s { + char ch; + char *text; + char *desc; + void *data; + int heading; + int valid; // used in askchoicestr +} choice_t; + + +typedef struct prompt_s { + char *q1; + void *result; + choice_t choice[MAXCHOICES]; + int selection; + int nchoices; + int maycancel; +} prompt_t; + #endif diff --git a/doc/add_bodypart.txt b/doc/add_bodypart.txt new file mode 100644 index 0000000..63a1848 --- /dev/null +++ b/doc/add_bodypart.txt @@ -0,0 +1,8 @@ +in defs.h: + add a new BODYPART enum entry + increment MAXBODYPARTS + +in lf.c: + update getbodypartname + update getbodypartequipname + update getbodyparthitchance diff --git a/doc/add_damtype.txt b/doc/add_damtype.txt new file mode 100644 index 0000000..9cd11af --- /dev/null +++ b/doc/add_damtype.txt @@ -0,0 +1,10 @@ +in defs.h: + add enum + increment MAXDAMTYPE +in objcets.c: + update getdamname() - eg. you take 5 "electrical" damage + update getdamnamenoun() - eg. you are immune to "electricity" + +in attack.c + update getattackverb if required + update getkillverb if required diff --git a/doc/add_habitat.txt b/doc/add_habitat.txt new file mode 100644 index 0000000..94cdd08 --- /dev/null +++ b/doc/add_habitat.txt @@ -0,0 +1,5 @@ +defs.h: + add H_xx enum + +map.c: + update getemptycelltype() diff --git a/doc/add_intrinsic.txt b/doc/add_intrinsic.txt new file mode 100644 index 0000000..b5313ad --- /dev/null +++ b/doc/add_intrinsic.txt @@ -0,0 +1,13 @@ +defs.h: + add F_WHATEVER + +io.c: + update describeob() for when an object confers this property + + update showlfstats() to describe the property + + update announceflaggain() to describe adding it + update announceflagloss() to describe losing it + + +then make it do something! diff --git a/doc/add_material.txt b/doc/add_material.txt new file mode 100644 index 0000000..33594b1 --- /dev/null +++ b/doc/add_material.txt @@ -0,0 +1,8 @@ +defs.h: + define the MT_* enum + +objects.c: + add an addmaterial() line + update adjustdammaterial() as required + + diff --git a/doc/add_obclass.txt b/doc/add_obclass.txt index 6d02e99..5b0005a 100644 --- a/doc/add_obclass.txt +++ b/doc/add_obclass.txt @@ -6,7 +6,11 @@ In defs.h: In objects.c: define the class with addoc() add the class to sortorder[] at the top - findotn() must know how to un-pluralise the name + findotn() must know how to un-pluralise the name (eg. potions) + + update genhiddenname() if this class isn't known + also add hidden names up the top + also update numXXXnames count in initobjects() In text.c: - makeplural() must know about the name + makeplural() must know about the name (eg. potion -> potions) diff --git a/doc/add_spellschool.txt b/doc/add_spellschool.txt new file mode 100644 index 0000000..c58b974 --- /dev/null +++ b/doc/add_spellschool.txt @@ -0,0 +1,5 @@ +defs.h: + update enum SPELLSCHOOL + +objects.c: + update getschoolname diff --git a/doc/adding_spells.txt b/doc/adding_spells.txt new file mode 100644 index 0000000..e2499e7 --- /dev/null +++ b/doc/adding_spells.txt @@ -0,0 +1,19 @@ +defs.h: + add the OT_xxx enum + (optional) add a scroll to do the same effect + (optional) add a potion to do the same effect + +objects.c: + define the spell + remember to have spelllevle + (optional) add a scroll to do the same effect, use F_LINKSPELL + (optional) add a potion to do the same effect + +spell.c: + implement the effects + remember to fill in *seenbyplayer if there is a scroll version + cope with: + blessed/cursed + target having antimagic - use hasmr(victim) + blindness if the effect is vision-based + diff --git a/doc/throwdist.txt b/doc/throwdist.txt new file mode 100644 index 0000000..a030d16 --- /dev/null +++ b/doc/throwdist.txt @@ -0,0 +1,12 @@ +baesball (0.14 kg) can be thrown 100 metres + +so let's say: + +1 kg = 10 metres (cells) +10 kg = 5m +20 kg = 1m + +distance = 10m - (weight/2) + + + diff --git a/flag.c b/flag.c index 69d7381..e12fd6d 100644 --- a/flag.c +++ b/flag.c @@ -3,12 +3,42 @@ #include #include "defs.h" #include "flag.h" +#include "io.h" +#include "lf.h" +#include "objects.h" #include "text.h" +extern int gamestarted; + flag_t *addflag(flagpile_t *fp, enum FLAG id, int val1, int val2, int val3, char *text) { + return addflag_real(fp, id, val1, val2, val3, text, PERMENANT, B_KNOWN); +} +flag_t *addtempflag(flagpile_t *fp, enum FLAG id, int val1, int val2, int val3, char *text, int timeleft) { + return addflag_real(fp, id, val1, val2, val3, text, timeleft, B_KNOWN); +} + +flag_t *addflag_real(flagpile_t *fp, enum FLAG id, int val1, int val2, int val3, char *text, int lifetime, int known) { flag_t *f; int i; + // identified things mean all new flags are autmaticlaly known. + if (hasflag(fp, F_IDENTIFIED)) { + known = B_KNOWN; + } + + // certain flags stack... + if (flagstacks(id)) { + f = hasflag(fp, id); + if (f) { + // add values! + f->val[0] += val1; + f->val[1] += val2; + f->val[2] += val3; + // TODO: how to handle text?? + return f; + } + } + if (fp->first == NULL) { fp->first = malloc(sizeof(flag_t)); f = fp->first; @@ -25,7 +55,10 @@ flag_t *addflag(flagpile_t *fp, enum FLAG id, int val1, int val2, int val3, char f->next = NULL; // fill in props - f->id = id; // increment next ob id + f->id = id; + f->lifetime = lifetime; + f->known = known; + f->obfrom = -1; // first blank values for (i = 0; i < 3; i++) { @@ -50,34 +83,88 @@ flag_t *addflag(flagpile_t *fp, enum FLAG id, int val1, int val2, int val3, char f->pile = fp; + + // notify + if (gamestarted) { + if (f->pile->owner) { + if (announceflaggain(f->pile->owner, f)) { + f->known = B_TRUE; + } + if (isplayer(f->pile->owner)) { + switch (f->id) { + case F_BLIND: + case F_SEEINDARK: + drawscreen(); + break; + default: + break; + } + } + } else if (f->pile->ob) { + if (announceobflaggain(f->pile->ob, f)) { + f->known = B_TRUE; + } + } + } + return f; } -flagpile_t *addflagpile(void) { +flagpile_t *addflagpile(lifeform_t *owner, object_t *ob) { flagpile_t *fp; fp = malloc(sizeof(flagpile_t)); fp->first = NULL; fp->last = NULL; + fp->owner = owner; + fp->ob = ob; return fp; } -flag_t *hasflag(flagpile_t *fp, int id) { +void copyflags(flagpile_t *dst, flagpile_t *src, int lifetime) { flag_t *f; - for (f = fp->first ; f ; f = f->next) { - if (f->id == id) return f; + for (f = src->first ; f ; f = f->next) { + addflag_real(dst, f->id, f->val[0], f->val[1], f->val[2], f->text, + (lifetime == NA) ? f->lifetime : lifetime, f->known); } - return NULL; } -flag_t *hasflagval(flagpile_t *fp, int id, int val1, int val2, int val3, char *text) { +int flagstacks(enum FLAG fid) { + int res = B_FALSE; + switch (fid) { + case F_EVASION: + case F_BONUS: + res = B_TRUE; + break; + default: + res = B_FALSE; + break; + } + return res; +} + +flag_t *hasflag(flagpile_t *fp, int id) { + return hasflag_real(fp, id, NA); +} + +flag_t *hasflagknown(flagpile_t *fp, int id) { + return hasflag_real(fp, id, B_TRUE); +} + +flag_t *hasflag_real(flagpile_t *fp, int id, int wantknown) { flag_t *f; + lifeform_t *owner; + owner = fp->owner; + for (f = fp->first ; f ; f = f->next) { if (f->id == id) { - if ( ((val1 == NA) || (f->val[0] == val1)) && - ((val2 == NA) || (f->val[1] == val2)) && - ((val3 == NA) || (f->val[2] == val3)) && - ((text == NULL) || strstr(f->text, text))) { + int valid = B_TRUE; + if ((wantknown != NA) && (f->known != wantknown)) valid = B_FALSE; + if (owner && (f->lifetime == FROMJOB) && !getjob(owner)) { + valid = B_FALSE; + } + + if (valid) { return f; } } @@ -85,9 +172,79 @@ flag_t *hasflagval(flagpile_t *fp, int id, int val1, int val2, int val3, char *t return NULL; } + +flag_t *hasflagval(flagpile_t *fp, int id, int val1, int val2, int val3, char *text) { + return hasflagval_real(fp, id, val1, val2, val3, text, B_FALSE); // doesn't have to be known +} + +flag_t *hasflagvalknown(flagpile_t *fp, int id, int val1, int val2, int val3, char *text) { + return hasflagval_real(fp, id, val1, val2, val3, text, B_TRUE); // must be known +} + +flag_t *hasflagval_real(flagpile_t *fp, int id, int val1, int val2, int val3, char *text, int wantknown) { + flag_t *f; + lifeform_t *owner; + owner = fp->owner; + for (f = fp->first ; f ; f = f->next) { + if (f->id == id) { + if (owner && (f->lifetime == FROMJOB) && !getjob(owner)) { + // invalid + } else { + if ( ((val1 == NA) || (f->val[0] == val1)) && + ((val2 == NA) || (f->val[1] == val2)) && + ((val3 == NA) || (f->val[2] == val3)) && + ((text == NULL) || strstr(f->text, text))) { + if (!wantknown || f->known) { + return f; + } + } + } + } + } + return NULL; +} + +void killflagsofid(flagpile_t *fp, enum FLAG fid) { + flag_t *f,*nextf; + for (f = fp->first ; f ; f = nextf) { + nextf = f->next; + if (f->id == fid) { + killflag(f); + } + } +} + void killflag(flag_t *f) { - int i; flag_t *nextone, *lastone; + lifeform_t *lf; + int needredraw = B_FALSE; + + lf = f->pile->owner; + + if (isplayer(lf)) { + switch (f->id) { + case F_BLIND: + case F_SEEINDARK: + needredraw = B_TRUE; + break; + default: + break; + } + } + + // notify + if (gamestarted) { + if (f->pile->owner) { + announceflagloss(f->pile->owner, f); + } else if (f->pile->ob) { + announceobflagloss(f->pile->ob, f); + } + } + + // we will revert to our original form at the end of timeeffectslf(). + if (lf && (f->id == F_POLYMORPHED)) { + lf->polyrevert = B_TRUE; + } // free mem @@ -109,6 +266,10 @@ void killflag(flag_t *f) { free (lastone->next ); lastone->next = nextone; } + + if (gamestarted && needredraw) { + drawscreen(); + } } void killflagpile(flagpile_t *fp) { @@ -118,3 +279,99 @@ void killflagpile(flagpile_t *fp) { free(fp); } +void timeeffectsflag(flag_t *f) { + if ((f->lifetime != PERMENANT) && (f->lifetime > 0)) { + f->lifetime--; + if (f->lifetime <= 0) { + killflag(f); + return; + } else if (f->lifetime == 5) { + // warn about certain flags...... + if (isplayer(f->pile->owner)) { + switch (f->id) { + case F_CANWILL: + switch (f->val[0]) { + case OT_A_JUMP: + warn("Your ability to jump is starting to run out...");; + break; + default: + break; + } + break; + case F_DTIMMUNE: + warn("Your %s immunity is starting to run out...", getdamname(f->val[0])); + break; + case F_DTRESIST: + warn("Your %s resistance is starting to run out...", getdamname(f->val[0])); + break; + case F_DTVULN: + warn("You feel a little less vulnerable to %s...", getdamname(f->val[0])); + break; + case F_MAGSHIELD: + warn("Your magnetic shield is weakening..."); + break; + case F_POLYMORPHED: + warn("You are starting to revert to your original form..."); + break; + default: // no message + break; + } + } + } else if (f->lifetime == 1) { + // warn about certain flags...... + if (isplayer(f->pile->owner)) { + switch (f->id) { + case F_CANWILL: + switch (f->val[0]) { + case OT_A_JUMP: + warn("Your ability to jump is about to expire!");; + break; + default: + break; + } + break; + case F_DTIMMUNE: + warn("Your %s immunity is about to expire!", getdamname(f->val[0])); + break; + case F_DTRESIST: + warn("Your %s resistance is about to expire!", getdamname(f->val[0])); + break; + case F_DTVULN: + warn("You feel a little less vulnerable to %s...", getdamname(f->val[0])); + break; + case F_MAGSHIELD: + warn("Your magnetic shield is about to expire!"); + break; + case F_POLYMORPHED: + warn("You are about to revert to your original form!"); + break; + default: // no message + break; + } + } + } + } +} + +void sumflags(flagpile_t *fp, int id, int *val0, int *val1, int *val2) { + flag_t *f; + if (val0) *val0 = 0; + if (val1) *val1 = 0; + if (val2) *val2 = 0; + for (f = fp->first ; f ; f = f->next) { + if (f->id == id) { + if (val0) *val0 = *val0 + f->val[0]; + if (val1) *val1 = *val1 + f->val[1]; + if (val2) *val2 = *val2 + f->val[2]; + } + } +} + +void timeeffectsflags(flagpile_t *fp) { + flag_t *f,*nextf; + for (f = fp->first ; f ; f = nextf) { + nextf = f->next; + timeeffectsflag(f); + } + +} diff --git a/flag.h b/flag.h index d53b468..55511f3 100644 --- a/flag.h +++ b/flag.h @@ -3,8 +3,21 @@ // functions flag_t *addflag(flagpile_t *fp, enum FLAG id, int val1, int val2, int val3, char *text); -flagpile_t *addflagpile(void); +flag_t *addtempflag(flagpile_t *fp, enum FLAG id, int val1, int val2, int val3, char *text, int timeleft); +flag_t *addflag_real(flagpile_t *fp, enum FLAG id, int val1, int val2, int val3, char *text, int lifetime, int known); +flagpile_t *addflagpile(lifeform_t *owner, object_t *o); +void copyflags(flagpile_t *dst, flagpile_t *src, int lifetime); +int flagstacks(enum FLAG fid); flag_t *hasflag(flagpile_t *fp, int id); +flag_t *hasflagknown(flagpile_t *fp, int id); +flag_t *hasflag_real(flagpile_t *fp, int id, int wantknown); flag_t *hasflagval(flagpile_t *fp, int id, int val1, int val2, int val3, char *text); +flag_t *hasflagvalknown(flagpile_t *fp, int id, int val1, int val2, int val3, char *text); +flag_t *hasflagval_real(flagpile_t *fp, int id, int val1, int val2, int val3, char *text, int wantknown); +void killflagsofid(flagpile_t *fp, enum FLAG fid); void killflag(flag_t *f); void killflagpile(flagpile_t *fp); +void makeflagknown(flagpile_t *fp); +void sumflags(flagpile_t *fp, int id, int *val0, int *val1, int *val2); +void timeeffectsflag(flag_t *f); +void timeeffectsflags(flagpile_t *fp); diff --git a/io.c b/io.c index 312c80f..14e7112 100644 --- a/io.c +++ b/io.c @@ -1,7 +1,10 @@ +#include +#include #include #include #include #include +#include #include "attack.h" #include "defs.h" #include "flag.h" @@ -11,21 +14,43 @@ #include "move.h" #include "nexus.h" #include "objects.h" +#include "text.h" +#include "save.h" +#include "spell.h" WINDOW *mainwin; WINDOW *gamewin; WINDOW *msgwin; WINDOW *statwin; +int statdirty = B_TRUE; + +extern int needredraw; +extern int numdraws; + +extern int SCREENW, SCREENH; + extern enum ERROR reason; +extern char msghist[MAXHISTORY][BUFLEN]; +extern int nmsghist; + +extern prompt_t prompt; + +extern object_t *retobs[MAXPILEOBS+1]; +extern int retobscount[MAXPILEOBS+1]; +extern int nretobs; + extern FILE *logfile; extern enum OBCLASS sortorder[]; extern knowledge_t *knowledge; +extern objecttype_t *objecttype; extern int gamestarted; +extern long curtime; char msgbuf[HUGEBUFLEN]; +char lastmsgbuf[HUGEBUFLEN]; extern lifeform_t *player; @@ -35,6 +60,52 @@ int viewx = -9999,viewy = -9999; int vieww,viewh; +int msgmod = B_FALSE; + + +void addchoice(prompt_t *p, char ch, char *text, char *desc, void *data) { + p->choice[p->nchoices].ch = ch; + p->choice[p->nchoices].text = strdup(text); + if (desc) { + p->choice[p->nchoices].desc = strdup(desc); + } else { + p->choice[p->nchoices].desc = strdup(text); + } + p->choice[p->nchoices].data = data; + p->choice[p->nchoices].heading = B_FALSE; + p->nchoices++; +} + +void addheading(prompt_t *p, char *text) { + p->choice[p->nchoices].ch = '\0'; + p->choice[p->nchoices].text = strdup(text); + p->choice[p->nchoices].desc = strdup(text); + p->choice[p->nchoices].data = NULL; + p->choice[p->nchoices].heading = B_TRUE; + p->nchoices++; +} + +void addmsghist(char *text) { + char *localtext; + int db = B_FALSE; + localtext = strdup(text); + localtext = strrep(localtext, MORESTRING, "", NULL); + if (nmsghist < MAXHISTORY) { + strcpy(msghist[nmsghist], localtext); + nmsghist++; + if (db) dblog("adding to msg hist: %s",localtext); + } else { + int i; + // shuffle everything up then replace last one + for (i = 0; i < (MAXHISTORY-1); i++) { + strcpy(msghist[i], msghist[i+1]); + } + strcpy(msghist[MAXHISTORY-1], localtext); + if (db) dblog("replacing last msg hist: %s",localtext); + } + free(localtext); +} + void anim(cell_t *src, cell_t *dst, char ch) { int deltax, deltay; int numpixels; @@ -42,15 +113,13 @@ void anim(cell_t *src, cell_t *dst, char ch) { int dinc1,dinc2,xinc1,xinc2,yinc1,yinc2; int xinc,yinc,dinc; int i; - int x1,y1,dir; + int x1,y1; int x; int y; - int maxvisrange; - int modmaxvisrange; - int xray = B_FALSE; - int wentuphill = B_FALSE; - int origheight; - int shopwall; + //int maxvisrange; + //int modmaxvisrange; + //int xray = B_FALSE; + //int wentuphill = B_FALSE; int x2,y2; @@ -112,11 +181,13 @@ void anim(cell_t *src, cell_t *dst, char ch) { // update screen updateviewfor(cell); drawlevelfor(player); - // draw char & cursor at its current pos... - mvwprintw(gamewin, cell->y - viewy, cell->x - viewx, "%c", ch); - wmove(gamewin, cell->y - viewy, cell->x - viewx); - wrefresh(gamewin); - usleep(ANIMDELAY); + if (haslos(player, cell)) { + // draw char & cursor at its current pos... + mvwprintw(gamewin, cell->y - viewy, cell->x - viewx, "%c", ch); + wmove(gamewin, cell->y - viewy, cell->x - viewx); + wrefresh(gamewin); + usleep(ANIMDELAY); + } // move to next cell if (d < 0) { @@ -135,12 +206,133 @@ void anim(cell_t *src, cell_t *dst, char ch) { } } -cell_t *askcoords(char *prompt) { - int finished = B_FALSE; - cell_t *c,*newcell; +void animradial(cell_t *src, int radius, char ch) { + int i; + int x,y; + cell_t *c; + + for (i = 0; i <= radius; i++) { + int drawn = B_FALSE; + + // update screen + updateviewfor(src); + drawlevelfor(player); + + for (y = src->y - radius ; y <= src->y + radius ; y++) { + for (x = src->x - radius ; x <= src->x + radius ; x++) { + c = getcellat(src->map, x, y); + if (c && haslos(player, c) && (getcelldistorth(src, c) <= i)) { + // draw char & cursor at its current pos... + mvwprintw(gamewin, c->y - viewy, c->x - viewx, "%c", ch); + drawn = B_TRUE; + } + } + } + + wrefresh(gamewin); + if (drawn) { + usleep(ANIMDELAY); + } + } + +} + +char askchar(char *prompt, char *validchars, char *def, int showchars) { + char buf[BUFLEN]; + char *p; + char temp[2]; + char ch; + int valid = B_FALSE; + + wclear(msgwin); + if (showchars) { + sprintf(buf, "%s (",prompt); + for (p = validchars ; *p ; ) { + temp[0] = *p; + temp[1] = '\0'; + strcat(buf, temp); + p++; + if (*p) { + strcat(buf, "/"); + } + } + strcat(buf, ")"); + } else { + sprintf(buf, "%s",prompt); + } + if (def) { + strcat(buf, " ["); + strcat(buf, def); + strcat(buf, "]"); + } + strcat(buf, "? "); + + mvwprintw(msgwin, 0, 0, buf); + wrefresh(msgwin); + + valid = B_FALSE; + while (!valid) { + ch = getkey(); + if (strchr(validchars, ch)) { + valid = B_TRUE; + } else if ((ch == 10) && def) { // enter = default + valid = B_TRUE; + } else { + valid = B_FALSE; + } + } + clearmsg(); + if ((ch == 13) && def) { + return def[0]; + } + return ch; +} + +cell_t *askcoords(char *prompt, int targettype) { + int finished = B_FALSE; + int moved = B_FALSE; + cell_t *c,*newcell; + char buf[BUFLEN]; + cell_t *target[MAX_MAPW*MAX_MAPH]; + int ntargets = 0,curtarget = -1; + int x,y; + + // build list of targets if required + if (targettype != TT_NONE) { + for (y = 0; y < player->cell->map->h; y++) { + for (x = 0; x < player->cell->map->w; x++) { + c = getcellat(player->cell->map, x, y); + if (c && haslos(player, c)) { + int valid = B_FALSE; + if ((targettype & TT_MONSTER) && haslf(c) && (c->lf->controller != C_PLAYER)) { + valid = B_TRUE; + } else if ((targettype & TT_PLAYER) && haslf(c) && (c->lf->controller == C_PLAYER)) { + valid = B_TRUE; + } else if ((targettype & TT_OBJECT) && hasobject(c)) { + valid = B_TRUE; + } else if ((targettype & TT_DOOR) && hasobwithflag(c->obpile, F_DOOR)) { + valid = B_TRUE; + } + + if (valid) { + target[ntargets] = c; + if (curtarget == -1) curtarget = ntargets; + ntargets++; + } + } + } + } + } + + // start prompting + + if (curtarget == -1) { + c = player->cell; + } else { + c = target[curtarget]; + } + - c = player->cell; - wclear(msgwin); mvwprintw(msgwin, 0, 0, "%s", prompt); wrefresh(msgwin); @@ -152,6 +344,90 @@ cell_t *askcoords(char *prompt) { drawstatus(); updateviewfor(c); drawlevelfor(player); + + if (moved) { + // show what we are over in msg bar + strcpy(buf, ""); + if (haslos(player, c)) { + if (c->lf) { + object_t *wep; + char extrainfo[BUFLEN]; + strcpy(extrainfo, ""); + getlfnamea(c->lf, buf); + // level + /* + if (lfhasflag(player, F_EXTRAINFO) || lfhasflag(player, F_OMNIPOTENT)) { + sprintf(extrainfo, "level %d, ",c->lf->level); + } + */ + if (ispeaceful(c->lf)) { + if (strlen(extrainfo)) strcat(extrainfo, ", "); + strcat(extrainfo, "peaceful"); + } + if (isfleeing(c->lf)) { + if (strlen(extrainfo)) strcat(extrainfo, ", "); + strcat(extrainfo, "fleeing"); + } + // hp + if (isgenius(player)) { + char buf2[BUFLEN]; + // show actual hp + sprintf(buf2, "hp %d/%d",c->lf->hp, c->lf->maxhp); + if (strlen(extrainfo)) strcat(extrainfo, ", "); + strcat(extrainfo, buf2); + } else { + char buf2[BUFLEN]; + // show condition name + sprintf(buf2, "%s",getseenlfconditionname(c->lf, player)); + if (strlen(buf2)) { + if (strlen(extrainfo)) strcat(extrainfo, ", "); + strcat(extrainfo, buf2); + } + } + + wep = getweapon(c->lf); + if (wep) { + char obname[BUFLEN]; + char buf2[BUFLEN]; + getobname(wep, obname, wep->amt); + sprintf(buf2, "weilding %s",obname); + if (strlen(extrainfo)) strcat(extrainfo, ", "); + strcat(extrainfo, buf2); + } + + if (strlen(extrainfo)) { + char buf2[BUFLEN]; + sprintf(buf2, " [%s]",extrainfo); + strcat(buf, buf2); + } + } else { + object_t *o; + // find top object name + o = gettopobject(c); + if (o) { + getobname(o, buf, o->amt); + } + } + } else { // no los + void *thing; + char desc[BUFLEN]; + switch (isinscanrange(c, &thing, desc, NULL)) { + case TT_MONSTER: + case TT_OBJECT: + strcpy(buf, desc); + break; + default: + break; + } + } + // dont use msg() to avoid 'more's + capitalise(buf); + wclear(msgwin); + mvwprintw(msgwin, 0, 0, "%s",buf); + wrefresh(msgwin); + } + + // move cursor selected position wmove(gamewin, c->y - viewy, c->x - viewx); redraw(); @@ -159,42 +435,582 @@ cell_t *askcoords(char *prompt) { // get input ch = getch(); if (ch == '.') { + clearmsg(); return c; } else if (ch == 27) { // ESC - cancel finished = B_TRUE; + } else if ((ch == '\'') && (ntargets > 0)) { // cycle targets + if (curtarget != -1) { // -1 means no targets + curtarget++; + if (curtarget >= ntargets) curtarget = 0; + c = target[curtarget]; + moved = B_TRUE; + } } else { dir = chartodir(ch); if (dir != D_NONE) { newcell = getcellindir(c, dir); - if (newcell) c = newcell; + if (newcell) { + c = newcell; + moved = B_TRUE; + } } } } + + clearmsg(); return NULL; } +// retbuf must already be allocated +// "def" is optional +char *askstring(char *prompt, char punc, char *retbuf, int retbuflen, char *def) { + char buf[BUFLEN]; + char *ending; + + wclear(msgwin); + sprintf(buf, "%s",prompt); + if (def) { + strcat(buf, " ["); + strcat(buf, def); + strcat(buf, "]"); + } + + asprintf(&ending, "%c ",punc); + strcat(buf, ending); + free(ending); + mvwprintw(msgwin, 0, 0, buf); + wrefresh(msgwin); + echo(); + wgetnstr(msgwin, retbuf, retbuflen); + noecho(); + clearmsg(); + if (def && (strlen(retbuf) == 0)) { + strcpy(retbuf, def); + } + return retbuf; +} + +/* +void announceob(enum OBTYPE oid) { + switch (oid) { + case OT_RING_INVULN: + msg("You feel indestructable!"); + break; + default: + break; + } +} +*/ + +int announceflaggain(lifeform_t *lf, flag_t *f) { + int donesomething = B_FALSE; + lifeform_t *lf2; + char lfname[BUFLEN]; + char buf[BUFLEN]; + + if (lf->race->id == R_DANCINGWEAPON) { + return B_FALSE; + } + + getlfname(lf, lfname); + + if (isdead(player)) return B_FALSE; + + // player can't see? + if (!haslos(player, lf->cell)) { + return B_FALSE; + } + + switch (f->id) { + case F_ATTRMOD: + switch (f->val[0]) { + case A_STR: + msg("%s %s %s!",lfname, isplayer(lf) ? "feel" : "seems", (f->val[1] < 0) ? "weaker" : "stronger"); + break; + case A_IQ: + msg("%s %s %s!",lfname, isplayer(lf) ? "feel" : "seems", (f->val[1] < 0) ? "less smart" : "smarter"); + break; + case A_DEX: + msg("%s %s %s!",lfname, isplayer(lf) ? "feel" : "seems", (f->val[1] < 0) ? "less agile" : "more gile"); + break; + } + donesomething = B_TRUE; + break; + case F_BLIND: + if (isplayer(lf)) { + msg("%s cannot see!",lfname); + } else { + msg("%s is blinded!",lfname); + } + donesomething = B_TRUE; + break; + case F_DTIMMUNE: + if (isplayer(lf)) { // don't know if monsters get it + msg("You feel immune to %s!", getdamnamenoun(f->val[0])); + donesomething = B_TRUE; + } + break; + case F_DTRESIST: + if (isplayer(lf)) { // don't know if monsters get it + msg("You feel resistant to %s!", getdamnamenoun(f->val[0])); + donesomething = B_TRUE; + } + break; + case F_DTVULN: + if (isplayer(lf)) { // don't know if monsters get it + msg("You feel vulnerable to %s!", getdamnamenoun(f->val[0])); + donesomething = B_TRUE; + } + break; + case F_CANWILL: + if (isplayer(lf)) { // don't know if monsters get it + switch (f->val[0]) { + case OT_A_JUMP: + msg("You feel like you could leap a tall building in a single bound!"); + donesomething = B_TRUE; + break; + default: + break; + } + } + break; + case F_DETECTAURAS: + if (isplayer(lf)) { // don't know if monsters get it + msg("You feel aware of spiritual auras around you."); + donesomething = B_TRUE; + } + break; + case F_DETECTLIFE: + if (isplayer(lf)) { // don't know if monsters get it + msg("You can now detect nearby lifeforms."); + donesomething = B_TRUE; + } + break; + case F_DETECTMETAL: + if (isplayer(lf)) { // don't know if monsters get it + msg("You can now detect nearby metal."); + donesomething = B_TRUE; + } + break; + case F_INVULNERABLE: + if (isplayer(lf)) { // don't know if monsters get it + msg("You feel invulnerable!"); + donesomething = B_TRUE; + } + break; + case F_FLEEFROM: + // who are they fleeing from? + lf2 = findlf(NULL, f->val[0]); + if (lf2) { + getlfname(lf2, buf); + msg("%s turn%s to flee from %s!", lfname, isplayer(lf) ? "" : "s", + haslos(player, lf2->cell) ? buf : "something"); + } + break; + case F_FOODPOISONED: + if (isplayer(lf)) { // don't know if monsters get it + msg("You feel very sick."); + donesomething = B_TRUE; + } + break; + case F_FASTMOVE: + msg("%s %s up.",lfname, isplayer(lf) ? "feel yourself speeding" : "speed"); + donesomething = B_TRUE; + break; + case F_FLYING: + msg("%s begin%s to fly!",lfname, isplayer(lf) ? "" : "s"); + donesomething = B_TRUE; + break; + case F_GRAVBOOSTED: + msg("%s %s stuck to the floor!",lfname, isplayer(lf) ? "are" : "is"); + donesomething = B_TRUE; + break; + case F_MAGSHIELD: + msg("%s %s surrounded by a magnetic shield!",lfname, isplayer(lf) ? "are" : "is"); + donesomething = B_TRUE; + break; + case F_PARALYZED: + if (isplayer(lf)) { + msg("You cannot move!"); + } else { + msg("%s stops moving!",lfname); + } + donesomething = B_TRUE; + break; + case F_PHOTOMEM: + if (isplayer(lf)) { // don't know if monsters get it + msg("You will no longer forget your surroundings."); + donesomething = B_TRUE; + } + break; + case F_REGENERATES: + if (isplayer(lf)) { // don't know if monsters get it + msg("Your body's healing rate is enhanced!"); + donesomething = B_TRUE; + } + break; + case F_RESISTMAG: + if (isplayer(lf)) { // don't know if monsters get it + msg("You feel immune to magic."); + donesomething = B_TRUE; + } + break; + case F_SEEINDARK: + if (isplayer(lf)) { // don't know if monsters get it + msg("You can now see in the dark."); + donesomething = B_TRUE; + } + break; + case F_SLOWMOVE: + msg("%s %s down.",lfname, isplayer(lf) ? "feel yourself slowing" : "slows"); + donesomething = B_TRUE; + break; + case F_VISRANGEMOD: + if (isplayer(lf)) { // don't know if monsters get it + char fartext[BUFLEN]; + if (f->val[0] > 0) { + int amt; + amt = abs(f->val[0]); + if (amt >= 7) { + strcpy(fartext, "a lot "); + } else if (amt >= 5) { + strcpy(fartext, ""); + } else { + strcpy(fartext, "a little "); + } + msg("You can see %sfurther.", fartext); + } else { + int amt; + amt = abs(f->val[0]); + if (amt >= 7) { + msg("Your vision is dramatically reduced."); + } else if (amt >= 5) { + msg("Your vision is reduced."); + } else { + msg("Your vision is slightly reduced."); + } + } + donesomething = B_TRUE; + } + break; + case F_XRAYVIS: + if (isplayer(lf)) { // don't know if monsters get it + msg("The walls around you suddenly turn transparent!"); + donesomething = B_TRUE; + } + break; + default: // no message + break; + } + return donesomething; +} + +void announceflagloss(lifeform_t *lf, flag_t *f) { + char lfname[BUFLEN]; + + if (lf->race->id == R_DANCINGWEAPON) { + return; + } + + if (isdead(player)) return; + getlfname(lf, lfname); + + // player can't see? + if (!haslos(player, lf->cell)) { + return; + } + switch (f->id) { + case F_ATTRMOD: + switch (f->val[0]) { + case A_STR: + msg("%s %s %s!",lfname, isplayer(lf) ? "feel" : "seems", (f->val[1] > 0) ? "weaker" : "stronger"); + break; + case A_IQ: + msg("%s %s %s!",lfname, isplayer(lf) ? "feel" : "seems", (f->val[1] > 0) ? "less smart" : "smarter"); + break; + case A_DEX: + msg("%s %s %s!",lfname, isplayer(lf) ? "feel" : "seems", (f->val[1] > 0) ? "less agile" : "more gile"); + break; + } + break; + case F_BLIND: + msg("%s can see again.",lfname); + break; + case F_DTIMMUNE: + if (isplayer(lf)) { // don't know if monsters lose it + msg("You are no longer immune to %s.", getdamnamenoun(f->val[0])); + } + break; + case F_DTRESIST: + if (isplayer(lf)) { // don't know if monsters lose it + msg("You are no longer resistant to %s.", getdamnamenoun(f->val[0])); + } + break; + case F_DTVULN: + if (isplayer(lf)) { // don't know if monsters lose it + msg("You are no longer vulnerable to %s.", getdamnamenoun(f->val[0])); + } + break; + case F_FASTMOVE: + msg("%s %s down.",lfname, isplayer(lf) ? "feel yourself slowing" : "slows"); + break; + case F_FLEEFROM: + msg("%s stop%s fleeing.", lfname, isplayer(lf) ? "" : "s"); + break; + case F_FOODPOISONED: + if (isplayer(lf)) { // don't know if monsters lose it + msg("You feel less sick now."); + } + break; + case F_CANWILL: + if (isplayer(lf)) { // don't know if monsters lose it + switch (f->val[0]) { + case OT_A_JUMP: + msg("You no longer feel so good at jumping."); + break; + default: + break; + } + } + break; + case F_INVULNERABLE: + if (isplayer(lf)) { // don't know if monsters lose it + msg("You no longer feel invulnerable."); + } + break; + case F_DETECTAURAS: + if (isplayer(lf)) { // don't know if monsters lose it + msg("You can no longer detect auras."); + } + break; + case F_DETECTLIFE: + if (isplayer(lf)) { // don't know if monsters get it + msg("You can no longer detect nearby lifeforms."); + } + break; + case F_DETECTMETAL: + if (isplayer(lf)) { // don't know if monsters get it + msg("You can no longer detect nearby metal."); + } + break; + case F_FLYING: + msg("%s %s flying.", lfname, isplayer(lf) ? "cease" : "stops"); + break; + case F_GRAVBOOSTED: + msg("%s %s no longer stuck to the floor.",lfname, isplayer(lf) ? "are" : "is"); + break; + case F_MAGSHIELD: + if (isplayer(lf)) { // don't know if monsters get it + msg("Your magnetic shield vanishes."); + } + break; + case F_PARALYZED: + if (isplayer(lf)) { // don't konw if it expires for monsters + msg("You can move again."); + } + break; + case F_PHOTOMEM: + if (isplayer(lf)) { // don't know if monsters lose it + msg("Your feel like you might forget your surroundings."); + } + break; + case F_REGENERATES: + if (isplayer(lf)) { // don't know if monsters lose it + msg("Your healing rate is no longer enhanced."); + } + break; + case F_RESISTMAG: + if (isplayer(lf)) { // don't know if monsters lose it + msg("You are no longer immune to magic."); + } + break; + /* + case F_RESTCOUNT: + if (isplayer(lf)) { + msg("Restcount expired."); + } + break; + */ + case F_SEEINDARK: + if (isplayer(lf)) { // don't know if monsters lose it + msg("You can no longer see in the dark."); + } + break; + case F_SLOWMOVE: + msg("%s %s up.",lfname, isplayer(lf) ? "feel yourself speeding" : "speeds"); + break; + case F_VISRANGEMOD: + if (isplayer(lf)) { // don't know if monsters get it + char fartext[BUFLEN]; + if (f->val[0] < 0) { + int amt; + amt = abs(f->val[0]); + if (amt >= 7) { + strcpy(fartext, "a lot "); + } else if (amt >= 5) { + strcpy(fartext, ""); + } else { + strcpy(fartext, "a little "); + } + msg("You can see %sfurther.", fartext); + } else { + int amt; + amt = abs(f->val[0]); + if (amt >= 7) { + msg("Your vision is dramatically reduced."); + } else if (amt >= 5) { + msg("Your vision is reduced."); + } else { + msg("Your vision is slightly reduced."); + } + } + } + break; + case F_XRAYVIS: + if (isplayer(lf)) { // don't know if monsters lose it + msg("The walls around you are no longer transparent."); + } + break; + default: // no message + break; + } +} + + +int announceobflaggain(object_t *o, flag_t *f) { + int donesomething = B_FALSE; + char obname[BUFLEN]; + char prefix[BUFLEN]; + cell_t *loc; + + loc = getoblocation(o); + + if (isdead(player)) return B_FALSE; + // player can't see? + if (!haslos(player, loc)) { + return B_FALSE; + } + real_getobname(o, obname, o->amt, B_FALSE, B_TRUE, B_TRUE); + + if (o->pile->owner) { + if (isplayer(o->pile->owner)) { + sprintf(prefix, "Your %s",noprefix(obname)); + } else { + char lfname[BUFLEN]; + getlfname(o->pile->owner, lfname); + sprintf(prefix, "%s%s %s",lfname, getpossessive(lfname), noprefix(obname)); + } + } else { + sprintf(prefix, "%s",obname); + } + + + switch (f->id) { + case F_ONFIRE: + donesomething = B_TRUE; + if (o->birthtime != curtime) msg("%s catches on fire.",prefix); + break; + case F_PRODUCESLIGHT: + donesomething = B_TRUE; + if (o->birthtime != curtime) msg("%s starts glowing!",prefix); + break; + default: // no message + break; + } + return donesomething; +} + +void announceobflagloss(object_t *o, flag_t *f) { + char obname[BUFLEN]; + char prefix[BUFLEN]; + cell_t *loc; + + loc = getoblocation(o); + + if (isdead(player)) return; + // player can't see? + if (!haslos(player, loc)) { + return; + } + real_getobname(o, obname, o->amt, B_FALSE, B_TRUE, B_TRUE); + + if (o->pile->owner) { + if (isplayer(o->pile->owner)) { + sprintf(prefix, "Your %s",noprefix(obname)); + } else { + char lfname[BUFLEN]; + getlfname(o->pile->owner, lfname); + sprintf(prefix, "%s%s %s",lfname, getpossessive(lfname), noprefix(obname)); + } + } else { + sprintf(prefix, "%s",obname); + } + + if (o->amt == 1) { + strcat(prefix, " is"); + } else { + strcat(prefix, " are"); + } + + switch (f->id) { + case F_ONFIRE: + msg("%s no longer on fire.",prefix); + break; + case F_PRODUCESLIGHT: + msg("%s no longer glowing.",prefix); + break; + default: // no message + break; + } +} + + object_t *askobject(obpile_t *op, char *prompt, int *count, int opts) { - doaskobject(op, prompt, count, opts, OC_NULL); + return doaskobject(op, prompt, count, opts, OC_NULL, F_NONE); +} + +object_t *askobjectwithflag(obpile_t *op, char *prompt, int *count, int opts, enum FLAG withflag) { + return doaskobject(op, prompt, count, opts, OC_NULL, withflag); } object_t *askobjectofclass(obpile_t *op, char *prompt, int *count, int opts, enum OBCLASS obclass) { - doaskobject(op, prompt, count, opts, obclass); + return doaskobject(op, prompt, count, opts, obclass, F_NONE); } -object_t *doaskobject(obpile_t *op, char *prompt, int *count, int opts, enum OBCLASS obclass) { +object_t *doaskobject(obpile_t *op, char *prompt, int *count, int opts, enum OBCLASS obclass, enum FLAG withflag) { int c,i; object_t *mylist[MAXPILEOBS+1]; char myletters[MAXPILEOBS+1]; char numstring[BUFLEN]; int firstob = 0; int nextpage = -1; - int lastline = SCREENH-2; + int lastline = SCREENH-4; char buf[BUFLEN],buf2[BUFLEN]; int finished; char nextlet = 'a'; int useobletters; objectclass_t *wantoc; flag_t *f; + object_t *ammo; + + // remember player's current ammo + if (op->owner) { + ammo = getammo(op->owner); + } + + if (countobs(op) <= 0) { + // no objects in pack + cls(); + mvwprintw(mainwin, 2, 0, "You have no possessions."); + // wait for key + centre(mainwin, getmaxy(mainwin)-1, "[Press any key]"); + getch(); + + clearmsg(); + drawscreen(); + return NULL; + } reason = E_OK; @@ -220,9 +1036,59 @@ object_t *doaskobject(obpile_t *op, char *prompt, int *count, int opts, enum OBC int ok; // can we include this object? ok = B_TRUE; + + if (withflag != F_NONE) { + if (!hasflag(o->flags, withflag)) { + ok = B_FALSE; + } + } + if (opts & AO_SPECIFIED) { + int n; + int found = B_FALSE; + // does retlist contain this? + for (n = 0; n < nretobs; n++) { + if (retobs[n] == o) { + found = B_TRUE; + break; + } + } + if (!found) { + ok = B_FALSE; + } + } if ((opts & AO_ONLYEQUIPPED) && !hasflag(o->flags, F_EQUIPPED)) { ok = B_FALSE; } + if ((opts & AO_EQUIPPEDARMOUR)) { + flag_t *ff; + ff = hasflag(o->flags, F_EQUIPPED); + if (!ff) { + ok = B_FALSE; + } else if (ff->val[0] == BP_WEAPON) { + ok = B_FALSE; + } + } + if ((opts & AO_EDIBLE) && !isedible(o)) { + ok = B_FALSE; + } + if ((opts & AO_WEARABLE) && !iswearable(o)) { + ok = B_FALSE; + } + if ((opts & AO_WEILDABLE) && !isweapon(o)) { + ok = B_FALSE; + } + if ((opts & AO_OPERABLE) && !isoperable(o)) { + ok = B_FALSE; + } + if ((opts & AO_POURABLE) && !ispourable(o)) { + ok = B_FALSE; + } + if (opts & AO_NOTIDENTIFIED) { + // if ob is identified + if (isidentified(o)) { + ok = B_FALSE; + } + } if (ok) { mylist[i] = o; @@ -248,15 +1114,13 @@ object_t *doaskobject(obpile_t *op, char *prompt, int *count, int opts, enum OBC int ch; - wclear(mainwin); - + cls(); // list the objects y = 2; for (i = firstob ; (mylist[i] != NULL) && (y < lastline); i++) { if (mylist[i]->type->obclass->id != lastclass) { - objectclass_t *oc; // print class heading mvwprintw(mainwin, y, 0, "%s", mylist[i]->type->obclass->name); @@ -268,10 +1132,45 @@ object_t *doaskobject(obpile_t *op, char *prompt, int *count, int opts, enum OBC getobname(mylist[i], buf,mylist[i]->amt); sprintf(buf2, " %c - %s", useobletters ? mylist[i]->letter : myletters[i], buf); + + // charges + f = hasflag(mylist[i]->flags, F_CHARGES); + if (f && f->known) { + if (!hasflag(mylist[i]->flags, F_DONTSHOWCHARGES)) { + char chargestr[BUFLEN]; + sprintf(chargestr, " (%d charges left)",f->val[0]); + strcat(buf2, chargestr); + } + } + + // activated + f = hasflag(mylist[i]->flags, F_ACTIVATED); + if (f) { + strcat(buf2, " [activated]"); + } + // condition + /* + f = hasflag(mylist[i]->flags, F_OBHP); + if (f) { + char condname[BUFLEN]; + getobconditionname(mylist[i], condname); + if (strlen(condname) > 0) { + strcat(buf2, " ["); + strcat(buf2, condname); + strcat(buf2, "]"); + } + } + */ + + f = hasflag(mylist[i]->flags,F_EQUIPPED); if (f) { if (f->val[0] == BP_WEAPON) { - strcat(buf2, " (weapon)"); + if (hasflag(mylist[i]->flags, F_TWOHANDED)) { + strcat(buf2, " (two-handed weapon)"); + } else { + strcat(buf2, " (weapon)"); + } } else { strcat(buf2, " ("); strcat(buf2, getbodypartequipname(f->val[0])); @@ -280,6 +1179,12 @@ object_t *doaskobject(obpile_t *op, char *prompt, int *count, int opts, enum OBC strcat(buf2, ")"); } } + + // ammo? + if (ammo && (ammo == mylist[i])) { + strcat(buf2, " (current ammo)"); + } + mvwprintw(mainwin, y, 0, buf2); y++; } @@ -298,7 +1203,7 @@ object_t *doaskobject(obpile_t *op, char *prompt, int *count, int opts, enum OBC (opts & AO_INCLUDENOTHING) ? "- for nothing, " : ""); } if (nextpage != -1) { - mvwprintw(mainwin, y, 0, "-- More --"); + mvwprintw(mainwin, y, 0, MORESTRING); } // update screen wrefresh(mainwin); @@ -350,13 +1255,13 @@ object_t *doaskobject(obpile_t *op, char *prompt, int *count, int opts, enum OBC clearmsg(); drawscreen(); return NULL; - } else if (isdigit(ch)) { + } else if (isdigit(ch) && count) { char temp[2]; temp[0] = ch; temp[1] = '\0'; strcat(numstring, temp); if (count) *count = atoi(numstring); - } else if (ch == 8) { // backspace + } else if ((ch == 8) && count) { // backspace if (strlen(numstring) > 0) { // remove last letter of number string numstring[strlen(numstring)-1] = '\0'; @@ -378,6 +1283,347 @@ object_t *doaskobject(obpile_t *op, char *prompt, int *count, int opts, enum OBC return NULL; } +int askobjectmulti(obpile_t *op, char *prompt, int opts) { + int c,i; + object_t *mylist[MAXPILEOBS+1]; + int selected[MAXPILEOBS+1]; + int selcount[MAXPILEOBS+1]; + char myletters[MAXPILEOBS+1]; + char numstring[BUFLEN]; + int firstob = 0; + int nextpage = -1; + int lastline = SCREENH-4; + char buf[BUFLEN],buf2[BUFLEN]; + int finished; + int count = ALL; + char nextlet = 'a'; + int useobletters; + objectclass_t *wantoc = NULL; + flag_t *f; + object_t *ammo; + + // remember player's current ammo + if (op->owner) { + ammo = getammo(op->owner); + } + + clearretobs(); + + if (countobs(op) <= 0) { + // no objects in pack + cls(); + mvwprintw(mainwin, 2, 0, "You have no possessions."); + // wait for key + centre(mainwin, getmaxy(mainwin)-1, "[Press any key]"); + getch(); + + clearmsg(); + drawscreen(); + return B_TRUE; + } + + reason = E_OK; + + // if picking form a player's pack, use the object's letters. + // otherwise just label them a, b, c, etc. + if (op->owner && (op->owner->controller == C_PLAYER)) { + useobletters = B_TRUE; + } else { + useobletters = B_FALSE; + } + + + + // construct a list of objects + c = 0; + i = 0; + while (sortorder[c] != OC_NULL) { + object_t *o; + if (!wantoc || (sortorder[c] == wantoc->id)) { + // add all objects of this class + for (o = op->first ; o ; o = o->next) { + if (o->type->obclass->id == sortorder[c]) { + int ok; + // can we include this object? + ok = B_TRUE; + if ((opts & AO_ONLYEQUIPPED) && !hasflag(o->flags, F_EQUIPPED)) { + ok = B_FALSE; + } + if ((opts & AO_EQUIPPEDARMOUR)) { + flag_t *ff; + ff = hasflag(o->flags, F_EQUIPPED); + if (!ff) { + ok = B_FALSE; + } else if (ff->val[0] == BP_WEAPON) { + ok = B_FALSE; + } + } + if ((opts & AO_EDIBLE) && !isedible(o)) { + ok = B_FALSE; + } + if ((opts & AO_WEARABLE) && !iswearable(o)) { + ok = B_FALSE; + } + if ((opts & AO_WEILDABLE) && !isweapon(o)) { + ok = B_FALSE; + } + if ((opts & AO_OPERABLE) && !isoperable(o)) { + ok = B_FALSE; + } + if ((opts & AO_POURABLE) && !ispourable(o)) { + ok = B_FALSE; + } + if (opts & AO_NOTIDENTIFIED) { + // if ob is identified + if (isidentified(o)) { + ok = B_FALSE; + } + } + + if (ok) { + mylist[i] = o; + myletters[i] = nextlet; + selected[i] = B_FALSE; + selcount[i] = 0; + if (++nextlet > 'z') nextlet = 'A'; + i++; + } + } + } + } + c++; + } + mylist[i] = NULL; + + // start displaying from the first one + firstob = 0; + nextpage = -1; + finished = B_FALSE; + strcpy(numstring, ""); + while (!finished) { + int lastclass = OC_NULL; + int y; + int ch; + + + cls(); + + // list the objects + y = 2; + + for (i = firstob ; (mylist[i] != NULL) && (y < lastline); i++) { + char selchar; + if (mylist[i]->type->obclass->id != lastclass) { + // print class heading + mvwprintw(mainwin, y, 0, "%s", mylist[i]->type->obclass->name); + + lastclass = mylist[i]->type->obclass->id; + + y++; + } + // print object name + getobname(mylist[i], buf,mylist[i]->amt); + if (selected[i]) { + if ((selcount[i] == ALL) || (selcount[i] == mylist[i]->amt)) { + selchar = '*'; + } else { + selchar = '#'; + } + } else { + selchar = ' '; + } + sprintf(buf2, "%c %c - %s", + selchar, + useobletters ? mylist[i]->letter : myletters[i], + buf); + + // charges + f = hasflag(mylist[i]->flags, F_CHARGES); + if (f && f->known) { + if (!hasflag(mylist[i]->flags, F_DONTSHOWCHARGES)) { + char chargestr[BUFLEN]; + sprintf(chargestr, " (%d charges left)",f->val[0]); + strcat(buf2, chargestr); + } + } + + f = hasflag(mylist[i]->flags, F_ACTIVATED); + if (f) { + strcat(buf2, " [activated]"); + } + // condition + /* + f = hasflag(mylist[i]->flags, F_OBHP); + if (f) { + char condname[BUFLEN]; + getobconditionname(mylist[i], condname); + if (strlen(condname) > 0) { + strcat(buf2, " ["); + strcat(buf2, condname); + strcat(buf2, "]"); + } + } + */ + + + f = hasflag(mylist[i]->flags,F_EQUIPPED); + if (f) { + if (f->val[0] == BP_WEAPON) { + if (hasflag(mylist[i]->flags, F_TWOHANDED)) { + strcat(buf2, " (two-handed weapon)"); + } else { + strcat(buf2, " (weapon)"); + } + } else { + strcat(buf2, " ("); + strcat(buf2, getbodypartequipname(f->val[0])); + strcat(buf2, " "); + strcat(buf2, getbodypartname(f->val[0])); + strcat(buf2, ")"); + } + } + + // ammo? + if (ammo && (ammo == mylist[i])) { + strcat(buf2, " (current ammo)"); + } + + mvwprintw(mainwin, y, 0, buf2); + y++; + } + if (mylist[i] == NULL) { + nextpage = -1; + } else { + nextpage = i; + } + // draw prompt + if (nextpage != -1) { + mvwprintw(mainwin, y, 0, MORESTRING); + } + if (strlen(numstring) > 0) { + mvwprintw(mainwin, 0, 0, "%s (%s','=all, ESC to quit) [%s]: ",prompt, + (opts & AO_INCLUDENOTHING) ? "- for nothing, " : "", + numstring); + } else { + mvwprintw(mainwin, 0, 0, "%s (%sESC to quit): ", prompt, + (opts & AO_INCLUDENOTHING) ? "- for nothing, " : ""); + } + // update screen + wrefresh(mainwin); + // wait for keypess + ch = getch(); + if (ch == 27) { // ESCAPE + finished = B_TRUE; + break; + } + // otherwise look for shift key etc.. + ch = keycodetokey(ch); + // then handle input + if (ch == ' ') { // next page + if (nextpage == -1) { // go to first page + firstob = 0; + } else { + firstob = nextpage; + } + } else if (isalpha(ch) || (ch == '$')) { + int which = -1; + // select it + if (useobletters) { + object_t *o; + o = findobl(op, ch); + // find ob in list + for (i = 0 ; (mylist[i] != NULL) ; i++) { + if (mylist[i] == o) { + which = i; + break; + } + } + } else { + for (i = 0 ; (mylist[i] != NULL) ; i++) { + if (myletters[i] == ch) { + which = i; + break; + } + } + } + if (which != -1) { + int val; + if (selected[i]) val = B_FALSE; + else val = B_TRUE; + + selected[i] = val; + if (val == B_TRUE) { + selcount[i] = count; + if (selcount[i] > mylist[i]->amt) selcount[i] = ALL; + } else { + selcount[i] = 0; + } + // reset count + strcpy(numstring, ""); + count = ALL; + } + } else if ((ch == '-') && (opts & AO_INCLUDENOTHING)) { // select nothing + reason = E_SELNOTHING; + nretobs = 0; + // display game windows again + clearmsg(); + drawscreen(); + return B_TRUE; + } else if (ch == ',') { // toggle all/none + int val; + if (selected[0]) { // deselect all + val = B_FALSE; + } else { // select all + val = B_TRUE; + } + for (i = 0 ; (mylist[i] != NULL) ; i++) { + selected[i] = val; + selcount[i] = mylist[i]->amt; + } + } else if (ch == 10) { // enter + // construct list to return + nretobs = 0; + for (i = 0 ; (mylist[i] != NULL); i++) { + if (selected[i]) { + retobs[nretobs] = mylist[i]; + retobscount[nretobs] = selcount[i]; + nretobs++; + } + } + finished = B_TRUE; + } else if (isdigit(ch) && count) { + char temp[2]; + temp[0] = ch; + temp[1] = '\0'; + strcat(numstring, temp); + count = atoi(numstring); + } else if ((ch == 8) && count) { // backspace + if (strlen(numstring) > 0) { + // remove last letter of number string + numstring[strlen(numstring)-1] = '\0'; + count = atoi(numstring); + } + } + + /* + // sanity check count... + if (count && (*count == 0)) { + strcpy(numstring, ""); + } + */ + } + + // clear msg bar + clearmsg(); + + // display game windows again + drawscreen(); + if (nretobs <= 0) { + return B_TRUE; + } + return B_FALSE; +} + void centre(WINDOW *win, int y, char *format, ... ) { int w; char buf[BUFLEN]; @@ -407,8 +1653,32 @@ int chartodir(char c) { } void clearmsg(void) { - wclear(msgwin); - wrefresh(msgwin); + real_clearmsg(B_FALSE); +} + +// use forced clear msg when we have +// drawn over the whole screen, eg. +// getlfstats or describeob. +void real_clearmsg(int force) { + // remember message history + if (force || strcmp(msgbuf, "")) { + char *p; + int ok = B_FALSE; + // make sure msg contains non-whitespace characters + for (p = msgbuf; p ; p++) { + if (*p != ' ') { + ok = B_TRUE; + break; + } + } + if (ok) { + addmsghist(msgbuf); + } + + strcpy(msgbuf, ""); + wclear(msgwin); + wrefresh(msgwin); + } } int cleanupgfx(void) { @@ -417,6 +1687,9 @@ int cleanupgfx(void) { return B_FALSE; } +void updatestatus(void) { + wrefresh(statwin); +} void updateviewfor(cell_t *cell) { // calculate viewport if required @@ -442,40 +1715,73 @@ void updateviewfor(cell_t *cell) { void drawscreen(void) { - drawstatus(); + if (statdirty) { + drawstatus(); + wrefresh(statwin); + statdirty = B_FALSE; + } - updateviewfor(player->cell); - drawlevelfor(player); - drawcursor(); - redraw(); + if (needredraw) { + updateviewfor(player->cell); + drawlevelfor(player); + drawcursor(); // this will call redraw gamewin + } } +void clearretobs(void) { + int i; + for (i = 0; i < MAXPILEOBS+1; i++) { + retobs[i] = NULL; + retobscount[i] = ALL; + } + nretobs = 0; +} + +// clears the screen +void cls(void) { + wclear(mainwin); + statdirty = B_TRUE; +} void describeob(object_t *o) { char buf[BUFLEN]; + char buf2[BUFLEN]; int y; - material_t *m; flag_t *f; + int obknown; + + cls(); - wclear(mainwin); - + obknown = isknown(o); // title getobname(o, buf,o->amt); mvwprintw(mainwin, 0, 0, buf); - if (isknown(o)) { - mvwprintw(mainwin, 2, 0, o->type->desc); - } else { - mvwprintw(mainwin, 2, 0, o->type->obclass->desc); - } + + getobdesc(o, buf); + mvwprintw(mainwin, 2, 0, buf); + // properties y = 4; - mvwprintw(mainwin, y, 0, "%s made from %s.",(o->amt == 1) ? "It is" : "They are", o->material->name); y++; + if (o->material->id != MT_FOOD) { + mvwprintw(mainwin, y, 0, "%s made from %s.",(o->amt == 1) ? "It is" : "They are", o->material->name); y++; + } + + if (isedible(o)) { + int basenutr; + basenutr = getnutritionbase(o); + mvwprintw(mainwin, y, 0, "%s edible.",(o->amt == 1) ? "It is" : "They are"); y++; + mvwprintw(mainwin, y, 0, "%s %s.",(o->amt == 1) ? "It is" : "They are each", getfillingname(basenutr)); y++; + } + if (o->amt == 1) { - mvwprintw(mainwin, y, 0, "It weighs %0.1fkg.",o->weight); + getweighttext(getobweight(o), buf); + mvwprintw(mainwin, y, 0, "It weighs %s.",buf); } else { - mvwprintw(mainwin, y, 0, "They weigh %0.1fkg (%0.1f each).",(o->weight * o->amt), o->weight); + getweighttext(getobweight(o), buf); + getweighttext(getobunitweight(o), buf2); + mvwprintw(mainwin, y, 0, "They weigh %s (%s each).",buf, buf2); } y++; @@ -483,81 +1789,487 @@ void describeob(object_t *o) { if (o->type->obclass->id == OC_WEAPON) { f = hasflag(o->flags, F_DAMTYPE); if (f) { + int bonus = 0; int damtype; - int anydam,mindam,maxdam; damtype = f->val[0]; - getdamrange(o, &mindam, &maxdam); + + f = hasflag(o->flags, F_BONUS); + if (f && f->known) { + // only tell player about bonuses if they are known.! + bonus = f->val[0]; + } + f = hasflag(o->flags, F_DAM); if (f) { + int mindam,maxdam; + getdamrange(o->flags, &mindam, &maxdam); + mindam += bonus; + maxdam += bonus; + if (mindam < 0) mindam = 0; + if (maxdam < 0) maxdam = 0; + + if (f->val[2] == NA) { - mvwprintw(mainwin, y, 0, "It deals %d-%d %s damage (%dd%d).",mindam,maxdam, + mvwprintw(mainwin, y, 0, "It inflicts %d-%d %s damage (%dd%d).",mindam,maxdam, getdamname(damtype), f->val[0], f->val[1]); } else { - mvwprintw(mainwin, y, 0, "It deals %d-%d %s damage (%dd%d%c%d).",mindam,maxdam, + mvwprintw(mainwin, y, 0, "It inflicts %d-%d %s damage (%dd%d%c%d).",mindam,maxdam, getdamname(damtype), f->val[0], f->val[1], (f->val[2] > 0) ? '+' : '-', abs(f->val[2])); } y++; } else { - mvwprintw(mainwin, y, 0, "It deals %s damage.",getdamname(damtype)); + mvwprintw(mainwin, y, 0, "It inflicts %s damage.",getdamname(damtype)); y++; } } + // other extra damage? + f = hasflag(o->flags, F_ONFIRE); + if (f) { + mvwprintw(mainwin, y, 0, " It also inflicts extra burning damage."); + y++; + } + f = hasflag(o->flags, F_OBATTACKSPEED); if (f) { getspeedname(f->val[0], buf); mvwprintw(mainwin, y, 0, "Its attack rate is %s.",buf); y++; } + + f = hasflag(o->flags, F_ACCURACY); + if (f) { + mvwprintw(mainwin, y, 0, "It has %s accuracy.",getaccuracyname(f->val[0])); + y++; + } + } - wrefresh(mainwin); - - // wait for key - getch(); -} - -void dodrop(obpile_t *op) { - object_t *o; - char buf[BUFLEN]; - int count = ALL; - o = askobject(op, "Drop what", &count, AO_NONE); - if (o) { - getobname(o, buf, count); - o = moveob(o, op->owner->cell->obpile, count); - if (o) { // if drop was successful... - if (op->owner) { - if (op->owner->controller == C_PLAYER) { - msg("You drop %s.",buf); - } - taketime(op->owner, (SPEED_DROP * count)); - } + f = hasflag(o->flags, F_MISSILE); + if (f) { + if (lfhasflag(player, F_EXTRAINFO) || lfhasflag(player, F_OMNIPOTENT)) { + int dam; + dam = getthrowdam(o); + mvwprintw(mainwin, y, 0, "%s good for throwing [base damage %d].",(o->amt == 1) ? "It is" : "They are", dam); } else { - // tell the player why! - if (op->owner->controller == C_PLAYER) { - switch (reason) { - case E_NOSPACE: - msg("There is no space here for any more objects!"); + mvwprintw(mainwin, y, 0, "%s good for throwing.", (o->amt == 1) ? "It is" : "They are"); + } + y++; + } + + f = hasflag(o->flags, F_PICKLOCKS); + if (f) { + mvwprintw(mainwin, y, 0, "You can use it to pick locks."); + y++; + } + + // immunities + for (f = o->flags->first ; f ; f = f->next) { + if (f->id == F_DTIMMUNE) { + mvwprintw(mainwin, y, 0, "It is immune to %s.",getdamnamenoun(f->val[0])); + y++; + } else if (f->id == F_DTRESIST) { + mvwprintw(mainwin, y, 0, "It is resistant to %s.",getdamnamenoun(f->val[0])); + y++; + } else if (f->id == F_DTVULN) { + mvwprintw(mainwin, y, 0, "It is vulnerable to %s.",getdamnamenoun(f->val[0])); + y++; + } + } + + // been made invulnerable ? + if (hasflag(o->type->flags, F_DAMAGABLE) && !hasflag(o->flags, F_DAMAGABLE)) { + mvwprintw(mainwin, y, 0, "It has been rendered invulnerable to most damage."); + y++; + } + + // now special flags... + y++; + + f = hasflag(o->flags, F_ONFIRE); + if (f) { + mvwprintw(mainwin, y, 0, "It is on fire."); + y++; + } + + if (obproduceslight(o)) { + mvwprintw(mainwin, y, 0, "It is producing light."); + y++; + } + + f = hasflag(o->flags, F_ACTIVATED); + if (f) { + mvwprintw(mainwin, y, 0, "It is activated."); + y++; + } + + + // if known, show what it confers + y++; + for (f = o->flags->first ; f ; f = f->next) { + if ((f->id == F_HOLDCONFER) || (f->id == F_EQUIPCONFER) || (f->id == F_ACTIVATECONFER)) { + if (obknown) { + objecttype_t *ot; + if (f->id == F_HOLDCONFER) strcpy(buf, "When held, it"); + else if (f->id == F_ACTIVATECONFER) strcpy(buf, "When activated, it"); + else if (f->id == F_HITCONFER) strcpy(buf, "When hit by it, it"); + else strcpy(buf, "When equipped, it"); + + // conferred intrinsics + switch (f->val[0]) { + case F_ATTRMOD: + mvwprintw(mainwin, y, 0, "%s %s your %s.", buf, (f->val[2] > 0) ? "increases" : "descreases", getattrname(f->val[1])); y++; break; - default: - msg("For some reason, you cannot drop %s!"); + case F_BLIND: + mvwprintw(mainwin, y, 0, "%s prevents you from seeing.", buf); y++; + break; + case F_DETECTLIFE: + mvwprintw(mainwin, y, 0, "%s will detect nearby lifeforms.", buf); y++; + break; + case F_DETECTMETAL: + mvwprintw(mainwin, y, 0, "%s will detect nearby metal.", buf); y++; + break; + case F_EXTRAINFO: + mvwprintw(mainwin, y, 0, "%s provides enhanced knowledge to you.", buf); y++; + break; + case F_FASTMOVE: + mvwprintw(mainwin, y, 0, "%s will speed up your movement.", buf); y++; + break; + case F_FLYING: + mvwprintw(mainwin, y, 0, "%s will allow you to fly.", buf); y++; + break; + case F_FREEZINGTOUCH: + mvwprintw(mainwin, y, 0, "%s will cause objects you touch to turn to ice.", buf); y++; + break; + case F_GRAVBOOSTED: + mvwprintw(mainwin, y, 0, "%s increases gravity around you.", buf); y++; + break; + case F_INVULNERABLE: + mvwprintw(mainwin, y, 0, "%s protects you from all physical harm.", buf); y++; + break; + case F_CANWILL: + ot = findot(f->val[1]); + if (ot) { + strcpy(buf2, ot->name); + capitalise(buf2); + mvwprintw(mainwin, y, 0, "%s allows you to cast '%s' at will.", buf, buf2); y++; + } + break; + case F_CANCAST: + ot = findot(f->val[1]); + if (ot) { + strcpy(buf2, ot->name); + capitalise(buf2); + mvwprintw(mainwin, y, 0, "%s allows you to cast '%s'.", buf, buf2); y++; + } + break; + case F_DETECTAURAS: + mvwprintw(mainwin, y, 0, "%s allows you to detect blessings or curses.", buf); y++; + break; + case F_MAGSHIELD: + mvwprintw(mainwin, y, 0, "%s surrounds you with a magnetic shield.", buf); y++; + break; + case F_PARALYZED: + mvwprintw(mainwin, y, 0, "%s paralyzes you.", buf); y++; + break; + case F_PHOTOMEM: + mvwprintw(mainwin, y, 0, "%s prevents you from forgetting your surroundings.", buf); y++; + break; + case F_REGENERATES: + if (f->val[1] == 1) { + strcpy(buf2, ""); + } else if (f->val[1] == 2) { + strcpy(buf2, "quickly"); + } else if (f->val[1] == 3) { + strcpy(buf2, "very quickly"); + } else { // >= 4 + strcpy(buf2, "extremely quickly"); + } + mvwprintw(mainwin, y, 0, "%s allows you to regenerate health%s.", buf,buf2); y++; + break; + case F_RESISTMAG: + mvwprintw(mainwin, y, 0, "%s grants you immunity from magic.", buf); y++; + break; + case F_SEEINDARK: + mvwprintw(mainwin, y, 0, "%s allows you to see in the dark.", buf); y++; + break; + case F_SLOWMOVE: + mvwprintw(mainwin, y, 0, "%s will slow down your movement.", buf); y++; + break; + case F_VISRANGEMOD: + mvwprintw(mainwin, y, 0, "%s %s your vision range.", buf, (f->val[1] > 0) ? "increases" : "descreases"); y++; + break; + case F_XRAYVIS: + mvwprintw(mainwin, y, 0, "%s allows you to see through walls.", buf); y++; break; } } } } + + // show special properties where known + f = hasflag(o->flags, F_FLAMESTRIKE); + if (f && f->known) { + mvwprintw(mainwin, y, 0, "It ignites fires wherever it hits."); + y++; + } + + y++; + if (hasflag(o->flags, F_NOBLESS)) { + mvwprintw(mainwin, y, 0, "%s cannot be blessed or cursed.", (o->amt == 1) ? "It" : "They" ); + y++; + } else { + if (isblessknown(o)) { + if (o->blessed == B_BLESSED) { + mvwprintw(mainwin, y, 0, "%s a blessing bestowed upon %s.", + (o->amt == 1) ? "It has" : "They have", + (o->amt == 1) ? "it" : "them"); + y++; + } else if (o->blessed == B_CURSED) { + mvwprintw(mainwin, y, 0, "%s cursed.", + (o->amt == 1) ? "It is" : "They are"); + y++; + } + } else { + mvwprintw(mainwin, y, 0, "%s might be blessed or cursed.", + (o->amt == 1) ? "It" : "They"); + y++; + } + } + + + wrefresh(mainwin); + + // wait for key + getch(); + real_clearmsg(B_TRUE); + drawscreen(); } -int dowear(obpile_t *op) { - object_t *o,*oo; +void doattackcell(char dirch) { + int dir; + flag_t *f; + + if (dirch == '\0') { + dirch = askchar("Attack in which direction (- to cancel)", "yuhjklbn-","-", B_FALSE); + } + dir = chartodir(dirch); + if (dir == D_NONE) { + clearmsg(); + return; + } else { + cell_t *c; + // update last cmd + f = hasflag(player->flags, F_LASTCMD); + if (f) { + f->val[2] = dirch; + } + // do it + c = getcellindir(player->cell, dir); + if (c) { + if (attackcell(player, c)) { + // failed + msg("There is nothing there to attack!"); + } + } + } + +} + +void doclose(void) { + char ch; + int failed = B_TRUE; // default is to fail + int dir; + + ch = askchar("Close door in which direction (- to cancel)", "yuhjklbn-","-", B_FALSE); + dir = chartodir(ch); + if (dir == D_NONE) { + clearmsg(); + return; + } else { + cell_t *c; + c = getcellindir(player->cell, dir); + if (c) { + failed = closedoorat(player, c); + } + } +} + +void dodrop(obpile_t *op, int wantmulti) { + object_t *o; char buf[BUFLEN]; int count = ALL; - int rv; + int i; + if (wantmulti) { + askobjectmulti(op, "Drop what", AO_NONE); + } else { + o = askobject(op, "Drop what", &count, AO_NONE); + if (o) { + retobs[0] = o; + retobscount[0] = count; + nretobs = 1; + } else { + nretobs = 0; + } + + } + if (nretobs <= 0) { + return; + } + + for (i = 0; i < nretobs; i++) { + flag_t *f; + //pickup(player, retobs[i],retobscount[i]); + + o = retobs[i]; + count = retobscount[i]; + + getobname(o, buf, count); + + f = hasflag(o->flags, F_EQUIPPED); + if (f) { + if (f->val[0] == BP_WEAPON) { + // first try to unweild it + if (unweild(player, o)) { + if (nretobs > 1) msg("Not dropping %s.",buf); more(); + continue; + } + } else { // armour + int ch; + char buf2[BUFLEN]; + // take it off first - this takes time. + sprintf(buf2, "Remove %s",buf); + ch = askchar(buf2, "yn","y", B_TRUE); + if (ch == 'y') { + if (takeoff(player, o)) { + // failed to take it off - can't drop it. + if (nretobs > 1) msg("Not dropping %s.",buf); more(); + continue; + + } + } else { + if (nretobs > 1) msg("Not dropping %s.",buf); more(); + continue; + } + } + } + + if (count == ALL) count = o->amt; + + drop(o, count); + } +} + +void doeat(obpile_t *op) { + object_t *o; + char ch; + char buf[BUFLEN]; + char obname[BUFLEN]; + + // edible objects here? + for (o = player->cell->obpile->first; o ; o = o->next) { + if (isedible(o)) { + getobname(o, obname, o->amt); + sprintf(buf, "There %s %s here. Eat %s", + (o->amt == 1) ? "is" : "are", + obname, + (o->amt == 1) ? "it" : "one"); + ch = askchar(buf, "yn","n", B_TRUE); + if (ch == 'y') { + eat(player, o); + return; + } + } + } + + if (!hasedibleob(player->pack)) { + msg("You have nothing to eat!"); + return; + } + + o = askobject(op, "Eat what", NULL, AO_EDIBLE); + if (o) { + eat(player, o); + } +} + +void dovendingmachine(lifeform_t *lf, object_t *vm) { + int y; flag_t *f; - o = askobjectofclass(op, "Wear what", NULL, AO_NONE, OC_ARMOUR); + //int i; + int done; + char ch; + char choices[BUFLEN]; + char buf[BUFLEN]; + char buf2[BUFLEN]; + + done = B_FALSE; + while (!done) { + obpile_t *op; + cls(); + y = 0; + centre(mainwin, y, "VENDING MACINE"); + y += 2; + + op = addobpile(NULL, NULL); + + // list objects for sale + strcpy(choices, ""); + for (f = vm->flags->first ; f ; f = f->next) { + if (f->id == F_CONTAINSOB) { + char temp[2]; + char obname[BUFLEN]; + object_t *o; + + o = addob(op, f->text); + // make object fully known + addflag(o->flags, F_SHOPITEM, B_TRUE, NA, NA, NULL); + getobname(o, obname, o->amt); + + ch = f->val[0]; + sprintf(buf, "%c - %s", ch, obname); + + sprintf(buf2, "%-60s$%d",buf,getobvalue(o)); + mvwprintw(mainwin, y, 0, "%s", buf2); + y++; + + sprintf(temp, "%c",ch); + strcat(choices, temp); + + killob(o); + } + } + + killobpile(op); + + + y++; + // ask what to do + mvwprintw(mainwin, y, 0, "What will you buy (ESC to exit)? "); + + ch = getch(); + if (ch == 27) { + done = B_TRUE; + } else { + // try to find that object... + // oooooooo + } + } + + + drawscreen(); + real_clearmsg(B_TRUE); +} + + +int dowear(obpile_t *op) { + object_t *o; + int rv; + o = askobject(op, "Wear what", NULL, AO_WEARABLE); if (o) { wear(player, o); } else { + msg("Cancelled."); rv = B_TRUE; } @@ -566,12 +2278,10 @@ int dowear(obpile_t *op) { int doweild(obpile_t *op) { - object_t *o,*oo; - char buf[BUFLEN]; + object_t *o; int count = ALL; int rv; - flag_t *f; - o = askobject(op, "Weild what", &count, AO_INCLUDENOTHING); + o = askobject(op, "Weild what", &count, AO_WEILDABLE | AO_INCLUDENOTHING); if (o) { rv = weild(player, o); } else if (reason == E_SELNOTHING) { @@ -590,7 +2300,7 @@ void doknowledgelist(void) { int numfound = 0; int c; - wclear(mainwin); + cls(); mvwprintw(mainwin, y, 0, "Current Knowledge"); y++; y++; @@ -608,16 +2318,16 @@ void doknowledgelist(void) { first = B_FALSE; } - mvwprintw(mainwin, y, 0, " %-20s (%s)",ot->name, k->hiddenname); + mvwprintw(mainwin, y, 0, " %-25s (%s)",ot->name, k->hiddenname); y++; numfound++; if (y >= (SCREENH-1)) { - mvwprintw(mainwin, y, 0, "--More--"); + mvwprintw(mainwin, y, 0, MORESTRING); wrefresh(mainwin); getch(); - wclear(mainwin); + cls(); } } } @@ -634,11 +2344,257 @@ void doknowledgelist(void) { drawscreen(); } +void dolook(cell_t *where) { + int numobs; + char buf[BUFLEN]; + char seeverb[BUFLEN]; + int seensomething = B_FALSE; + + if (isblind(player)) { + strcpy(seeverb, "feel"); + } else { + strcpy(seeverb, "see"); + } + + numobs = countobs(where->obpile); + if (numobs > 0) { + if (numobs == 1) { + getobname(where->obpile->first, buf, where->obpile->first->amt); + msg("You %s %s here.", seeverb, buf); + } else if ((numobs > 1) && (numobs <= 3)) { + msg("You %s a few objects here.", seeverb); + } else if ((numobs > 3) && (numobs <= 6)) { + msg("You %s some objects here.", seeverb); + } else if (numobs > 6) { + msg("You %s many objects here.", seeverb); + } + seensomething = B_TRUE; + } + + // writing here? + if (where->writing && !isblind(player)) { + msg("There is a magical inscription here:"); + msg("\"%s\"", where->writing); + seensomething = B_TRUE; + } + + + if (!seensomething) { + // just clear the message buffer + //clearmsg(); + if (isblind(player)) { + msg("There does not seem to be anything here."); + } else { + msg("There is nothing here."); + } + } +} + +void domagic(enum OBTYPE spellid, int cellx, int celly) { + char ch; + flag_t *f; + char buf[BUFLEN]; + char buf2[BUFLEN]; + char costbuf[BUFLEN]; + enum OBTYPE poss[MAXPILEOBS]; + int mpcost[MAXPILEOBS]; + int validspell[MAXPILEOBS]; + int nposs; + int i,n; + enum SPELLSCHOOL lastschool; + objecttype_t *ot; + + if (spellid == OT_NONE) { + nposs = 0; + + for (i = SS_ABILITY; i < SS_LAST; i++) { + // get list of spells/abilities we can cast at will + for (ot = objecttype ; ot ; ot = ot->next) { + if ((ot->obclass->id == OC_SPELL) || (ot->obclass->id == OC_ABILITY)) { + f = lfhasflagval(player, F_CANWILL, ot->id, NA, NA, NULL); + if (f) { + if (hasflagval(ot->flags, F_SPELLSCHOOL, i, NA, NA, NULL)) { + poss[nposs] = ot->id; + mpcost[nposs] = -1; + validspell[nposs] = B_TRUE; + nposs++; + } + } + } + } + + + if (!lfhasflag(player, F_NOSPELLS)) { + // get list of spells we can cast using mp + for (ot = objecttype ; ot ; ot = ot->next) { + if (ot->obclass->id == OC_SPELL) { + if (hasflagval(ot->flags, F_SPELLSCHOOL, i, NA, NA, NULL)) { + // not using 'cancast' here because we want to list spells + // even if we don't have enough mp + if (lfhasflagval(player, F_CANCAST, ot->id, NA, NA, NULL)) { + int cost; + int found = B_FALSE; + cost = getmpcost(ot->id); + for (n = 0; n < nposs; n++) { + if (poss[n] == ot->id) { + found = B_TRUE; + break; + } + } + if (!found) { + // add to list + poss[nposs] = ot->id; + mpcost[nposs] = cost; + if (player->mp >= cost) { + validspell[nposs] = B_TRUE; + } else { + validspell[nposs] = B_FALSE; + } + nposs++; + } + } + } + } + } + } + } // end foreach spell school + + + if (lfhasflag(player, F_NOSPELLS) && (nposs == 0)) { + msg("%ss cannot use magic!", player->race->name); + return; + } + + // list player's magic... + ch = 'a'; + initprompt(&prompt, "Use which spell/ability:"); + prompt.maycancel = B_TRUE; + + lastschool = SS_LAST; + for (i = 0; i < nposs; i++) { + char append[BUFLEN]; + ot = findot(poss[i]); + assert(ot); + + // heading + f = hasflag(ot->flags, F_SPELLSCHOOL); + assert(f); + if (f->val[0] != lastschool) { + lastschool = f->val[0]; + addheading(&prompt, getschoolname(lastschool)); + } + + strcpy(buf2, ot->name); + capitalise(buf2); + + if (validspell[i]) { + strcpy(costbuf, ""); + } else { + strcpy(costbuf, "(NOT CASTABLE) "); + } + + if (mpcost[i] == -1) { + sprintf(append, "(at will)"); + } else { + sprintf(append, "(%d MP)", mpcost[i]); + } + strcat(costbuf, append); + sprintf(buf, "%-30s%s", buf2, costbuf); + // we don't want spell letters to change + // every time you get a new spell, so the + // choice letter always comes from spell letter + + /* + f = hasflag(ot->flags, F_SPELLLETTER); + assert(f); + */ + // letter doesn't matter + addchoice(&prompt, 'a', buf2, buf, ot); + } + + if (prompt.nchoices > 0) { + getchoicestr(&prompt); + + ot = prompt.result; + if (ot) { + spellid = ot->id; + } + } else { + msg("You don't have any spells or abilities!"); + return; + } + } + if (spellid == OT_NONE) { + clearmsg(); + msg("Cancelled."); + return; + } else { + cell_t *targcell = NULL; + lifeform_t *targlf = NULL; + // update lastcmd + f = hasflag(player->flags, F_LASTCMD); + if (f) { + f->val[2] = spellid; + } + + // try to cast it + ot = findot(spellid); + + // specified x/y coords from a repeated cmd? + if (cellx == NA) { + targcell = NULL; + targlf = NULL; + } else { + targcell = getcellat(player->cell->map, cellx, celly); + targlf = haslf(targcell); + } + + // should always work... + if (ot->obclass->id == OC_SPELL) { + castspell(player, spellid, targlf, NULL, targcell); + } else { + useability(player, spellid); + } + } +} + +void domsghist(void) { + int i; + int y; + cls(); + mvwprintw(mainwin, 0, 0, "MESSAGE HISTORY:"); + y = 1; + for (i = 0; i < nmsghist; i++) { + mvwprintw(mainwin, y, 0, msghist[i]); + y++; + } + wrefresh(mainwin); + getch(); + // restore screen + //cls(); + drawscreen(); + real_clearmsg(B_TRUE); +} + +void dooperate(obpile_t *op) { + object_t *o; + + // ask which object to read + o = askobject(op, "Operate what", NULL, AO_OPERABLE); + if (o) { + if (isoperable(o)) { + operate(player, o); + } else { + msg("You can't operate that!"); + } + } +} + int dopickup(obpile_t *op) { int obcount; - object_t *o = NULL; + //object_t *o = NULL; int howmany = ALL; - char buf[BUFLEN]; + int i; obcount = countobs(op); // anything here? @@ -647,79 +2603,360 @@ int dopickup(obpile_t *op) { return B_TRUE; } else if (obcount == 1) { // just get it - o = op->first; howmany = ALL; + retobs[0] = op->first; + retobscount[0] = op->first->amt; + nretobs = 1; } else { // prompt which one to pick up - o = askobject(op, "Pick up what", &howmany, AO_NONE); + askobjectmulti(op, "Pick up what", AO_NONE); } + if (nretobs <= 0) { + return B_TRUE; + } else if (lfhasflag(player, F_NOPACK)) { + msg("You lack the ability to carry things!"); + return B_TRUE; + } + + for (i = 0; i < nretobs; i++) { + pickup(player, retobs[i],retobscount[i]); + } + + /* if (o) { pickup(player, o, howmany); } else { return B_TRUE; } + */ return B_FALSE; } -void doinventory(obpile_t *op) { +void doenter(lifeform_t *lf) { + object_t *vm; + vm = hasob(lf->cell->obpile, OT_VENDINGMACHINE); + if (vm) { + dovendingmachine(lf, vm); + } else if (isplayer(lf)) { + // try to go down + dostairs(D_DOWN); + } +} + +void doexplain(void) { + char buf[BUFLEN]; + cell_t *where; + + sprintf(buf, "Select glyph to explain (ESC to cancel):"); + where = askcoords(buf, TT_NONE); + if (!where) { + clearmsg(); + return; + } + + // explain it + if (where->lf) { + showlfstats(where->lf, B_FALSE); + } else { + object_t *o; + // object description + o = gettopobject(where); + if (o) { + getobdesc(o, buf); + } + msg("%s", buf); + } + msg("Done."); +} + +void dofinaloblist(obpile_t *op) { object_t *o; - o = askobject(op, "Select object to describe", NULL, AO_NONE); + o = askobject(op, "Your final possessions were", NULL, AO_NONE); while (o) { // describe it describeob(o); // ask for another one - o = askobject(op, "Select object to describe", NULL, AO_NONE); + o = askobject(op, "Your final possessions were", NULL, AO_NONE); + } + real_clearmsg(B_TRUE); +} + +void dofire(void) { + if (shoot(player)) { + // why not? + switch (reason) { + case E_NOTEQUIPPED: + msg("You have no firearm equipped!"); + break; + case E_NOTARGET: + msg("You have no target selected!"); + break; + case E_NOAMMO: + msg("You are out of ammo!"); + break; + default: + msg("You cannot fire for some reason!"); + break; + } } } +void doinventory(obpile_t *op) { + object_t *o; + char buf[BUFLEN]; + float packweight,maxweight,pct; + packweight = getobpileweight(player->pack); + maxweight = getmaxcarryweight(player); + pct = (packweight / maxweight) * 100; + sprintf(buf, "Inventory (%0.0f/%0.0f kg, %0.0f%%)", packweight, maxweight, pct); + o = askobject(op, buf, NULL, AO_NONE); + while (o) { + // describe it + describeob(o); + // ask for another one + o = askobject(op, buf, NULL, AO_NONE); + } + real_clearmsg(B_TRUE); +} + + void doquaff(obpile_t *op) { object_t *o; - char buf[BUFLEN],buf2[BUFLEN]; // ask which object to quaff o = askobjectofclass(op, "Quaff what", NULL, AO_NONE, OC_POTION); if (o) { - if (isdrinkable(o)) { + if (canquaff(player, o)) { quaff(player, o); } else { - msg("You can't drink that!"); + switch (reason) { + case E_INSUBSTANTIAL: + msg("You need a physical body to do that!"); + break; + case E_WRONGOBTYPE: + default: + msg("You can't drink that!"); + break; + } } } } +void dolockpick(obpile_t *op) { + object_t *o; + char ch; + int dir; + + if (!hasobwithflag(player->pack, F_PICKLOCKS)) { + msg("You have nothing to use for lockpicking!"); + return; + } + + // ask direction + ch = askchar("Lockpick in which direction (- to cancel)", "yuhjklbn-","-", B_FALSE); + dir = chartodir(ch); + if (dir == D_NONE) { + clearmsg(); + return; + } else { + cell_t *c; + c = getcellindir(player->cell, dir); + if (c) { + object_t *targ; + // something to lockpick there? + targ = hasobwithflag(c->obpile, F_LOCKED); + if (targ) { + // ask which object to use + o = askobjectwithflag(op, "Lockpick using what", NULL, AO_NONE, F_PICKLOCKS); + if (o) { + if (hasflag(o->flags, F_PICKLOCKS)) { + } else { + msg("That can't be used to pick locks!"); + } + } + lockpick(player, targ, o); + } else { + // fail + msg("There is nothing locked there!"); + } + } else { + clearmsg(); + return; + } + } + +} + +void donextguntarget(void) { + object_t *gun; + char gunname[BUFLEN]; + int i,startpos; + int done; + lifeform_t *targ; + + gun = getfirearm(player); + if (!gun) { + msg("You have no firearm equipped!"); + return; + } + getobname(gun, gunname, 1); + + // get current target + targ = getguntarget(player); + + // find current target cell + startpos = 0; // default + for (i = 0; i < player->nlos; i++) { + cell_t *c; + c = player->los[i]; + if (c->lf && (c->lf == targ)) { + startpos = i; + break; + } + } + + i = startpos; + done = B_FALSE; + while (!done) { + cell_t *c; + c = player->los[i]; + if (c->lf && (c->lf != player) && (c->lf != targ)) { + if (haslof(player, c) && isingunrange(player, c)) { + // found one! + setguntarget(player, c->lf); + done = B_TRUE; + } + } + i++; + if (i >= player->nlos) { + i = 0; + } + if (i == startpos) { + // no new targets found - keep current one. + setguntarget(player, targ); + } + } +} + +void dopour(obpile_t *op) { + object_t *o; + + // ask which object to read + o = askobject(op, "Pour what", NULL, AO_POURABLE); + if (o) { + if (ispourable(o)) { + pour(player, o); + } else { + msg("That isn't pourable!"); + } + } +} + +void doquit(void) { + char ch; + ch = askchar("Really quit", "yn","n", B_TRUE); + if (ch == 'y') { + setlastdam(player, "quitting"); + player->alive = B_FALSE; + } +} + void doread(obpile_t *op) { object_t *o; - char buf[BUFLEN],buf2[BUFLEN]; + + if (isblind(player)) { + msg("You can't read while blind!"); + return; + } // ask which object to read o = askobjectofclass(op, "Read what", NULL, AO_NONE, OC_SCROLL); if (o) { if (isreadable(o)) { - read(player, o); + readsomething(player, o); } else { msg("You can't read that!"); } } } +void dorest(void) { + // can we rest? + if (canrest(player)) { + if (player->hp >= player->maxhp) { + // no need to rest + msg("Not resting - already at full health."); + return; + } + startresting(player); + // do the first one right away + rest(player, B_TRUE); + } else { + switch (reason) { + case E_MONSTERNEARBY: + msg("You cannot rest - there are monsters nearby!"); + break; + default: + msg("You cannot rest for some reason."); + break; + } + } +} + +void doselguntarget(void) { + object_t *gun; + cell_t *where; + char buf[BUFLEN]; + char gunname[BUFLEN]; + gun = getfirearm(player); + if (!gun) { + msg("You have no firearm equipped!"); + return; + } + getobname(gun, gunname, 1); + + sprintf(buf, "Aim %s where?",gunname); + where = askcoords(buf, TT_MONSTER); + if (where) { + if (where->lf && haslof(player, where)) { + setguntarget(player, where->lf); + } else { + setguntarget(player, NULL); + } + } +} + +void dostairs(int dir) { + object_t *o; + o = hasobwithflagval(player->cell->obpile, F_CLIMBABLE, dir, NA, NA, NULL); + if (o) { + usestairs(player, o); + } else { + msg("There are no stairs going %s here!", getdirname(dir)); + } +} + int dotakeoff(obpile_t *op) { object_t *o; - char buf[BUFLEN],buf2[BUFLEN]; flag_t *f; - int rv; + int rv = B_TRUE; // ask which object to read - o = askobjectofclass(op, "Take off what", NULL, AO_ONLYEQUIPPED, OC_ARMOUR); + o = askobject(op, "Take off what", NULL, AO_EQUIPPEDARMOUR ); if (o) { - f = hasflag(o->flags, F_EQUIPPED); - if (f) { - rv = takeoff(player, o); - + if (isarmour(o)) { + f = hasflag(o->flags, F_EQUIPPED); + if (f) { + rv = takeoff(player, o); + } else { + msg("You are not wearing that!"); + rv = B_TRUE; + } } else { - msg("You are not wearing that!"); - rv = B_TRUE; + //rv = unweild(player, o); + rv = takeoff(player, o); } } return rv; @@ -732,36 +2969,97 @@ void dothrow(obpile_t *op) { // ask which object to throw o = askobject(op, "Throw what", NULL, AO_NONE); if (o) { + int maxdist; cell_t *where; + flag_t *f; getobname(o, buf, 1); - // TODO: calculate throw range + f = hasflag(o->flags, F_EQUIPPED); + if (f && (f->val[0] != BP_WEAPON)) { + msg("You'll need to take it off first."); + return; + } + + // calculate throw range + maxdist = getmaxthrowrange(player, o); // ask where to throw it sprintf(buf2, "Throw %s where?",buf); - where = askcoords(buf2); + where = askcoords(buf2, TT_MONSTER); if (where) { - if (haslof(player, where)) { - throwat(player, o, where); + if (!haslof(player, where)) { + if (reason == E_NOLOS) { + msg("You can't see there!"); + } else { // ie. E_NOLOF + msg("You don't have a clear line of fire to there."); + } + } else if (getcelldist(player->cell, where) > maxdist) { + msg("You can't throw %s that far!",buf); } else { - msg("You don't have a clear line of fire to there."); + throwat(player, o, where); } } } } -// draw a cell which we can't see +/* +void drawscannedcell(cell_t *cell, int x, int y) { + if (cell->lf) { + char glyph; + // draw glyph based on size + switch(getlfsize(cell->lf)) { + case SZ_ENORMOUS: + glyph = '6'; + break; + case SZ_HUGE: + glyph = '5'; + break; + case SZ_LARGE: + glyph = '4'; + break; + case SZ_HUMAN: + glyph = '3'; + break; + case SZ_MEDIUM: + glyph = '2'; + break; + case SZ_SMALL: + glyph = '1'; + break; + case SZ_MINI: + case SZ_TINY: + default: + glyph = '0'; + break; + } + mvwprintw(gamewin, y, x, "%c", glyph); + } +} +*/ + +// draw a cell which we remember, but can't see void drawunviscell(cell_t *cell, int x, int y) { char glyph; + object_t *o; if (cell->type->glyph == '.') { glyph = ' '; } else { glyph = cell->type->glyph; } - mvwprintw(gamewin, y, x, "%c", glyph); + // show staircases... + o = hasobwithflag(cell->obpile, F_CLIMBABLE); + if (o) { + glyph = getglyph(o); + } + // show dungeon features + o = hasobofclass(cell->obpile, OC_DFEATURE); + if (o) { + glyph = getglyph(o); + } + mvwprintw(gamewin, y, x, "%c", glyph); } void drawcell(cell_t *cell, int x, int y) { @@ -771,29 +3069,22 @@ void drawcell(cell_t *cell, int x, int y) { void drawcellwithcontents(cell_t *cell, int x, int y) { if (cell->lf) { // lifeform here? + char ch; // draw the lf's race glyph - mvwprintw(gamewin, y, x, "%c", cell->lf->race->glyph); + if (isplayer(cell->lf) && !ispolymorphed(cell->lf)) { + ch = '@'; + } else { + ch = cell->lf->race->glyph; + } + mvwprintw(gamewin, y, x, "%c", ch); } else if (countobs(cell->obpile) > 0) { object_t *o; - int c; - int drawn = B_FALSE; + // draw highest object in sort order - c = 0; - while ((sortorder[c] != OC_NULL) && (!drawn)) { - // check each object against this ob class - // count backwards so more recently dropped objects - // appear first. - for (o = cell->obpile->last ; o ; o = o->prev) { - if (o->type->obclass->id == sortorder[c]) { - // draw it - mvwprintw(gamewin, y, x, "%c", getglyph(o)); - drawn = B_TRUE; - break; - } - } - c++; - } - if (!drawn) { + o = gettopobject(cell); + if (o) { + mvwprintw(gamewin, y, x, "%c", getglyph(o)); + } else { // should never happen. if it does, just show the // first object dblog("Warn: sorted object glyph drawing matching nothing!"); @@ -812,20 +3103,35 @@ void drawcursor(void) { void drawlevelfor(lifeform_t *lf) { int x,y; - int cx,cy; cell_t *cell; map_t *map; map = lf->cell->map; + numdraws++; + wclear(gamewin); for (y = viewy; y < viewy + viewh; y++) { for (x = viewx; x < viewx + vieww; x++) { cell = getcellat(map, x, y); if (cell) { + void *thing; + char desc[BUFLEN]; + char glyph; if (haslos(lf, cell)) { drawcellwithcontents(cell, x-viewx, y-viewy); - } else if (cell->known) { - drawunviscell(cell, x-viewx, y-viewy); + } else { + //drawscannedcell(cell, x-viewx, y-viewy); + switch (isinscanrange(cell, &thing, desc, &glyph)) { + case TT_MONSTER: + case TT_OBJECT: + mvwprintw(gamewin, y-viewy, x-viewx, "%c", glyph); + break; + default: + if (cell->known) { + drawunviscell(cell, x-viewx, y-viewy); + } + break; + } } } } @@ -833,6 +3139,8 @@ void drawlevelfor(lifeform_t *lf) { } void initgfx(void) { + int msgwinh = 2; + int statwinh = 2; mainwin = initscr(); if (!has_colors()) { printf("Terminal does not support colour.\n"); @@ -843,113 +3151,679 @@ void initgfx(void) { cbreak(); nodelay(mainwin, FALSE); + getmaxyx(mainwin, SCREENH, SCREENW); + // determine window sizes vieww = SCREENW; - viewh = SCREENH - 4; + //viewh = SCREENH - 4; + viewh = SCREENH - statwinh - msgwinh - 1; // create windows - msgwin = newwin(1, vieww, 0, 0); - gamewin = newwin(viewh, vieww, 1, 0); - statwin = newwin(2, vieww, 2 + viewh,0); + //msgwin = newwin(1, vieww, 0, 0); + msgwin = newwin(msgwinh, vieww, 0, 0); + gamewin = newwin(viewh, vieww, msgwinh, 0); + statwin = newwin(statwinh, vieww, msgwinh + viewh + statwinh - 1 ,0); + statdirty = B_TRUE; redraw(); refresh(); // init message buffer strcpy(msgbuf, ""); + strcpy(lastmsgbuf, "xxx"); +} + +int drop(object_t *o, int count) { + object_t *newob; + obpile_t *op; + char obname[BUFLEN]; + enum OBTYPE origid; + + op = o->pile; + assert(op->owner); + + getobname(o, obname, count); + + origid = o->type->id; + newob = moveob(o, op->owner->cell->obpile, count); + if (newob) { // if drop was successful... + //taketime(op->owner, (SPEED_DROP * count)); + taketime(op->owner, SPEED_DROP); + // if object wasn't changed... + if (newob->type->id == origid) { + if (op->owner) { + if (op->owner->controller == C_PLAYER) { + msg("You drop %s.",obname); + } + } + } + } else { + // tell the player why! + if (isplayer(op->owner)) { + switch (reason) { + case E_NOSPACE: + msg("There is no space here for any more objects!"); + break; + default: + msg("For some reason, you cannot drop %s!"); + break; + } + } + return B_TRUE; + } + return B_FALSE; +} + +char getchoice(prompt_t *prompt) { + int i; + int y; + char ch; + int sel; + int gotheadings; + int first= 0; + int nextpage = -1; + int lastline = SCREENH - 4; + + gotheadings = B_FALSE; + for (i = 0; i < prompt->nchoices; i++) { + if (prompt->choice[i].heading) { + gotheadings = B_TRUE; + break; + } + } + + // loop until result is valid + sel = -1; + while (sel == -1) { + // show choices + cls(); + y = 2; + nextpage = -1; + for (i = first; i < prompt->nchoices; i++) { + int atbottom; + + atbottom = B_FALSE; + if (y > lastline) { // if we're at the bottom of the screen + atbottom = B_TRUE; + } else if (prompt->choice[i].heading && (y+1 > lastline)) { + // on a heading, and next line is at the bottom + atbottom = B_TRUE; + } + if (atbottom) { + nextpage = i; + mvwprintw(mainwin, y, 0, "--More--"); + break; + } + + // heading? + if (prompt->choice[i].heading) { + mvwprintw(mainwin, y, 0, "%s", prompt->choice[i].desc); + } else { + mvwprintw(mainwin, y, 0, "%s%c - %s", gotheadings ? " " : "", prompt->choice[i].ch, prompt->choice[i].desc); + } + y++; + } + + // display prompt question + mvwprintw(mainwin, 0, 0, "%s %s", prompt->q1, + prompt->maycancel ? "[ESC to cancel] " : ""); + wrefresh(mainwin); + + // ask for choice... + ch = getch(); + if ((ch == 27) && (prompt->maycancel)) { // ESC - cancel + prompt->result = NULL; + sel = -1; + break; + } else if (ch == ' ') { + if (nextpage == -1) { + first = 0; + } else { + first = nextpage; + } + } else { + sel = -1; + for (i = 0 ; i < prompt->nchoices; i++) { + if (prompt->choice[i].ch == ch) { + sel = i; + break; + } + } + } + } + + if (ch != 27) { + // set result pointer + prompt->result = prompt->choice[i].data; + } + + if (gamestarted) { + drawscreen(); + } else { + cls(); + wrefresh(mainwin); + } + // return NUL or result char + if (ch == 27) { + return '\0'; + } + return prompt->choice[i].ch; +} + +char getchoicestr(prompt_t *prompt) { + int i; + int y; + char ch; + int sel; + int gotheadings; + int first= 0; + int nextpage = -1; + int lastline = SCREENH - 4; + char inpstring[BUFLEN]; + char curheading[BUFLEN]; + int doneheading; + int nvalid; + + + strcpy(inpstring, ""); + + // mark valid choices, and determine whether we have + // headings + gotheadings = B_FALSE; + for (i = 0; i < prompt->nchoices; i++) { + if (prompt->choice[i].heading) { + gotheadings = B_TRUE; + prompt->choice[i].valid = B_FALSE; + } else { + prompt->choice[i].valid = B_TRUE; + } + } + + strcpy(curheading, ""); + doneheading = B_FALSE; + + // loop until result is valid + sel = -1; + while (sel == -1) { + int atbottom; + // show choices which match our input string + cls(); + y = 2; + nextpage = -1; + nvalid = 0; + + atbottom = B_FALSE; + for (i = 0; i < prompt->nchoices; i++) { + if (!atbottom) { + if (y > lastline) { // if we're at the bottom of the screen + atbottom = B_TRUE; + } else if (prompt->choice[i].heading && (y+1 >= (SCREENH-2))) { + // on a heading, and next line is at the bottom + atbottom = B_TRUE; + } + if (atbottom) { + nextpage = i; + mvwprintw(mainwin, y, 0, "--' for next page--"); + } + } + + // heading? + if (prompt->choice[i].heading) { + strcpy(curheading, prompt->choice[i].desc); + doneheading = B_FALSE; + //mvwprintw(mainwin, y, 0, "%s", prompt->choice[i].text); + prompt->choice[i].valid = B_FALSE; + } else if (strlen(inpstring)) { + int matched = B_FALSE; + // does this choice match? use ->text, not ->desc + matched = strpixmatch(prompt->choice[i].text, inpstring); + + if (matched) { + // if we haven't printed the heading yet... + if (gotheadings && !doneheading) { + // only print if on the page + if ((i >= first) && !atbottom) { + // show heading first + mvwprintw(mainwin, y, 0, "%s", curheading); + y++; + } + doneheading = B_TRUE; + } + // only print if we're not off the bottom + if ((i >= first) && !atbottom) { + mvwprintw(mainwin, y, 0, "%s%s", gotheadings ? " " : "", prompt->choice[i].desc); + y++; + } + prompt->choice[i].valid = B_TRUE; + nvalid++; + } else { + prompt->choice[i].valid = B_FALSE; + } + } else { + // if we haven't printed the heading yet... + if (gotheadings && !doneheading) { + // only print if on the page + if ((i >= first) && !atbottom) { + // show heading first + mvwprintw(mainwin, y, 0, "%s", curheading); + y++; + } + doneheading = B_TRUE; + } + // only print if we're not off the bottom + if ((i >= first) && !atbottom) { + mvwprintw(mainwin, y, 0, "%s%s", gotheadings ? " " : "", prompt->choice[i].desc); + y++; + } + } + } + + // display prompt question + mvwprintw(mainwin, 0, 0, "%s %s %s", prompt->q1, + prompt->maycancel ? "[ESC=cancel, '=next page] " : "", inpstring); + wrefresh(mainwin); + + // ask for choice... + ch = getch(); + if ((ch == 27) && (prompt->maycancel)) { // ESC - cancel + sel = -1; + break; + } else if (ch == '\'') { + if (nextpage == -1) { + first = 0; + } else { + first = nextpage; + } + } else if ((ch == 8) || (ch == 127)) { // backspace + if (strlen(inpstring) > 0) { + inpstring[strlen(inpstring)-1] = '\0'; + } + } else if (ch == 10) { // enter + // exactly one valid choice? + if (nvalid == 1) { + for (i = 0; i < prompt->nchoices; i++) { + if (prompt->choice[i].valid) { + sel = i; + break; + } + } + } else if (nvalid == 0) { + // cancel + sel = -1; + break; + } + } else { + char temp[2]; + // append to input string + temp[0] = ch; + temp[1] = '\0'; + strcat(inpstring, temp); + /* + sel = -1; + for (i = 0 ; i < prompt->nchoices; i++) { + if (prompt->choice[i].ch == ch) { + sel = i; + break; + } + } + */ + } + } + + // set result pointer + if (sel == -1) { + prompt->result = NULL; + } else { + prompt->result = prompt->choice[i].data; + } + + if (gamestarted) { + drawscreen(); + } else { + cls(); + wrefresh(mainwin); + } + // return NUL or result char + if (ch == 27) { + return '\0'; + } + return prompt->choice[i].ch; } int getkey(void) { int key_code=0; + key_code = getch(); + // XXX NEW CODE: + if (strcmp(msgbuf, "")) { + clearmsg(); + //strcpy(msgbuf, ""); + //drawmsg(); + //drawcursor(); + } + return keycodetokey(key_code); } void handleinput(void) { int ch; - ch = getkey(); + //char buf[BUFLEN]; + flag_t *f; + int gotcmd = B_FALSE; + char numstring[BUFLEN]; + int count = 1; - switch (ch) { - // movement - case 'h': - case 'j': - case 'k': - case 'l': - case 'y': - case 'u': - case 'b': - case 'n': - trymove(player, chartodir(ch)); - break; - case 'H': - case 'J': - case 'K': - case 'L': - case 'Y': - case 'U': - case 'B': - case 'N': - tryrun(player, chartodir(ch)); - break; - case '.': // wait - dowait(player); - break; - // testing - case '1': - msg("Something happens."); - msg("Something else happens."); - msg("Another thing is about to happen now."); - msg("Too many things are happening!"); - break; - // player commands - case 'i': // inventory - doinventory(player->pack); - break; - case '\\': // list knowledge - doknowledgelist(); - break; - // object functions - case 'd': // drop - dodrop(player->pack); - break; - case 'W': // wear - dowear(player->pack); - break; - case 'w': // weild - doweild(player->pack); - break; - case 'T': // takeoff - dotakeoff(player->pack); - break; - case ',': // pickup - dopickup(player->cell->obpile); - break; - case 'r': // read - doread(player->pack); - break; - case 'q': // quaff - doquaff(player->pack); - break; - case 't': // throw - dothrow(player->pack); - break; - // GAME FUNCTIONS - case 'S': // save + quit - if (savegame()) { - msg("Save failed."); - drawmsg(); + // if running, automatically do move + f = hasflag(player->flags, F_RUNNING); + if (f) { + int dir; + dir = f->val[0]; + + // something here? + if (player->cell->obpile->first) { + stoprunning(player); + } else if (!canmove(player, dir, NULL)) { // can't move anymore? + stoprunning(player); + } else { + if (trymove(player, dir)) { + stoprunning(player); } else { - msg("Saved successfully. See you later..."); - more(); - drawmsg(); - exit(0); + // moved ok - dont wait for input + return; } - break; + } + } + + drawmsg(); + + strcpy(numstring, ""); + gotcmd = B_FALSE; + while (!gotcmd) { + char temp[2]; + flag_t repeatflag; + int wantrepeat = B_FALSE; + + repeatflag.text = NULL; + + drawcursor(); + + // repeated commands? + f = hasflag(player->flags, F_AUTOCMD); + if (f) { + ch = f->text[0]; + if (f->val[0] <= 0) { + killflag(f); + msg("Finished repeating '%c'.",ch); + } else { + count = 1; + f->val[0]--; + } + } else { + ch = getkey(); + } + gotcmd = B_TRUE; + + + switch (ch) { + // count + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + temp[0] = ch; + temp[1] = '\0'; + strcat(numstring, temp); + count = atoi(numstring); + if (count < 1) count = 1; + if (count > 1) { + mvwprintw(msgwin, 0, 0, "count = %d", count); + } else { + wclear(msgwin); + } + wrefresh(msgwin); + gotcmd = B_FALSE; + break; + case 127: + case 8: // ie. backspace + if (strlen(numstring) > 0) { + // remove last letter of number string + numstring[strlen(numstring)-1] = '\0'; + count = atoi(numstring); + if (count < 1) count = 1; + if (count > 1) { + mvwprintw(msgwin, 0, 0, "count = %d", count); + } else { + wclear(msgwin); + } + wrefresh(msgwin); + } + gotcmd = B_FALSE; + break; + case 'g': // repeat last command + f = hasflag(player->flags, F_LASTCMD); + if (f) { + ch = f->text[0]; + repeatflag.id = f->id; + repeatflag.val[0] = f->val[0]; + repeatflag.val[1] = f->val[1]; + repeatflag.val[2] = f->val[2]; + repeatflag.text = strdup(f->text); + wantrepeat = B_TRUE; + } else { + msg("Cannot repeat last command."); + } + break; + } + + // now handle actual commands + f = hasflag(player->flags, F_LASTCMD); + if (f) { + killflag(f); + } + temp[0] = ch; + temp[1] = '\0'; + + addflag(player->flags, F_LASTCMD, NA, NA, NA, temp); + switch (ch) { + // movement + case 'h': + case 'j': + case 'k': + case 'l': + case 'y': + case 'u': + case 'b': + case 'n': + trymove(player, chartodir(ch)); + break; + case 'H': + case 'J': + case 'K': + case 'L': + case 'Y': + case 'U': + case 'B': + case 'N': + tryrun(player, chartodir(ch)); + break; + case '.': // wait + if (count > 1) { + addflag(player->flags, F_AUTOCMD, count, NA, NA, "."); + } else { + rest(player, B_TRUE); + } + break; + // testing + /* + case '1': + gettimetext(buf); + msg("The current time is %s",buf); + break; + case '2': + msg("Something happens."); + msg("Something else happens."); + msg("Another thing is about to happen now."); + msg("Too many things are happening!"); + break; + */ + // player commands + case 'A': // attack + if (wantrepeat) { + doattackcell(repeatflag.val[2]); + } else { + doattackcell('\0'); + } + break; + case 'i': // inventory + doinventory(player->pack); + break; + case '@': // display player stats + showlfstats(player, B_FALSE); + break; + case ']': // display armour + showlfarmour(player); + break; + case ':': // look at what's here + dolook(player->cell); + break; + case '|': // msg history - TODO: replace with ctrl-p + domsghist(); + break; + case '/': // explain object + doexplain(); + break; + case '\\': // list knowledge + doknowledgelist(); + break; + case 'R': // rest + dorest(); + break; + case 'm': // 'm'agic/abilities (magic) + if (wantrepeat) { + domagic(repeatflag.val[2], repeatflag.val[0], repeatflag.val[1]); + } else { + domagic(OT_NONE, NA, NA); + } + break; + case '<': // go up + dostairs(D_UP); + break; + case '>': // go down + doenter(player); + break; + // firearm functions + case 'f': // fire gun + dofire(); + break; + case 'a': // aim + doselguntarget(); + break; + case 'F': // aim then fire + doselguntarget(); + dofire(); + break; + case '\'': + donextguntarget(); + break; + // object functions + case 'c': // eat + doclose(); + break; + case 'e': // eat + doeat(player->pack); + break; + case 'd': // drop + dodrop(player->pack, B_SINGLE); + break; + case 'D': // drop multiple things + dodrop(player->pack, B_MULTIPLE); + break; + case 'W': // wear + dowear(player->pack); + break; + case 'w': // weild + doweild(player->pack); + break; + case 'T': // takeoff + dotakeoff(player->pack); + break; + case ',': // pickup + dopickup(player->cell->obpile); + break; + case 'r': // read + doread(player->pack); + break; + case 'q': // quaff + doquaff(player->pack); + break; + case 't': // throw + dothrow(player->pack); + break; + case 'p': // pick lock + dolockpick(player->pack); + break; + case 'P': // Pour + dopour(player->pack); + break; + case 'o': // operate + dooperate(player->pack); + break; + // GAME FUNCTIONS + case 'Q': // quit + doquit(); + break; + case 'S': // save + quit + if (savegame()) { + msg("Save failed."); + } else { + msg("Saved successfully. See you later..."); + more(); + exit(0); + } + break; + default: + gotcmd = B_FALSE; + break; + } + if (repeatflag.text) { + free(repeatflag.text); + } } } +void initprompt(prompt_t *p, char *q1) { + int i; + if (p->q1) { + free(p->q1); + p->q1 = NULL; + } + p->q1 = strdup(q1); + p->maycancel = B_FALSE; + p->result = NULL; + p->nchoices = 0; + + for (i = 0; i < MAXCHOICES; i++) { + choice_t *c; + c = &p->choice[i]; + if (c->text) { + free(c->text); + c->text = NULL; + } + if (c->desc) { + free(c->desc); + c->desc = NULL; + } + c->data = NULL; + } +} int keycodetokey(int keycode) { int keystroke = 0; @@ -972,91 +3846,9 @@ int keycodetokey(int keycode) { } -int pickup(lifeform_t *lf, object_t *what, int howmany) { - char buf[BUFLEN]; - char obname[BUFLEN]; - object_t *o; - flag_t *f; - - if (!what) { - return B_TRUE; - } - getobname(what, obname, howmany); - - if (howmany == ALL) howmany = o->amt; - - if (!canpickup(lf, what)){ - // tell the player why! - if (lf->controller == C_PLAYER) { - switch (reason) { - case E_NOSPACE: - msg("Your pack is too full to fit any more objects."); - break; - default: - msg("For some reason, you cannot pick up %s!",obname); - break; - } - } - return B_TRUE; - } - - - // some checks first... - f = hasflag(what->flags, F_SHARP); - if (f) { - object_t *gloves; - gloves = getequippedob(lf->pack, BP_HANDS); - if (!gloves) { - char *newname; - getobname(what, buf, 1); - newname = strdup(buf); - strrep(newname, "a ", "the "); - - if (lf->controller == C_PLAYER) { - msg("Ow! You cut your finger on %s.", newname); - } - taketime(lf, SPEED_PICKUP); - - sprintf(buf, "stepping on %s", obname); - losehp(lf, rnd(1,2), DT_SLASH, NULL, buf); - - return B_TRUE; - free(newname); - } - } - - // try to move whatever was selected - o = moveob(what, lf->pack, howmany); - if (o) { // if pickup was successful... - if (lf->controller == C_PLAYER) { - msg("You pick up %c - %s.",o->letter, obname); - } - /* - taketime(lf, (SPEED_PICKUP * howmany)); - */ - taketime(lf, SPEED_PICKUP); - } else { - // tell the player why! - if (lf->controller == C_PLAYER) { - switch (reason) { - case E_NOSPACE: - msg("Your pack is too full to fit any more objects."); - break; - default: - msg("For some reason, you cannot pick up %s!",obname); - break; - } - } - return B_TRUE; - } - return B_FALSE; -} - - void dblog(char *format, ... ) { char buf[HUGEBUFLEN]; va_list args; - char *p; va_start(args, format); vsprintf( buf, format, args ); @@ -1077,34 +3869,78 @@ void dblog(char *format, ... ) { // force a '--more--' prompt void more(void) { - msg("^"); + //msg("^"); + strcat(msgbuf, MORESTRING); + //mvwprintw(msgwin, 0, 0, msgbuf); drawmsg(); + // wait for space + while (getch() != ' '); + // clear msg + clearmsg(); +} + + +void warn(char *format, ... ) { + char buf[BUFLEN]; + va_list args; + + // like msg, but interrupts rest ect + interrupt(player); + + + va_start(args, format); + vsprintf( buf, format, args ); + va_end(args); + msg_real("%s", buf); +} + +void msglower(char *format, ... ) { + char buf[BUFLEN]; + va_list args; + + va_start(args, format); + vsprintf( buf, format, args ); + va_end(args); + // like msg, but don't capitalise + msg_real("%s", buf); } void msg(char *format, ... ) { char buf[BUFLEN]; va_list args; - char *p; + + + va_start(args, format); + vsprintf( buf, format, args ); + va_end(args); + + capitalise(buf); + msg_real("%s", buf); +} + +void msg_real(char *format, ... ) { + char buf[BUFLEN]; + va_list args; + //char *p; int db = B_FALSE; + // any msg will interrupt the player + //interrupt(player); + + //msgmod = B_TRUE; + va_start(args, format); vsprintf( buf, format, args ); va_end(args); if (db) dblog("adding to msgbuf: [%s]",buf); - // Move to just after the last '^' in the message buffer... - p = strrchr(msgbuf, '^'); - if (p) { - p++; - } else { - p = msgbuf; - } - // ie. can the message buffer fit: // what is already there + 2 spaces + the new text + '--more--' ? - if (strlen(p) + 2 + strlen(buf) + strlen(MORESTRING) >= SCREENW) { - strcat(msgbuf, "^"); + //if (strlen(msgbuf) + 2 + strlen(buf) + strlen(MORESTRING) >= SCREENW) { + if (strlen(msgbuf) + 2 + strlen(buf) >= SCREENW) { + // do more + more(); } else { if (strlen(msgbuf) > 0) { strcat(msgbuf, " "); @@ -1112,28 +3948,154 @@ void msg(char *format, ... ) { } strcat(msgbuf, buf); + if (db) dblog(" msgbuf is now: [%s]",msgbuf); + + msgmod = B_TRUE; + + // update msg window + drawmsg(); + drawcursor(); + +} + + +void nothinghappens(void) { + msg("Nothing seems to happen."); } void drawstatus(void) { char buf[BUFLEN]; + char buf2[BUFLEN]; + char waitbuf[BUFLEN]; + char pname[BUFLEN]; + flag_t *f; + int str,dex,iq; + + getplayernamefull(pname); + wclear(statwin); - sprintf(buf, "[%-12s] HP: %d/%d","Player", player->hp,player->maxhp); + sprintf(buf, "[%-26s] L:%d XP:%ld/%ld", pname, + player->level, + (player->level == 0) ? -1 : player->xp, + (player->level == 0) ? -1 : getxpforlev(player->level + 1)); + + // show player speed + getspeedname(getmovespeed(player), buf2); + if (strcmp(buf2, "normal")) { + strcat(buf, " "); + capitalise(buf2); + strcat(buf, buf2); + } + + // paralysed somehow? + if (isimmobile(player)) { + strcat(buf, " Immobile"); + } + + // burdened somehow? + switch (isburdened(player)) { + case BR_BURDENED: + strcat(buf, " Burdened"); + break; + case BR_OVERLOADED: + strcat(buf, " Overloaded"); + break; + default: + break; + } + mvwprintw(statwin, 0, 0, buf); + + + f = hasflag(player->flags, F_HUNGER); + if (f) { + int hlev; + hlev = gethungerlevel(f->val[0]); + if (hlev == H_NONE) { + strcpy(buf2, ""); + } else { + gethungername(gethungerlevel(f->val[0]), buf2); + capitalise(buf2); + } + } else { + strcpy(buf2, ""); + } + + if (strlen(buf2) > 0) { + wprintw(statwin, " %s", buf2); + } + + // construct waiting string + strcpy(waitbuf, ""); + // timespent > 0? + if (player->timespent) { + sprintf(buf, "busy: %d", player->timespent); + strcat(waitbuf, buf); + } + + + f = hasflag(player->flags, F_AUTOCMD); + if (f) { + if (strlen(waitbuf)) strcat(waitbuf, ", "); + sprintf(buf, "'%c' x %d", f->text[0], f->val[0]); + strcat(waitbuf, buf); + } + + if (strlen(waitbuf)) { + wprintw(statwin, " (%s)",waitbuf); + } + + // SECOND LINE + + str = getattr(player, A_STR); + dex = getattr(player, A_DEX); + iq = getattr(player, A_IQ); //redraw(); + sprintf(buf, "HP:%d/%d MP:%d/%d %12sST:%2d%c DX:%2d%c IQ:%2d%c DLev:%2d", + player->hp,player->maxhp, + player->mp, player->maxmp, + " ", + str, (str == player->baseatt[A_STR]) ? ' ' : '*', + dex, (dex == player->baseatt[A_DEX]) ? ' ' : '*', + iq, (iq == player->baseatt[A_IQ]) ? ' ' : '*', + player->cell->map->depth + ); + mvwprintw(statwin, 1, 0, buf); } - void drawmsg(void) { - char *tok,*nexttok; + //char *nexttok; int db = B_FALSE; - // no messages to display? - if (!strcmp(msgbuf, "")) { + if (db) dblog("drawmsg called"); + + /* + if ( !strcmp(msgbuf, "") ) { return; } + if (!isplayerturn() && !msgmod) { + return; + } + */ + + //dblog("calling drawmsg"); + + + // is msgbuf has changed... + if (strcmp(msgbuf, lastmsgbuf) || msgmod) { + wclear(msgwin); + wmove(msgwin, 0, 0); + wprintw(msgwin, "%s", msgbuf); + //mvwprintw(msgwin, 0, 0, msgbuf); + wrefresh(msgwin); + strcpy(lastmsgbuf, msgbuf); + } + +// drawcursor(); +/* // TODO: if it's a monster's turn, always do a more? nexttok = strstr(msgbuf, "^"); if (!nexttok) { @@ -1158,7 +4120,6 @@ void drawmsg(void) { nexttok = strstr(msgbuf, "^"); if (nexttok) { - char *p; nexttok++; // go forward past the ^ if (db) dblog("drawmsg: nexttok is [%s]",nexttok); // print with '--more--' added to the end @@ -1169,6 +4130,9 @@ void drawmsg(void) { // ...wait for spacebar before showing next bit... while (getch() != ' '); + + // we now know the player has read this + if (db) dblog("prompting for --more--"); // now clear msgstring up to end of where @@ -1191,91 +4155,775 @@ void drawmsg(void) { strcpy(msgbuf, ""); if (db) dblog("clearing msg buf"); } + */ + //msgmod = B_FALSE; } void redraw(void) { + dblog("redraw"); //wrefresh(msgwin); wrefresh(statwin); wrefresh(gamewin); } -int savegame(void) { - map_t *m; - FILE *f; +void showlfarmour(lifeform_t *lf) { + enum BODYPART bp; + object_t *o; + int y; char buf[BUFLEN]; - int rv; - for (m = firstmap; m ; m = m->next) { - // save world - rv = savemap(m); - if (rv) { - msg("Could not save map '%s'",m->name); - return B_TRUE; - } - // save player + their objects - sprintf(buf, "%s/game.sav",SAVEDIR); - f = fopen(buf, "wt"); - if (!f) { - msg("Could not open save file!"); - return B_TRUE; - } - savelf(f, player); - saveknowledge(f); - fclose(f); + + cls(); + if (isplayer(lf)) { + centre(mainwin, 0, "CHARACTER EQUIPMENT"); + } else{ + centre(mainwin, 0, "MONSTER EQUIPMENT"); } - - return B_FALSE; + y = 2; + + for (bp = BP_WEAPON; bp < MAXBODYPARTS; bp++) { + sprintf(buf, "%15s:%3s",getbodypartname(bp), " "); + o = hasobwithflagval(lf->pack, F_EQUIPPED, bp, NA, NA, NULL); + if (o) { + char obname[BUFLEN]; + getobname(o, obname, o->amt); + strcat(buf, obname); + } else { + strcat(buf, "-"); + } + mvwprintw(mainwin, y, 0, "%s", buf); + y++; + } + y = getmaxy(mainwin); + centre(mainwin, y-1, "[Press any key]"); + + +/* + + + f = hasflag(mylist[i]->flags,F_EQUIPPED); + if (f) { + if (f->val[0] == BP_WEAPON) { + if (hasflag(mylist[i]->flags, F_TWOHANDED)) { + strcat(buf2, " (two-handed weapon)"); + } else { + strcat(buf2, " (weapon)"); + } + } else { + strcat(buf2, " ("); + strcat(buf2, getbodypartequipname(f->val[0])); + strcat(buf2, " "); + strcat(buf2, getbodypartname(f->val[0])); + strcat(buf2, ")"); + } + } +*/ + getch(); + + drawscreen(); + real_clearmsg(B_TRUE); } -int takeoff(lifeform_t *lf, object_t *o) { +void showlfstats(lifeform_t *lf, int showall) { + int y = 0, y2 = 0, x2 = 40; + int x; + int arating, evasion; + int speed,acc; + int h; + char buf[BUFLEN],buf2[BUFLEN]; + job_t *j; flag_t *f; - char obname[BUFLEN]; - char buf[BUFLEN]; + char *ftext= "%12s: "; + long xpneeded; + object_t *w; + objecttype_t *ot; + int first; + int i; + int unarmed = B_FALSE; + float dammod; + int accmod; + enum BODYPART bp; + enum BODYPART missingbp[MAXBODYPARTS]; + int nmissingbp; - getobname(o, obname, 1); - if (!cantakeoff(lf, o)) { - switch (reason) { - case E_NOTEQUIPPED: - if (lf->controller == C_PLAYER) { - msg("You are not wearing that!"); - } - break; - default: - if (lf->controller == C_PLAYER) { - msg("For some reason, you cannot take that off!"); - } - break; - } - return B_TRUE; + cls(); + if (isplayer(lf)) { + centre(mainwin, 0, "CHARACTER DETAILS"); + } else{ + centre(mainwin, 0, "MONSTER DETAILS"); + } + y = 2; + y2 = 2; + + // overrise showall sometimes... + if (isplayer(lf) || isgenius(player)) { + showall = B_TRUE; } - // remove the equipped flag - f = hasflag(o->flags, F_EQUIPPED); - killflag(f); + dammod = getstrdammod(lf); + accmod = getstatmod(lf, A_DEX); - taketime(lf, getmovespeed(lf)); - if (gamestarted) { - if (lf->controller == C_PLAYER) { - msg("You take off %s.", obname); - } else if (haslos(player, lf->cell)) { - getlfname(lf, buf); + if (isplayer(lf)) { + getplayername(buf); + } else { + getlfnamea(lf, buf); + } + mvwprintw(mainwin, y, 0, ftext, "Name"); + wprintw(mainwin, "%-20s", buf); y++; + + if (isplayer(lf)) { + mvwprintw(mainwin, y, 0, ftext, "Race"); + wprintw(mainwin, "%-20s", lf->race->name); y++; + } + + j = getjob(lf); + if (j) { + mvwprintw(mainwin, y, 0, ftext, "Job"); + wprintw(mainwin, "%-20s", j->name); y++; + } + + if (showall) { + float w; + w = getlfweight(lf, B_NOOBS); + mvwprintw(mainwin, y, 0, ftext, "Weight"); + getweighttext(w, buf); + wprintw(mainwin, buf, w); y++; + } + + + if (showall) { + mvwprintw(mainwin, y, 0, ftext, "Exp Level"); + if (isplayer(lf)) { + xpneeded = getxpforlev(lf->level + 1) - lf->xp; + wprintw(mainwin, "%d (%ld XP, %ld for next)", lf->level, lf->xp, xpneeded); y++; + } else { + wprintw(mainwin, "%d", lf->level); y++; + } + } + + if (showall) { + mvwprintw(mainwin, y, 0, ftext, "Hit Points"); + wprintw(mainwin, "%d / %d", lf->hp , lf->maxhp); y++; + } else { + char hpinfo[BUFLEN]; + sprintf(hpinfo, "%s",getseenlfconditionname(lf, player)); + if (strlen(hpinfo) > 0) { + mvwprintw(mainwin, y, 0, ftext, "Hit Points"); + wprintw(mainwin, "%s", hpinfo); y++; + } + } + + if (showall) { + char buf2[BUFLEN]; + int str; + str = getattr(lf, A_STR); + getstrname(str, buf2); + if (dammod == 1) { + sprintf(buf, "%d (%s)",str, buf2); + } else if (dammod > 1) { + sprintf(buf, "%d (%s, +%d%% dmg)",str, buf2, (int)((dammod * 100) - 100) ); + } else { // ie. dammod < 1 + sprintf(buf, "%d (%s, -%d%% dmg)",str, buf2, (int)(100 - (dammod * 100)) ); + } + if (str != lf->baseatt[A_STR]) strcat(buf, "*"); + mvwprintw(mainwin, y, 0, ftext, "STR"); + wprintw(mainwin, "%s", buf); y++; + } else if (!isplayer(lf)) { + int str; + // just show name + str = getattr(lf, A_STR); + getstrname(str, buf); + if (str != lf->baseatt[A_STR]) strcat(buf, "*"); + mvwprintw(mainwin, y, 0, ftext, "STR"); + wprintw(mainwin, "%s", buf); y++; + } + + if (showall) { + char buf2[BUFLEN]; + int dex; + dex = getattr(lf, A_DEX); + getdexname(dex, buf2); + + if (accmod == 0) { + sprintf(buf, "%d (%s)",dex, buf2); + } else if (accmod > 0) { + sprintf(buf, "%d (%s, +%d%% bonus)",dex, buf2, accmod ); + } else { // ie. accmod < 0 + sprintf(buf, "%d (%s, %d%% bonus)",dex, buf2, accmod ); + } + + if (dex != lf->baseatt[A_DEX]) strcat(buf, "*"); + mvwprintw(mainwin, y, 0, ftext, "DEX"); + wprintw(mainwin, "%s", buf); y++; + } else if (!isplayer(lf)) { + int dex; + // just show name + dex = getattr(lf, A_DEX); + getstrname(dex, buf); + if (dex != lf->baseatt[A_DEX]) strcat(buf, "*"); + mvwprintw(mainwin, y, 0, ftext, "DEX"); + wprintw(mainwin, "%s", buf); y++; + } + + if (showall) { + char buf2[BUFLEN]; + int iq; + iq = getattr(lf, A_IQ); + getiqname(iq, buf2); + sprintf(buf, "%d (%s)",iq, buf2); + if (iq != lf->baseatt[A_IQ]) strcat(buf, "*"); + mvwprintw(mainwin, y, 0, ftext, "IQ"); + wprintw(mainwin, "%s", buf); y++; + } else if (!isplayer(lf)) { + int iq; + // just show name + iq = getattr(lf, A_IQ); + getstrname(iq, buf); + if (iq != lf->baseatt[A_IQ]) strcat(buf, "*"); + mvwprintw(mainwin, y, 0, ftext, "IQ"); + wprintw(mainwin, "%s", buf); y++; + } + + //mvwprintw(mainwin, y, 0, ftext, "XP"); + //wprintw(mainwin, "%ld (%ld more for next level)", lf->xp, xpneeded); y++; + + y++; // skip line + + + speed = getmovespeed(lf); + getspeedname(speed, buf); + capitalise(buf); + mvwprintw(mainwin, y, 0, ftext, "Move Speed"); + wprintw(mainwin, "%-20s", buf); y++; + + + y++; // skip line + + if (showall) { + f = hasflag(lf->flags, F_HUNGER); + if (f) { + gethungername(gethungerlevel(f->val[0]), buf); capitalise(buf); - msg("%s takes off %s.", buf, obname); + mvwprintw(mainwin, y, 0, ftext, "Hunger"); + + wprintw(mainwin, "%-14s", buf); y++; + /* + if (showall) { + wprintw(mainwin, "%-14s (%d)", buf, f->val[0]); y++; + } else { + wprintw(mainwin, "%-14s", buf); y++; + } + */ + } + } + y++; // skip line + + + + // now go to second column + // WEAPON STUFF + + w = getweapon(lf); + if (w) { + sprintf(buf, "%s", w->type->name); + } else { + obpile_t *op = NULL; + op = getunarmedweapon(lf, NULL); + if (op->first) { + w = op->first; + sprintf(buf, "%s (unarmed)", w->type->name); + unarmed = B_TRUE; + } else { + sprintf(buf, "N/A"); + } + killobpile(op); + } + mvwprintw(mainwin, y2, x2, ftext, "Weapon"); + wprintw(mainwin, "%-20s", buf); y2++; + + + if (showall) { + if (w) { + // chance to hit + acc = getlfaccuracy(lf); + mvwprintw(mainwin, y2, x2, ftext, "Accuracy"); + wprintw(mainwin, "%d%%", acc); y2++; } } - return B_FALSE; + // attack speed + if (w) { + speed = getattackspeed(lf); + getspeedname(speed, buf); + capitalise(buf); + mvwprintw(mainwin, y2, x2, ftext, "Attack Speed"); + wprintw(mainwin, "%-20s", buf); y2++; + } + + + // damage + if (w) { + int bonus; + f = hasflag(w->flags, F_BONUS); + if (f && f->known) { + // only tell player about bonuses if they are known.! + bonus = f->val[0]; + } else { + bonus = 0; + } + + f = hasflag(w->flags, F_DAM); + if (f) { + int mindam,maxdam; + + getdamrange(w->flags, &mindam, &maxdam); + mindam += bonus; + maxdam += bonus; + + mindam = (int)((float)mindam * dammod); + maxdam = (int)((float)maxdam * dammod); + + if (mindam < 0) mindam = 0; + if (maxdam < 0) maxdam = 0; + + sprintf(buf, "%d-%d",(int)mindam,(int)maxdam); + } else { + sprintf(buf, "0"); + } + } else { + // no damage + sprintf(buf, "N/A"); + } + mvwprintw(mainwin, y2, x2, ftext, "Attack Dmg"); + wprintw(mainwin, "%-20s", buf); y2++; + + + + y2++; // skip line + + // ARMOUR STUFF + if (showall) { + arating = getarmourrating(lf); + mvwprintw(mainwin, y2, x2, ftext, "Armour"); + if (arating > 0) { + wprintw(mainwin, "%d (-%0.0f%% dmg)", arating, getdamreducepct(arating)); y2++; + } else { + wprintw(mainwin, "%d", arating); y2++; + } + evasion = getevasion(lf); + mvwprintw(mainwin, y2, x2, ftext, "Evasion"); + wprintw(mainwin, "%d%%", evasion); y2++; + + y2++; // skip line + } + + + // back to first column + + // non-intrinsic effecst like polymorph, eye shading + f = lfhasknownflag(lf, F_POLYMORPHED); + if (f && (f->known)) { + sprintf(buf, "%s have been polymorphed into a %s.",you(lf), lf->race->name); + //if (lfhasflag(lf, F_OMNIPOTENT) || lfhasflag(lf, F_EXTRAINFO)) { + sprintf(buf2, " [%d left]", f->lifetime); + strcat(buf, buf2); + // } + mvwprintw(mainwin, y, 0, "%s", buf); + y++; + } + + // missing body parts? + if (lfhasflagval(lf, F_NOBODYPART, BP_WEAPON, NA, NA, NULL)) { + mvwprintw(mainwin, y, 0, "%s cannot use weapons.", you(lf)); + y++; + } + + nmissingbp = 0; + for (bp = BP_RIGHTHAND; bp < MAXBODYPARTS; bp++) { + if (lfhasflagval(lf, F_NOBODYPART, bp, NA, NA, NULL)) { + if (bp == BP_RIGHTHAND) { + if (!lfhasflagval(lf, F_NOBODYPART, BP_HANDS, NA, NA, NULL)) { + missingbp[nmissingbp] = bp; + nmissingbp++; + } + } else if (bp == BP_LEFTHAND) { + if (!lfhasflagval(lf, F_NOBODYPART, BP_HANDS, NA, NA, NULL)) { + missingbp[nmissingbp] = bp; + nmissingbp++; + } + } else { + missingbp[nmissingbp] = bp; + nmissingbp++; + } + } + } + + if (nmissingbp) { + sprintf(buf, "%s have no %s",you(lf),getbodypartname(missingbp[0])); + if (nmissingbp > 1) { + // construct list of missing body parts + for (i = 1; i < nmissingbp ; i++) { + if (i == nmissingbp - 1) { // last + strcat(buf, " or "); + strcat(buf, getbodypartname(missingbp[i])); + } else { + strcat(buf, ", "); + strcat(buf, getbodypartname(missingbp[i])); + } + } + } + strcat(buf, "."); + mvwprintw(mainwin, y, 0, "%s", buf); + y++; + } + + if (eyesshaded(lf)) { + mvwprintw(mainwin, y, 0, "%s eyes are shaded.", your(lf), buf); + y++; + } + + // fleeing? + if (showall) { + for (f = lf->flags->first ; f ; f = f->next) { + if (f->id == F_FLEEFROM) { + lifeform_t *lf2; + lf2 = findlf(NULL, f->val[0]); + if (lf2) { + getlfname(lf2, buf); + mvwprintw(mainwin, y, 0, "%s %s fleeing from %s.", + you(lf), isplayer(lf) ? "are" : "is", buf); + y++; + } + } + } + } + + // diff materials? + if (lf->race->material->id != MT_FLESH) { + mvwprintw(mainwin, y, 0, "%s %s made out of %s.",you(lf), isplayer(lf) ? "are" : "is", lf->race->material->name); + } + + if (showall) { + // resistances + first = B_TRUE; + strcpy(buf, ""); + for (i = 0; i < MAXDAMTYPE; i++) { + f = lfhasknownflagval(lf, F_DTRESIST, i, NA, NA, NULL); + if (f && (showall || f->known)) { + if (first) { + sprintf(buf2, "%s %s resistant to: %s", you(lf), isplayer(lf) ? "are" : "is",getdamnamenoun(i)); + first = B_FALSE; + } else { + sprintf(buf2, ", %s", getdamnamenoun(i)); + } + + + if (lfhasknownflag(lf, F_EXTRAINFO) || lfhasflag(lf, F_OMNIPOTENT)) { + if (f->lifetime != PERMENANT) { + char buf3[BUFLEN]; + sprintf(buf3, "[%dt]",f->lifetime); + strcat(buf2, buf3); + } + } + strcat(buf, buf2); + } + } + if (strlen(buf) > 0) { + strcat(buf, "."); + mvwprintw(mainwin, y, 0, buf); + y++; + } + + // immunities + first = B_TRUE; + strcpy(buf, ""); + for (i = 0; i < MAXDAMTYPE; i++) { + f = lfhasknownflagval(lf, F_DTIMMUNE, i, NA, NA, NULL); + if (f && (showall || f->known)) { + if (first) { + sprintf(buf2, "%s %s immune to: %s", you(lf), isplayer(lf) ? "are" : "is", getdamname(i)); + first = B_FALSE; + } else { + sprintf(buf2, ", %s", getdamname(i)); + } + strcat(buf, buf2); + } + } + if (strlen(buf) > 0) { + strcat(buf, "."); + mvwprintw(mainwin, y, 0, buf); + y++; + } + + + // vulnerabilities + first = B_TRUE; + strcpy(buf, ""); + for (i = 0; i < MAXDAMTYPE; i++) { + f = lfhasknownflagval(lf, F_DTVULN, i, NA, NA, NULL); + if (f && (showall || f->known)) { + if (first) { + sprintf(buf2, "%s %s vulnerable to: %s", you(lf), isplayer(lf) ? "are" : "is", getdamnamenoun(i)); + first = B_FALSE; + } else { + sprintf(buf2, ", %s", getdamnamenoun(i)); + } + + + if (lfhasknownflag(lf, F_EXTRAINFO) || lfhasflag(lf, F_OMNIPOTENT)) { + if (f->lifetime != PERMENANT) { + char buf3[BUFLEN]; + sprintf(buf3, "[%dt]",f->lifetime); + strcat(buf2, buf3); + } + } + strcat(buf, buf2); + } + } + if (strlen(buf) > 0) { + strcat(buf, "."); + mvwprintw(mainwin, y, 0, buf); + y++; + } + } + + // wait for key + + h = getmaxy(mainwin); + centre(mainwin, h-1, "[Press any key]"); + getch(); + if (showall) { + // now show intrinsics on next page + cls(); + centre(mainwin, 0, "ABILITIES / EFFECTS"); + y = 2; + + + // TODO : change this to be like monster - show all CANWILL & CANCAST abilities + // show abilities (but not spells - they are displayed using a different + // command) + for (ot = objecttype ; ot ; ot = ot->next) { + if (ot->obclass->id == OC_ABILITY) { + f = lfhasknownflagval(lf, F_CANWILL, ot->id, NA, NA, NULL); + if (f && (f->known)) { + mvwprintw(mainwin, y, 0, ot->desc); + y++; + } + } + } + + wmove(mainwin, y, 0); + + if (!isplayer(lf)) { + int first = B_TRUE; + int anyfound = B_FALSE; + // show spells monster can cast using mp + for (ot = objecttype ; ot ; ot = ot->next) { + if (ot->obclass->id == OC_SPELL) { + f = lfhasknownflagval(lf, F_CANCAST, ot->id, NA, NA, NULL); + if (f && (f->known)) { + if (first) { + wprintw(mainwin, "%s can use mana to cast the following spells:\n",you(lf)); + first = B_FALSE; + } + sprintf(buf, " %s (%s)\n",ot->name, ot->desc); + wprintw(mainwin, "%s\n", buf); + anyfound = B_TRUE; + } + } + } + if (anyfound) wprintw(mainwin, "\n"); + // show spells at will... + first = B_TRUE; + anyfound = B_FALSE; + for (ot = objecttype ; ot ; ot = ot->next) { + if (ot->obclass->id == OC_SPELL) { + f = lfhasknownflagval(lf, F_CANWILL, ot->id, NA, NA, NULL); + if (f && (f->known)) { + if (first) { + wprintw(mainwin, "%s can perform the following at will:\n",you(lf)); + first = B_FALSE; + } + sprintf(buf, " %s (%s)\n",ot->name, ot->desc); + wprintw(mainwin, "%s", buf); + y++; + anyfound = B_TRUE; + } + } + } + if (anyfound) wprintw(mainwin, "\n"); + } + + + getyx(mainwin, y, x); + x = 0; // override + + // show intrinsics + f = lfhasknownflag(lf, F_ATTRMOD); + if (f && (f->known)) { + mvwprintw(mainwin, y, 0, "%s %s has been %s.", your(lf), getattrname(f->val[0]), (f->val[2] > 0) ? "increased" : "decreased"); + y++; + } + f = lfhasknownflag(lf, F_NOPACK); + if (f && (f->known)) { + mvwprintw(mainwin, y, 0, "%s cannot carry objects.", you(lf)); + y++; + } + f = lfhasflag(lf, F_OMNIPOTENT); + if (f && (f->known)) { + mvwprintw(mainwin, y, 0, "%s are omnipotent.", you(lf)); + y++; + } + if (isblind(lf)) { + mvwprintw(mainwin, y, 0, "%s cannot see.", you(lf)); + y++; + } + f = lfhasknownflag(lf, F_DETECTAURAS); + if (f) { + mvwprintw(mainwin, y, 0, "%s automatically detect blessings or curses.", you(lf)); + y++; + } + f = lfhasknownflag(lf, F_DETECTLIFE); + if (f) { + mvwprintw(mainwin, y, 0, "%s automatically detect nearby lifeforms.", you(lf)); + y++; + } + f = lfhasknownflag(lf, F_DETECTMETAL); + if (f) { + mvwprintw(mainwin, y, 0, "%s automatically detect nearby metal.", you(lf)); + y++; + } + f = lfhasknownflag(lf, F_EXTRAINFO); + if (f && (f->known)) { + mvwprintw(mainwin, y, 0, "%s receive enhanced knowledge about the world.", you(lf)); + y++; + } + f = lfhasknownflag(lf, F_FLYING); + if (f && (f->known)) { + mvwprintw(mainwin, y, 0, "%s %s flying.", you(lf), isplayer(lf) ? "are" : "is"); + y++; + } + f = lfhasknownflag(lf, F_FOODPOISONED); + if (f && (f->known)) { + sprintf(buf, "%s have food poisoning.", you(lf)); + if (lfhasflag(lf, F_EXTRAINFO) || lfhasflag(lf, F_OMNIPOTENT)) { + char buf2[BUFLEN]; + sprintf(buf2, " [%d left]", f->lifetime); + strcat(buf, buf2); + } + mvwprintw(mainwin, y, 0, buf); + y++; + } + f = lfhasknownflag(lf, F_FREEZINGTOUCH); + if (f && (f->known)) { + strcpy(buf,"The next object you touch will turn to solid ice."); + if (lfhasflag(lf, F_OMNIPOTENT)) { + char buf2[BUFLEN]; + sprintf(buf2, " [%d uses left]", f->val[0]); + strcat(buf, buf2); + } + mvwprintw(mainwin, y, 0, buf); + y++; + } + f = lfhasflag(lf, F_GRAVBOOSTED); + if (f && (f->known)) { + mvwprintw(mainwin, y, 0, "Gravity is increased around %s.", you_l(lf)); + y++; + } + f = lfhasknownflag(lf, F_INVULNERABLE); + if (f && (f->known)) { + mvwprintw(mainwin, y, 0, "%s are protected from all physical harm.", you(lf)); + y++; + } + f = lfhasflag(lf, F_MAGSHIELD); + if (f && (f->known)) { + mvwprintw(mainwin, y, 0, "%s %s surrounded by a magnetic shield.", you(lf), isplayer(lf) ? "are" : "is"); + y++; + } + f = lfhasflag(lf, F_PARALYZED); + if (f && (f->known)) { + mvwprintw(mainwin, y, 0, "%s %s paralyzed.", you(lf), isplayer(lf) ? "are" : "is"); + y++; + } + f = lfhasflag(lf, F_PHOTOMEM); + if (f && (f->known)) { + mvwprintw(mainwin, y, 0, "%s do not forget your surroundings.", you(lf)); + y++; + } + f = lfhasknownflag(lf, F_REGENERATES); + if (f) { + char regenspeed[BUFLEN]; + if (f->val[0] == 1) { + strcpy(regenspeed, ""); + } else if (f->val[0] == 2) { + strcpy(regenspeed, "quickly"); + } else if (f->val[0] == 3) { + strcpy(regenspeed, "very quickly"); + } else { // >= 4 + strcpy(regenspeed, "extremely quickly"); + } + mvwprintw(mainwin, y, 0, "%s regenerate health%s.", you(lf),regenspeed); + y++; + } + f = lfhasknownflag(lf, F_RESISTMAG); + if (f) { + mvwprintw(mainwin, y, 0, "%s %s immune to magic.", you(lf), isplayer(lf) ? "are" : "is"); + y++; + } + f = lfhasknownflag(lf, F_SEEINDARK); + if (f) { + mvwprintw(mainwin, y, 0, "%s can see in the dark.", you(lf)); + y++; + } + + f = lfhasknownflag(lf, F_XRAYVIS); + if (f && !lfhasflag(lf, F_BLIND)) { + mvwprintw(mainwin, y, 0, "%s can see through walls.", you(lf)); + y++; + } + + + + // wait for key + h = getmaxy(mainwin); + centre(mainwin, h-1, "[Press any key]"); + getch(); + } + + drawscreen(); + real_clearmsg(B_TRUE); + //redraw(); } void tombstone(lifeform_t *lf) { - // clear screen - wclear(mainwin); + char pname[BUFLEN]; + int y; + char *p, *dummy; - centre(mainwin, 1, "R.I.P.\n"); + getplayernamefull(pname); + + // clear screen + cls(); + + y = 1; + centre(mainwin, y, "R.I.P."); y++; //printf("%s\n",lf->name); - centre(mainwin, 2, "Player\n");// TODO: use player name here - centre(mainwin, 3, "Killed by %s.\n",lf->lastdam); + centre(mainwin, y, "%s",pname); y++; + + p = strtok_r(lf->lastdam,"^", &dummy); + if (p) { + centre(mainwin, y, "Killed by %s.",p); y++; + p = strtok_r(NULL, "^", &dummy); + while (p) { + centre(mainwin, y, "(%s)",p); y++; + p = strtok_r(NULL, "^", &dummy); + } + + } else { + centre(mainwin, y, "Killed by something unknown."); y++; + } + wrefresh(mainwin); // wait for key... @@ -1287,149 +4935,10 @@ void tombstone(lifeform_t *lf) { delwin(statwin); delwin(msgwin); // clear screen - wclear(mainwin); + cls(); // close down curses curs_set(1); endwin(); } - -int wear(lifeform_t *lf, object_t *o) { - int rv = B_FALSE; - char buf[BUFLEN],obname[BUFLEN]; - flag_t *f; - int bp; - - getobname(o, obname, 1); - - if (!canwear(lf, o)) { - if (gamestarted) { - switch (reason) { - case E_ALREADYUSING: - if (lf->controller == C_PLAYER) { - msg("You're already wearing that!"); - } - break; - case E_WEARINGSOMETHINGELSE: - f = hasflag(o->flags, F_GOESON); - if (f) { - object_t *inway; - // find what else is there - inway = getequippedob(lf->pack, f->val[0]); - getobname(inway,buf, 1); - if (lf->controller == C_PLAYER) { - msg("You need to remove your %s first!",buf); - } - } else { - // should never happen - msg("You can't wear that!"); - } - break; - default: - if (lf->controller == C_PLAYER) { - msg("You can't wear that!"); - } - break; - } - } // end if gamestarted - return B_TRUE; - } // end if !canwear - - - // wear it - f = hasflag(o->flags, F_GOESON); - bp = f->val[0]; - - addflag(o->flags, F_EQUIPPED, bp, -1, -1, NULL); - taketime(lf, getmovespeed(lf)); - if (gamestarted) { - if (lf->controller == C_PLAYER) { - msg("You are now wearing %s.", obname); - } else if (haslos(player, lf->cell)) { - getlfname(lf, buf); - capitalise(lf); - msg("%s puts on %s.", buf, obname); - - } - } - - return rv; -} - -int weild(lifeform_t *lf, object_t *o) { - char buf[BUFLEN]; - flag_t *f; - object_t *oo; - - if (o) { - getobname(o, buf, o->amt); - } - - // TODO: any reason you might not be able to weild it at all? - // ie. too big, already have a cursed one, etc? - - if (!canweild(lf, o)) { - if (gamestarted) { - if (lf->controller == C_PLAYER) { - switch (reason) { - case E_ALREADYUSING: - msg("You are already weilding that!"); - break; - case E_NOUNARMEDATTACK: - msg("You cannot fight without a weapon!"); - break; - default: - msg("For some reason, you cannot pick up %s!",buf); - break; - } - } - } - return B_TRUE; - } - - // anything else weilded? - for (oo = lf->pack->first ; oo ; oo = oo->next) { - f = hasflagval(oo->flags, F_EQUIPPED, BP_WEAPON, -1, -1, NULL); - if (f) { - // unweild it - killflag(f); - } - } - - - // if we asked to just unweild our weapon, exit now - // with no error. - if (!o) { - if (gamestarted) { - if (lf->controller == C_PLAYER) { - msg("You are now fighting unarmed."); - } else if (haslos(player, lf->cell)) { - char buf2[BUFLEN]; - getlfname(lf, buf2); - msg("%s is now fighting unarmed.",buf2); - } - } - return B_FALSE; - } - - // now weild this - addflag(o->flags, F_EQUIPPED, BP_WEAPON, -1, -1, NULL); - taketime(lf, getmovespeed(lf)); - if (gamestarted) { - if (lf->controller == C_PLAYER) { - msg("You are now weilding %c - %s.", o->letter, buf); - // warn if it won't do any damage - f = hasflag(o->flags, F_DAM); - if (!f) { - msg("You have a feeling that this weapon will not be very effective..."); - } - } else if (haslos(player, lf->cell)) { - char buf2[BUFLEN]; - getlfname(lf, buf2); - msg("%s weilds %s.", buf2, buf); - - } - } - return B_FALSE; -} diff --git a/io.h b/io.h index 5b3c594..51ec681 100644 --- a/io.h +++ b/io.h @@ -1,23 +1,58 @@ #include #include "defs.h" - +void addchoice(prompt_t *p, char ch, char *text, char *desc, void *data); +void addheading(prompt_t *p, char *text); +void addmsghist(char *text); void anim(cell_t *src, cell_t *dst, char ch); +void animradial(cell_t *src, int radius, char ch); +//void announceob(enum OBTYPE oid); +int announceflaggain(lifeform_t *lf, flag_t *f); +void announceflagloss(lifeform_t *lf, flag_t *f); +int announceobflaggain(object_t *o, flag_t *f); +void announceobflagloss(object_t *o, flag_t *f); object_t *askobject(obpile_t *op, char *title, int *count, int opts); +object_t *askobjectwithflag(obpile_t *op, char *title, int *count, int opts, enum FLAG withflag); object_t *askobjectofclass(obpile_t *op, char *title, int *count, int opts, enum OBCLASS obclass); -object_t *doaskobject(obpile_t *op, char *title, int *count, int opts, enum OBCLASS obclass); -cell_t *askcoords(char *prompt); +object_t *doaskobject(obpile_t *op, char *title, int *count, int opts, enum OBCLASS obclass, enum FLAG withflag); +int askobjectmulti(obpile_t *op, char *prompt, int opts); +char askchar(char *prompt, char *validchars, char *def, int showchars); +cell_t *askcoords(char *prompt, int targettype); +char *askstring(char *prompt, char punc, char *retbuf, int retbuflen, char *def); void centre(WINDOW *win, int y, char *format, ... ); int chartodir(char ch); +int cleanupgfx(void); void clearmsg(void); +void real_clearmsg(int force); +void clearretobs(void); +void cls(void); void describeob(object_t *o); -void dodrop(obpile_t *op); +void doattackcell(char dirch); +void doclose(void); +void dodrop(obpile_t *op, int wantmulti); +void doeat(obpile_t *op); +void doenter(lifeform_t *lf); +void doexplain(void); +void dofinaloblist(obpile_t *op); +void dofire(void); void doinventory(obpile_t *op); void doknowledgelist(void); +void dolook(cell_t *where); +void domagic(enum OBTYPE spellid, int cellx, int celly); +void domsghist(void); +void dooperate(obpile_t *op); int dopickup(obpile_t *op); +void dolockpick(obpile_t *op); +void donextguntarget(void); +void dopour(obpile_t *op); +void doquit(void); void doquaff(obpile_t *op); void doread(obpile_t *op); +void dorest(void); +void doselguntarget(void); +void dostairs(int dir); int dotakeoff(obpile_t *op); void dothrow(obpile_t *op); +void dovendingmachine(lifeform_t *lf, object_t *vm); int dowear(obpile_t *op); int doweild(obpile_t *op); void drawunviscell(cell_t *cell, int x, int y); @@ -27,17 +62,25 @@ void drawlevelfor(lifeform_t *lf); void drawmsg(void); void drawscreen(void); void drawstatus(void); +int drop(object_t *o, int count); +char getchoice(prompt_t *prompt); +char getchoicestr(prompt_t *prompt); int getkey(void); void handleinput(void); +void initgfx(void); +void initprompt(prompt_t *p, char *q1); int keycodetokey(int keycode); void more(void); +void warn(char *format, ... ); void msg(char *format, ... ); -int pickup(lifeform_t *lf, object_t *what, int howmany); +void msglower(char *format, ... ); +void msg_real(char *format, ... ); +void nothinghappens(void); void dblog(char *format, ... ); void redraw(void); int savequit(void); -int takeoff(lifeform_t *lf, object_t *o); +void showlfarmour(lifeform_t *lf); +void showlfstats(lifeform_t *lf, int showall); void tombstone(lifeform_t *lf); +void updatestatus(void); void updateviewfor(cell_t *cell); -int wear(lifeform_t *lf, object_t *o); -int weild(lifeform_t *lf, object_t *o); diff --git a/lf.c b/lf.c index fbd2a01..7b1efe6 100644 --- a/lf.c +++ b/lf.c @@ -3,26 +3,73 @@ #include #include #include +#include "attack.h" #include "defs.h" #include "flag.h" +#include "io.h" #include "lf.h" #include "map.h" +#include "move.h" +#include "nexus.h" #include "objects.h" +#include "spell.h" +#include "text.h" +extern map_t *firstmap; extern race_t *firstrace, *lastrace; +extern job_t *firstjob, *lastjob; +extern objecttype_t *objecttype; extern lifeform_t *player; + +extern prompt_t prompt; + +extern long nextlfid; + +extern WINDOW *msgwin; +extern WINDOW *statwin; +extern int statdirty; + extern int gamestarted; extern int loading; extern enum ERROR reason; +job_t *addjob(enum JOB id, char *name) { + job_t *a; + + // add to the end of the list + if (firstjob == NULL) { + firstjob = malloc(sizeof(job_t)); + a = firstjob; + a->prev = NULL; + } else { + // go to end of list + a = lastjob; + a->next = malloc(sizeof(job_t)); + a->next->prev = a; + a = a->next; + } + lastjob = a; + a->next = NULL; + + // props + a->id = id; + a->name = strdup(name); + + a->flags = addflagpile(NULL, NULL); + return a; +} + lifeform_t *addlf(cell_t *cell, enum RACE rid, int level) { + return real_addlf(cell, rid, level, C_AI); +} + +lifeform_t *real_addlf(cell_t *cell, enum RACE rid, int level, int controller) { map_t *m; lifeform_t *a; int i; - flag_t *f; assert(cell); if (cell->type != (celltype_t *) DUMMYCELLTYPE) { @@ -43,21 +90,43 @@ lifeform_t *addlf(cell_t *cell, enum RACE rid, int level) { a->next->prev = a; a = a->next; } + + if (controller == C_PLAYER) { + player = a; + } + m->lastlf = a; a->next = NULL; // props - a->id = m->nextlfid; m->nextlfid++; - a->controller = C_AI; - a->race = findrace(rid); + a->id = nextlfid; nextlfid++; + a->controller = controller; a->level = level; - a->cell = cell; // TODO: fix + a->xp = getxpforlev(a->level); + a->cell = cell; a->alive = B_TRUE; a->lastdam = strdup("nothing"); - a->timespent = 0; + a->lastdamtype = DT_NONE; + if (gamestarted && a->prev) { + a->timespent = a->prev->timespent + 1; + } else { + a->timespent = 0; + } a->sorted = B_FALSE; a->forgettimer = 0; + a->polyrevert = B_FALSE; + + // for precalcing line of sight + a->nlos = 0; + a->los = NULL; + + // for ai + a->ignorecell = NULL; + + // avoid messages when equipping initial obs + a->created = B_FALSE; + a->pack = addobpile(a, NOLOC); // clear laoding variables @@ -67,29 +136,12 @@ lifeform_t *addlf(cell_t *cell, enum RACE rid, int level) { a->x = -1; a->y = -1; - // inherit flags from race - a->flags = addflagpile(); - for (f = a->race->flags->first ; f ; f = f->next) { - addflag(a->flags, f->id, f->val[0], f->val[1], f->val[2], f->text); - } + // init flags + a->flags = addflagpile(a, NULL); - // generate hp/maxhp from hit dice - // TODO: take level into account - f = hasflag(a->flags, F_HITDICE); - if (f) { - int hitdice,plus,this; - a->maxhp = 0; - for (i = 0; i < a->level; i++) { - hitdice = f->val[0]; - plus = f->val[1]; - this = rolldie(hitdice, 4) + plus; - a->maxhp += this; - } - } else { - // default - 0 hit dice + 8 - a->maxhp = 8 * a->level; - } - a->hp = a->maxhp; + // set race - this will inherit race flags + a->race = NULL; + setrace(a, rid); // update other things cell->lf = a; @@ -98,10 +150,13 @@ lifeform_t *addlf(cell_t *cell, enum RACE rid, int level) { if (!loading) { outfitlf(a); } + a->created = B_TRUE; return a; } -race_t *addrace(enum RACE id, char *name, char glyph) { + + +race_t *addrace(enum RACE id, char *name, float weight, char glyph, enum MATERIAL mat) { race_t *a; // add to the end of the list @@ -121,10 +176,222 @@ race_t *addrace(enum RACE id, char *name, char glyph) { // props a->id = id; + + a->material = findmaterial(mat); + assert(a->material); a->name = strdup(name); + a->weight = weight; a->glyph = glyph; - a->flags = addflagpile(); + a->flags = addflagpile(NULL, NULL); + return a; +} + +void adjustdamlf(lifeform_t *lf, unsigned int *amt, enum DAMTYPE damtype) { + if (lfhasflagval(lf, F_DTIMMUNE, damtype, NA, NA, NULL)) { + *amt = 0; + return; + } + + if ((damtype == DT_MAGIC) && hasmr(lf)) { + *amt = 0; + return; + } + + if (lfhasflag(lf, F_INVULNERABLE)) { + switch (damtype) { + case DT_DIRECT: + case DT_NONE: + break; + default: + *amt = 0; + break; + } + return; + } + + if (lfhasflagval(lf, F_DTRESIST, damtype, NA, NA, NULL)) { + (*amt) /= 2; + } + if (lfhasflagval(lf, F_DTVULN, damtype, NA, NA, NULL)) { + (*amt) *= 2; + } + + + // adjust for lifeform material + adjustdammaterial(amt, damtype, getlfmaterial(lf)); + + if (*amt < 0) *amt = 0; +} + +void autotarget(lifeform_t *lf) { + object_t *gun; + lifeform_t *targ,*newtarg; + int closest; + int i; + int gunrange; + int targid; + + gun = getfirearm(lf); + if (!gun) return; + + if (!getammo(lf)) return; + + gunrange = getfirearmrange(gun); + + // already got a target? + targid = getguntargetid(lf); + + if (targid == -1) { + targ = NULL; + } else { + targ = findlf(NULL, targid); + if (targ) { + // dead? remove target and keep going. + if (isdead(targ)) { + // clear target ? + targ = NULL; + } else if (!haslof(lf, targ->cell)) { + // clear target ? + targ = NULL; + } else { + // already got a valid target. return. + return; + } + } else { + // target no longer exists? + // clear target ? + } + } + + // find new target + newtarg = NULL; + closest = 9999; + for (i = 0; i < lf->nlos; i++) { + cell_t *c; + c = lf->los[i]; + if (c->lf && (c->lf != lf) && isingunrange(lf, c)) { + int thisdist; + thisdist = getcelldist(lf->cell, c); + if (thisdist < closest) { + newtarg = c->lf; + closest = thisdist; + } + } + } + + + if (newtarg && (newtarg != targ)) { + setguntarget(lf, newtarg); + } +} + +void autoweild(lifeform_t *lf) { + object_t *bestwep,*bestfirearm; + object_t *o; + int pretimespent; + + pretimespent = lf->timespent; + // weild weapons if required + bestwep = getbestweapon(lf); + if (bestwep) { + weild(lf, bestwep); + } + + bestfirearm = getbestfirearm(lf); + if (bestfirearm) { + weild(lf, bestfirearm); + } + + // weild armour if required + for (o = lf->pack->first ; o ; o = o->next) { + if (canwear(lf, o, BP_NONE)) { + wear(lf, o); + } else { + if (isplayer(lf) && (o->type->id == OT_RING_PROTFIRE)) { + dblog("zz"); + } + } + } + // make sure it doesn't take any time + lf->timespent = pretimespent; +} + +int appearsrandomly(enum RACE rid) { + race_t *r; + r = findrace(rid); + if (!r) return B_FALSE; + + if (!hasflag(r->flags, F_RARITY)) { + return B_FALSE; + } else if (hasflagval(r->flags, F_RARITY, NA, F_UNIQUE, NA, NULL)) { + return B_FALSE; + } + + return B_TRUE; +} + +void bleed(lifeform_t *lf) { + flag_t *f; + char obname[BUFLEN]; + f = lfhasflag(lf, F_BLOODOB); + if (f) { + if (f->text) { + strcpy(obname, f->text); + } else { + strcpy(obname, ""); + } + } else { + strcpy(obname, "blood stain"); + } + + if (strlen(obname) > 0) { + addob(lf->cell->obpile, obname); + } +} + +int cancast(lifeform_t *lf, enum OBTYPE oid, int *mpcost) { + int castable = B_FALSE; + // TODO: check for mute? + + reason = E_OK; + + if (lfhasflagval(lf, F_CANWILL, oid, NA, NA, NULL)) { + // no mp cost. + if (mpcost) *mpcost = 0; + return B_TRUE; + } + if (lfhasflagval(lf, F_CANCAST, oid, NA, NA, NULL)) { + int cost; + // how much mp does it take to cast this? + cost = getmpcost(oid); + if (mpcost) *mpcost = cost; + if (lf->mp >= cost) { + castable = B_TRUE; + } else { + reason = E_NOMP; + return B_FALSE; + } + } + + return castable; +} + +// TODO: reason = xx ? +int caneat(lifeform_t *lf, object_t *o) { + if (!isedible(o)) { + return B_FALSE; + } + return B_TRUE; +} + +int canhear(lifeform_t *lf, cell_t *c) { + int hrange; + hrange = gethearingrange(lf); + if (getcelldist(lf->cell, c) <= hrange) { + return B_TRUE; + } + return B_FALSE; } int canpickup(lifeform_t *lf, object_t *o) { @@ -133,53 +400,150 @@ int canpickup(lifeform_t *lf, object_t *o) { reason = E_NOPICKUP; return B_FALSE; } + if (lfhasflag(lf, F_NOPACK)) { + reason = E_NOPACK; + return B_FALSE; + } + if (lfhasflag(lf, F_GRAVBOOSTED)) { + reason = E_GRAVBOOSTED; + return B_FALSE; + } + + // too heavy? + if (getobweight(o) > getmaxliftweight(lf)) { + reason = E_TOOHEAVY; + return B_FALSE; + } // space in pack? if (countobs(lf->pack) >= MAXPILEOBS) { reason = E_NOSPACE; return B_FALSE; } - if (getnextletter(lf->pack, NULL) == '-') { + if (getnextletter(lf->pack, NULL) == '\0') { reason = E_NOSPACE; return B_FALSE; } return B_TRUE; } -int canwear(lifeform_t *lf, object_t *o) { +int canpush(lifeform_t *lf, object_t *o, int dir) { + cell_t *obcell, *dstcell; + reason = E_OK; + + if (getlfmaterial(lf) == MT_GAS) { + reason = E_INSUBSTANTIAL; + return B_FALSE; + } + + // check lf weight + if (getobweight(o) > getmaxpushweight(lf)) { + reason = E_TOOHEAVY; + return B_FALSE; + } + // check cell behind object + obcell = o->pile->where; + if (!obcell) { + reason = E_FAILED; + return B_FALSE; + } + dstcell = getcellindir(obcell, dir); + if (!cellwalkable(NULL, dstcell, NULL)) { + reason = E_FAILED; + return B_FALSE; + } + return B_TRUE; + +} + +int canquaff(lifeform_t *lf, object_t *o) { + if (!isdrinkable(o)) { + reason = E_WRONGOBTYPE; + return B_FALSE; + } + + if (getlfmaterial(lf) == MT_GAS) { + reason = E_INSUBSTANTIAL; + return B_FALSE; + } + + return B_TRUE; +} + +// safe to rest? +int canrest(lifeform_t *lf) { + lifeform_t *l; + reason = E_OK; + for (l = lf->cell->map->lf ; l ; l = l->next) { + if ((l != lf) && haslos(lf, l->cell)) { + reason = E_MONSTERNEARBY; + return B_FALSE; + } + } + return B_TRUE; +} + +int canwear(lifeform_t *lf, object_t *o, enum BODYPART where) { object_t *oo; flag_t *f; - enum BODYPART bp; reason = E_OK; - // where is this worn? - f = hasflag(o->flags, F_GOESON); - if (f) { - bp = f->val[0]; - } else { - // can't wear anywhere + // already equipped? + if (hasflag(o->flags, F_EQUIPPED)) { + reason = E_ALREADYUSING; return B_FALSE; } + // wearable at all? + if (!iswearable(o)) { + reason = E_IMPOSSIBLE; + return B_FALSE; + } + + if (where == BP_NONE) { + // can we wear it ANYWHERE? + enum BODYPART possbp[MAXBODYPARTS]; + int nparts = 0; + int i; + for (f = o->flags->first ; f ; f = f->next) { + if (f->id == F_GOESON) { + possbp[nparts] = f->val[0]; + nparts++; + } + } + + if (nparts == 0) { + // can't wear anywhere! + reason = E_IMPOSSIBLE; + return B_FALSE; + } + + // are any of these body parts free? + for (i = 0; i < nparts; i++) { + if (isfreebp(lf, possbp[i])) { + return B_TRUE; + } + } + // no parts free + reason = E_WEARINGSOMETHINGELSE; + return B_FALSE; + + } else { + // does this object go there? + f = hasflagval(o->flags, F_GOESON, where, NA, NA, NULL); + if (!f) { + // can't wear there! + reason = E_IMPOSSIBLE; + return B_FALSE; + } + } // anything else worn there? for (oo = lf->pack->first ; oo ; oo = oo->next) { - f = hasflagval(oo->flags, F_EQUIPPED, bp, -1, -1, NULL); + f = hasflagval(oo->flags, F_EQUIPPED, where, -1, -1, NULL); if (f) { - if (oo == o) { // already weilding it - reason = E_ALREADYUSING; - } else { - reason = E_WEARINGSOMETHINGELSE; - } - return B_FALSE; - } - } - - // trying to fight unarmed, but no unarmed attack? - if (o == NULL) { - if (!hasflag(lf->flags, F_UNARMEDATTACKOB)) { - reason = E_NOUNARMEDATTACK; + reason = E_WEARINGSOMETHINGELSE; return B_FALSE; } } @@ -191,22 +555,35 @@ int canweild(lifeform_t *lf, object_t *o) { object_t *oo; flag_t *f; + if (lfhasflagval(lf, F_NOBODYPART, BP_WEAPON, NA, NA, NULL)) { + reason = E_NOHANDS; + return B_FALSE; + } + if (o) { + if (hasflag(o->flags, F_TWOHANDED)) { + if (lfhasflagval(lf, F_NOBODYPART, BP_SECWEAPON, NA, NA, NULL)) { + reason = E_NOHANDS; + return B_FALSE; + } + } + } + reason = E_OK; - // anything else weilded? + // already weilding it? for (oo = lf->pack->first ; oo ; oo = oo->next) { f = hasflagval(oo->flags, F_EQUIPPED, BP_WEAPON, -1, -1, NULL); if (f) { if (oo == o) { // already weilding it reason = E_ALREADYUSING; return B_FALSE; - } // TODO: else if cursed... + } } } // trying to fight unarmed, but no unarmed attack? if (o == NULL) { - if (!hasflag(lf->flags, F_UNARMEDATTACKOB)) { + if (!hasflag(lf->flags, F_HASATTACK)) { reason = E_NOUNARMEDATTACK; return B_FALSE; } @@ -216,7 +593,6 @@ int canweild(lifeform_t *lf, object_t *o) { } int cantakeoff(lifeform_t *lf, object_t *o) { - object_t *oo; flag_t *f; reason = E_OK; @@ -226,21 +602,86 @@ int cantakeoff(lifeform_t *lf, object_t *o) { return B_FALSE; } - // TODO CURSE + // cursed? + if (o->blessed == B_CURSED) { + reason = E_CURSED; + return B_FALSE; + } return B_TRUE; } +int castspell(lifeform_t *lf, enum OBTYPE sid, lifeform_t *targlf, object_t *targob, cell_t *targcell) { + int rv; + int cost; + // check whether we _can_ cast it. + // do we have this spell/ability? + // enough mp? etc + if (!cancast(lf, sid, &cost)) { + if (isplayer(lf)) { + // announce + switch (reason) { + case E_NOMP: + msg("You don't have enough mana to cast that."); + break; + default: + msg("For some reason, you can't cast that."); + break; + } + } + return B_TRUE; + } + + // take time + taketime(lf, getspellspeed(lf)); + + // lose mp + lf->mp -= cost; + + if (hasmr(lf)) { + if (isplayer(lf)) { + msg("Your spell seems to have failed."); + } + return B_FALSE; + } + + // announce + if (!isplayer(lf) && haslos(player, lf->cell)) { + char lfname[BUFLEN]; + flag_t *f; + getlfname(lf, lfname); + f = lfhasflag(lf,F_SPELLCASTTEXT); + if (f) { + msg("%s %s.", lfname, f->text); + } else { + msg("%s casts a spell.", lfname); + } + } + + // cast the spell + rv = dospelleffects(lf, sid, targlf, targob, targcell, B_UNCURSED, NULL); + return rv; +} + void die(lifeform_t *lf) { char buf[BUFLEN]; - object_t *o, *nexto; flag_t *f; + cell_t *where; + //int dropobs = B_TRUE; + int vaporised = B_FALSE; + lf->alive = B_FALSE; - if (lf->controller == C_PLAYER) { - // forec screen redraw so you see your hp = 0 + if (isplayer(lf)) { + // force screen redraw so you see your hp = 0 drawscreen(); - msg("You die."); + + if (lf->lastdamtype == DT_EXPLOSIVE) { + msg("You are vaporised!"); + vaporised = B_TRUE; + } else { + msg("You die."); + } more(); // force msg redraw! drawmsg(); @@ -248,56 +689,301 @@ void die(lifeform_t *lf) { if (!hasflag(lf->flags, F_NODEATHANNOUNCE)) { if (haslos(player, lf->cell)) { getlfname(lf, buf); - capitalise(buf); - msg("%s dies.",buf); + if (lf->lastdamtype == DT_EXPLOSIVE) { + msg("%s is vaporised!",buf); + vaporised = B_TRUE; + } else { + msg("%s dies.",buf); + } + } + } + + if (lf->race->id == R_DANCINGWEAPON) { + if (haslos(player, lf->cell)) { + getlfname(lf, buf); + msg("%s drops to the ground.", buf); + } + } + + // award xp (but not if another monster killed it) + if (hasflag(lf->flags, F_KILLEDBYPLAYER)) { + f = hasflag(lf->flags, F_XPVAL); + if (f) { + gainxp(player, f->val[0]); } } } - // drop all objects - while (lf->pack->first) { - if (!moveob(lf->pack->first, lf->cell->obpile, ALL)) { - killob(lf->pack->first); + + // drop/kill all objects + if (!isplayer(lf)) { + while (lf->pack->first) { + if (vaporised) { + killob(lf->pack->first); + } else { + if (!moveob(lf->pack->first, lf->cell->obpile, ALL)) { + killob(lf->pack->first); + } + } } } - // drop corpse - f = hasflag(lf->flags, F_CORPSETYPE); - if (f) { - addob(lf->cell->obpile, f->text); + // drop corpse/splatter blood + if (vaporised) { + cell_t *c; + int n; + int dir; + for (dir = DC_N; dir <= DC_NW; dir++) { + int maxdist = 0; + int wantdist = 0; + int done = B_FALSE; + // get max distance + c = lf->cell; + done = B_FALSE; + while (!done) { + c = getcellindir(c, dir); + if (c && cellwalkable(NULL, c, NULL)) { + maxdist++; + } else { + done = B_TRUE; + } + } + // pick random distance + wantdist = rnd(0,maxdist); + // go that far + c = lf->cell; + for (n = 0; n < wantdist; n++) { + c = getcellindir(c, dir); + } + // add blood + switch (rnd(1,2)) { + case 1: + addob(c->obpile, "chunk of flesh"); + break; + case 2: + addob(c->obpile, "pool of blood"); + break; + } + } + } else { + if (lfhasflag(lf, F_NOCORPSE)) { + if (haslos(player, lf->cell)) { + getlfname(lf, buf); + msg("%s crumbles to dust.", buf); + } + } else { + f = lfhasflag(lf, F_CORPSETYPE); + if (f) { + object_t *corpse; + char corpsename[BUFLEN]; + sprintf(corpsename, "%s%s", + (lf->lastdamtype == DT_FIRE) ? "flaming " : "", + f->text); + corpse = addob(lf->cell->obpile, corpsename); + if (corpse && (lf->lastdamtype == DT_FIRE) && isflammable(corpse)) { + addflag(corpse->flags, F_ONFIRE, B_TRUE, NA, NA, NULL); + } + // TODO: adjust corpse nutrition based on monster size ? + } + } } + where = lf->cell; if (lf->controller != C_PLAYER) { // kill lifeform killlf(lf); + assert(where->lf == NULL); } + } +void dumplf(void) { + lifeform_t *lf; + map_t *startmap; + int count = 0; + dblog("START LIFEFORM DUMP:"); + if (player) { + startmap = player->cell->map; + } else { + startmap = firstmap; + } + for (lf = startmap->lf ; lf ; lf = lf->next) { + dblog(" timespent=%3d id %d race %s",lf->timespent, lf->id, lf->race->name); + count++; + } + dblog("END LIFEFORM DUMP (%d found)",count); +} + +int eat(lifeform_t *lf, object_t *o) { + char buf[BUFLEN]; + char obname[BUFLEN]; + flag_t *f; + int nutrition; + double amt; + double mod; + enum LFSIZE sz; + + if (!caneat(lf, o)) { + if (isplayer(lf)) { + msg("You can't eat that!"); + } + return B_TRUE; + } + + getobname(o, obname, 1); + + nutrition = getnutrition(o); + + if (nutrition == 0) { + // should never happen! + if (lf->controller == C_PLAYER) { + msg("That doesn't seem very nutritious..."); + } + return B_TRUE; + } + + // only do this check for the player - basically it should + // handle the case where we have poluymorphed into something + // which doesn't eat. + if (lf->controller == C_PLAYER) { + f = hasflag(lf->flags, F_HUNGER); + if (!f) { + msg("You don't need to eat!"); + return B_TRUE; + } + } + + + if (touch(lf, o)) { + return B_TRUE; + } + + // announce + if (lf->controller == C_PLAYER) { + msg("You eat %s.%s", obname, + (f->val[1] >= 20) ? " Yum!" : ""); + } else if (haslos(player, lf->cell)) { + getlfname(lf, buf); + capitalise(buf); + msg("%s eats %s.", buf, obname); + } + + if (isrotting(o)) { + // lose hp + if (isplayer(lf)) { + msg("That food was bad!"); + } + // food poisoning for 20 turns + addtempflag(lf->flags, F_FOODPOISONED, B_TRUE, NA, NA, obname, 20); + } + + // change hunger + modhunger(lf, -nutrition); + // remove object + removeob(o, 1); + + // how long will it take? + // ie. picking up off ground + if (o->pile->owner != lf) { + amt = SPEED_PICKUP; + } else { + amt = 0; + } + + // select modifier based on creature size + sz = getlfsize(lf); + switch (sz) { + case SZ_MINI: + mod = 3; break; + case SZ_TINY: + mod = 2.5; break; + case SZ_SMALL: + mod = 2; break; + case SZ_MEDIUM: + mod = 1.5; break; + case SZ_HUMAN: + mod = 1; break; + case SZ_LARGE: + mod = 0.5; break; + case SZ_HUGE: + mod = 0.25; break; + case SZ_ENORMOUS: + mod = 0.125; break; + } + + amt += ((double)getmovespeed(lf) * mod); + + if (amt < 1) amt = 1; + taketime(lf, amt); + + if (isplayer(lf)) { + drawstatus(); + wrefresh(statwin); + } + + + return B_FALSE; +} + +// if the lf wearing something which shades their eyes? +object_t *eyesshaded(lifeform_t *lf) { + object_t *glasses; + glasses = getarmour(lf, BP_EYES); + if (glasses && hasflag(glasses->flags, F_TINTED)) { + return glasses; + } + return NULL; +} + + void fightback(lifeform_t *lf, lifeform_t *attacker) { - // they will now fight back! + // respond to damage if (attacker && !isdead(lf)) { if (lf->controller != C_PLAYER) { - if (!hasflagval(lf->flags, F_TARGET, attacker->id, NA, NA, NULL)) { - addflag(lf->flags, F_TARGET, attacker->id, NA, NA, NULL); - // announce - if (haslos(player, lf->cell)) { - char attackername[BUFLEN]; - char lfname[BUFLEN]; - getlfname(attacker, attackername); - getlfname(lf, lfname); - capitalise(lfname); - msg("%s turns to attack %s!", lfname, - haslos(player, attacker->cell) ? attackername : "something"); + if (hasflag(lf->flags, F_FLEEONDAM)) { + // they will flee + scare(lf, attacker, PERMENANT); + } else { + // they will now fight back! + if (!hasflagval(lf->flags, F_TARGET, attacker->id, NA, NA, NULL)) { + addflag(lf->flags, F_TARGET, attacker->id, NA, NA, NULL); + // announce + if (haslos(player, lf->cell)) { + char attackername[BUFLEN]; + char lfname[BUFLEN]; + getlfname(attacker, attackername); + getlfname(lf, lfname); + capitalise(lfname); + msg("%s turns towards %s!", lfname, + haslos(player, attacker->cell) ? attackername : "something"); + } } } } } } +job_t *findjob(enum JOB jobid) { + job_t *j; + for (j = firstjob ; j ; j = j->next) { + if (j->id == jobid) return j; + } + return NULL; +} + lifeform_t *findlf(map_t *m, int lfid) { lifeform_t *lf; - for (lf = m->lf ; lf ; lf = lf->next) { - if (lf->id == lfid) return lf; + map_t *thismap; + if (m) { + for (lf = m->lf ; lf ; lf = lf->next) { + if (lf->id == lfid) return lf; + } + } else { + for (thismap = firstmap ; thismap ; thismap = thismap->next) { + for (lf = thismap->lf ; lf ; lf = lf->next) { + if (lf->id == lfid) return lf; + } + } } return NULL; } @@ -312,21 +998,186 @@ race_t *findrace(enum RACE id) { return NULL; } +race_t *findracebyname(char *name) { + race_t *r; + for (r = firstrace; r ; r = r->next) { + if (strstr(r->name, name)) { + return r; + } + } + + return NULL; +} + + +// returns TRUE if we ran away from something +int flee(lifeform_t *lf) { + flag_t *f, *nextf; + lifeform_t *fleefrom = NULL; + + // are we fleeing? + for (f = lf->flags->first ; f ; f = nextf) { + nextf = f->next; + if (f->id == F_FLEEFROM) { + lifeform_t *thisone; + thisone = findlf(lf->cell->map, f->val[0]); + if (thisone) { + if (haslos(lf, thisone->cell)) { + // if not fleeing from anyone, or this one is closer... + if (!fleefrom || getcelldist(lf->cell, thisone->cell) < getcelldist(lf->cell, fleefrom->cell)) { + fleefrom = thisone; + } + } else { + // if we can't see the person we're running from, and it's not enforced for + // a certain time period (ie. f->lifetime == PERMENANT), we can now stop fleeing. + if (f->lifetime == PERMENANT) { + killflag(f); + } + // if the flag is temporary, wait for it to time out normally + } + } + } + } + + if (fleefrom) { + // TODO: if we are AI, try to use specific spells like teleport self + // move away from them + if (!moveawayfrom(lf, fleefrom->cell)) { + // announce + if (isplayer(lf)) { + char buf[BUFLEN]; + drawscreen(); + getlfname(fleefrom, buf); + msg("You flee from %s!",buf); + } + return B_TRUE; + } + } + + // if we get here, it means we didn't need to or couldn't flee + return B_FALSE; +} void gainhp(lifeform_t *lf, int amt) { - char buf[BUFLEN]; - lf->hp += amt; + int gained = B_FALSE; + int maxed = B_FALSE; + if (lf->hp < lf->maxhp) { + lf->hp += amt; + gained = B_TRUE; + } - if (lf->hp > lf->maxhp) { + if (lf->hp >= lf->maxhp) { lf->hp = lf->maxhp; + if (gained) maxed = B_TRUE; + } + + if (isplayer(lf)) { + if (maxed) { + msg("You are now fully healed."); + } + // update screen + drawstatus(); + updatestatus(); } } -int getarmour(lifeform_t *lf) { +void gainlevel(lifeform_t *lf) { + char buf[BUFLEN]; + float hpratio,mpratio; + + if (isplayer(lf)) { + statdirty = B_TRUE; + } + + lf->level++; + if (lf->controller == C_PLAYER) { + msg("Welcome to level %d!",lf->level); + more(); + } else if (haslos(player, lf->cell)) { + getlfname(lf, buf); + msg("%s looks more confident!",buf); + } + + // update hp + hpratio = ((float)lf->hp / (float)lf->maxhp); + lf->maxhp += rollhitdice(lf); + lf->hp = hpratio * (float)lf->maxhp; + + // update mp + if (lfhasflag(lf, F_MPDICE)) { + mpratio = ((float)lf->mp / (float)lf->maxmp); + lf->maxmp += rollmpdice(lf); + lf->mp = mpratio * (float)lf->maxmp; + } + + // TODO: hand out effects based on job +} + +void gainmp(lifeform_t *lf, int amt) { + int gained = B_FALSE; + int maxed = B_FALSE; + + // magic resistance means you can't regenerate mana! + if (hasmr(lf)) return; + + if (lf->mp < lf->maxmp) { + lf->mp += amt; + gained = B_TRUE; + } + + if (lf->mp >= lf->maxmp) { + lf->mp = lf->maxmp; + if (gained) maxed = B_TRUE; + } + + if (isplayer(lf)) { + if (maxed) { + msg("Your mana is now fully restored."); + } + // update screen + drawstatus(); + updatestatus(); + } +} + +void gainxp(lifeform_t *lf, long amt) { + + if (isplayer(lf)) { + statdirty = B_TRUE; + } + + // level 0 lifeforms can't gain xp + if (lf->level == 0) return; + + lf->xp += amt; + + // ready for next level? + while (lf->xp >= getxpforlev(lf->level + 1)) { + gainlevel(lf); + } +} + + +object_t *getarmour(lifeform_t *lf, enum BODYPART bp) { + object_t *o; + for (o = lf->pack->first ; o ; o = o->next) { + if (isarmour(o) && isequippedon(o, bp)) { + return o; + } + } + return NULL; +} + +int getarmourrating(lifeform_t *lf) { object_t *o; flag_t *f; int ar = 0; + f = hasflag(lf->flags, F_ARMOURRATING); + if (f) { + ar += f->val[0]; + } + for (o = lf->pack->first ; o ; o = o->next) { if (hasflag(o->flags, F_EQUIPPED)) { f = hasflag(o->flags, F_ARMOURRATING); @@ -339,6 +1190,34 @@ int getarmour(lifeform_t *lf) { return ar; } + +int getattackspeed(lifeform_t *lf) { + object_t *w; + w = getweapon(lf); + if (w) { + return getobattackspeed(w); + } + + return getunarmedattackspeed(lf); +} + +int getattr(lifeform_t *lf, enum ATTRIB attr) { + int val = 0; + flag_t *f; + val = lf->att[attr]; + + for (f = lf->flags->first ; f ; f = f->next) { + if ((f->id == F_ATTRMOD) && (f->val[0] == attr)) { + val += f->val[1]; + } + } + + if (val < 0) val = 0; + + return val; +} + + int getevasion(lifeform_t *lf) { object_t *o; flag_t *f; @@ -351,85 +1230,155 @@ int getevasion(lifeform_t *lf) { if (ev < 0) ev = 0; } - // minus armour penalties + // now get object penalties/bonuses for (o = lf->pack->first ; o ; o = o->next) { - f = hasflag(o->flags, F_EVASION); - if (f) { - ev += (f->val[0]); - if (ev < 0) ev = 0; + // armour/weapons must be worn to do anything + if (hasflag(o->flags, F_EQUIPPED)) { + f = hasflag(o->flags, F_EVASION); + if (f) { + ev += (f->val[0]); + if (ev < 0) ev = 0; + } } } + // dexterity mod + ev += (getstatmod(lf, A_DEX) / 2); + if (ev < 0) ev = 0; + + // modify for blindness + if (isblind(lf)) { + ev -= 50; + } + if (ev < 0) ev = 0; + return ev; } -object_t *getbestweapon(lifeform_t *lf) { - obpile_t *op; - object_t *curwep,*bestwep = NULL; - int bestmaxdam = -999; - flag_t *f; + +object_t *getbestmissile(lifeform_t *lf) { + object_t *bestwep = NULL; + int bestdam = -1; object_t *o; - op = addobpile(lf, NULL); // for use if we are unarmed + for (o = lf->pack->first ; o ; o = o->next) { + if (!isequipped(o) && (ismissile(o) || hasflag(o->flags, F_MISSILE))) { + int thisdam; + // better than last one? + thisdam = getthrowdam(o) + getshatterdam(o); + if ((bestwep == NULL) || (thisdam > bestdam)) { + bestwep = o; + bestdam = thisdam; + } - curwep = getweapon(lf); - if (!curwep) { - getunarmedweapon(lf, op); - curwep = op->first; + } } + return bestwep; +} + +object_t *getbestfirearm(lifeform_t *lf) { + object_t *bestgun = NULL; + object_t *o; + int bestfirespeed = -1; + + + bestgun = NULL; + for (o = lf->pack->first ; o ; o = o->next) { + // if it is a gun and we can weild it... + if (isfirearm(o) && canweild(lf, o)) { + int thisfirespeed; + thisfirespeed = getfirearmspeed(o); + if (thisfirespeed > bestfirespeed) { + bestgun = o; + bestfirespeed = thisfirespeed; + } + } + } + + return bestgun; +} + + +object_t *getbestweapon(lifeform_t *lf) { + obpile_t *op = NULL; + object_t *bestwep = NULL; + //int bestmaxdam = -999; + object_t *o; + + bestwep = getweapon(lf); + if (!bestwep) { + op = getunarmedweapon(lf, NULL); + bestwep = op->first; + } + /* if (curwep) { f = hasflag(curwep->flags, F_DAM); - bestmaxdam = f->val[1]; + //bestmaxdam = f->val[1]; } else { // no current weapon, and no unarmed weapon // anything will be better! - bestmaxdam = -999; + //bestmaxdam = -999; } - - bestwep = curwep; + */ for (o = lf->pack->first ; o ; o = o->next) { - f = hasflag(o->flags, F_DAM); // if it does damage and we can weild it... - if (f && canweild(lf, o)) { - // if its max damage is better... - if (f->val[1] > bestmaxdam) { - bestmaxdam = f->val[1]; + if (isweapon(o) && !isfirearm(o) && canweild(lf, o)) { + if (isbetterwepthan(o, bestwep)) { bestwep = o; } } } - if (bestwep == op->first) { + if (op && (bestwep == op->first)) { + // ie. use no weapon bestwep = NULL; } - - if (op->first) { - killob(op->first); + if (op) { + killobpile(op); } - free(op); return bestwep; } +int getbodyparthitchance(enum BODYPART bp) { + switch (bp) { + case BP_EYES: return 1; + case BP_HEAD: return 2; + case BP_HANDS: return 3; + case BP_FEET: return 3; + case BP_LEGS: return 4; + case BP_SHOULDERS: return 4; + case BP_BODY: return 5; + default: break; + } + return 0; // ie rings, weapon +} + char *getbodypartname(enum BODYPART bp) { switch (bp) { case BP_WEAPON: - return "weapon"; - case BP_RIGHTHAND: return "right hand"; - case BP_LEFTHAND: + case BP_SECWEAPON: return "left hand"; + case BP_RIGHTHAND: + return "right finger"; + case BP_LEFTHAND: + return "left finger"; case BP_HANDS: return "hands"; + case BP_EYES: + return "eyes"; case BP_HEAD: return "head"; case BP_BODY: return "body"; case BP_SHOULDERS: return "shoulders"; + case BP_LEGS: + return "legs"; case BP_FEET: return "feet"; } @@ -439,14 +1388,17 @@ char *getbodypartname(enum BODYPART bp) { char *getbodypartequipname(enum BODYPART bp) { switch (bp) { case BP_WEAPON: - return "n/a"; + case BP_SECWEAPON: + return "in"; // ie. 'in right hand' case BP_RIGHTHAND: case BP_LEFTHAND: case BP_HANDS: case BP_HEAD: case BP_BODY: + case BP_LEGS: case BP_FEET: return "on"; + case BP_EYES: case BP_SHOULDERS: return "over"; } @@ -463,60 +1415,572 @@ object_t *getequippedob(obpile_t *op, enum BODYPART bp) { return NULL; } -int getlfattackspeed(lifeform_t *lf) { - int speed = 0; // default to taking no time at all - just use weapon delay - flag_t *f; - f = hasflag(lf->flags, F_LFATTACKDELAY); - if (f) { - speed = f->val[0]; +object_t *getfirearm(lifeform_t *lf) { + object_t *o; + o = getequippedob(lf->pack, BP_SECWEAPON); + if (o && hasflag(o->flags, F_FIREARM)) { + return o; } - return speed; + return NULL; +} + +lifeform_t *getguntarget(lifeform_t *lf) { + flag_t *f; + f = hasflag(lf->flags, F_GUNTARGET); + if (!f) { + return NULL; + } + return findlf(NULL, f->val[0]); +} + +int getguntargetid(lifeform_t *lf) { + flag_t *f; + f = hasflag(lf->flags, F_GUNTARGET); + if (!f) { + return -1; + } + return f->val[0]; +} + + +/* +// get time to heal 1 hp +int gethealtime(lifeform_t *lf) { + int healtime; + flag_t *f; + f = lfhasflag(lf, F_HEALTIME); + if (f) { + healtime = f->val[0]; + } else { + healtime = DEF_HEALTIME; + } + return healtime; +} +*/ + +int gethearingrange(lifeform_t *lf) { + int range = 15; // deafult + return range; +} + +enum HUNGER gethungerlevel(int hunger) { + int thresh = HUNGERCONST; + if (hunger < -thresh) { + return H_STUFFED; + } else if (hunger < 0) { + return H_FULL; + } else if (hunger <= thresh) { + return H_NONE; + } else if (hunger <= (thresh*2)) { + return H_PECKISH; + } else if (hunger <= (thresh*3)) { + return H_HUNGRY; + } else if (hunger <= (thresh*4)) { + return H_VHUNGRY; + } else if (hunger <= (thresh*5)) { + return H_STARVING; + } + return H_STARVED; +} + +char *gethungername(enum HUNGER hunger, char *buf) { + switch (hunger) { + case H_STUFFED: + strcpy(buf, "stuffed"); + break; + case H_FULL: + strcpy(buf, "full"); + break; + case H_NONE: + strcpy(buf, "not hungry"); + break; + case H_PECKISH: + strcpy(buf, "peckish"); + break; + case H_HUNGRY: + strcpy(buf, "hungry"); + break; + case H_VHUNGRY: + strcpy(buf, "very hungry"); + break; + case H_STARVING: + strcpy(buf, "starving"); + break; + case H_STARVED: + strcpy(buf, "starved"); + break; + } + return buf; +} + +int gethungerval(lifeform_t *lf) { + flag_t *f; + f = hasflag(lf->flags, F_HUNGER); + if (f) { + return f->val[0]; + } + return 0; +} + +job_t *getjob(lifeform_t *lf) { + flag_t *f; + + // no job if polymorphed + if (lfhasflag(lf, F_POLYMORPHED)) { + return NULL; + } + + f = hasflag(lf->flags, F_JOB); + if (f) { + return findjob(f->val[0]); + } + return NULL; +} + +int getlfaccuracy(lifeform_t *lf) { + obpile_t *op = NULL; + object_t *wep; + int acc = 0; + // get weapon + wep = getweapon(lf); + if (wep) { + acc = getobaccuracy(wep); + } else { + // ie. unarmed + op = getunarmedweapon(lf, NULL); + + if (op->first) { + wep = op->first; + acc = getobaccuracy(wep); + } else { + // cannot attack + acc = 0; + } + killobpile(op); + } + + // modify with dexterity + acc += getstatmod(lf, A_DEX); + + // modify for blindness + if (isblind(lf)) { + acc -= 50; + } + + + if (acc < 0) acc = 0; + return acc; +} + + +enum LFCONDITION getlfcondition(lifeform_t *lf) { + float hp,maxhp; + int pct; + hp = lf->hp; + maxhp = lf->maxhp; + pct = (int)((hp / maxhp) * 100.0); + if (pct == 100) { + return C_HEALTHY; + } else if (pct >= 80) { + return C_HURT; + } else if (pct >= 50) { + return C_WOUNDED; + } else if (pct >= 25) { + return C_SERIOUS; + } else if (pct > 0) { + return C_CRITICAL; + } + // ie. <= 0 + return C_DEAD; +} + + +int getnightvisrange(lifeform_t *lf) { + int range = 1; // default + flag_t *f; + + f = lfhasflag(lf, F_SEEINDARK); + if (f) { + range = getvisrange(lf); + } + + return range; +} + +char *getlfconditionname(enum LFCONDITION cond) { + switch (cond) { + case C_CRITICAL: + return "critically wounded"; + case C_SERIOUS: + return "seriously wounded"; + case C_WOUNDED: + return "wounded"; + case C_HURT: + return "hurt"; + case C_HEALTHY: + return "healthy"; + case C_DEAD: + return "dead"; + } + return "?unknown condition?"; +} + +char *getseenlfconditionname(lifeform_t *lf, lifeform_t *viewer) { + enum IQBRACKET iqb; + enum LFCONDITION cond,cutoff; + + iqb = getiqname(getattr(viewer, A_IQ), NULL); + // figure out health cutoff - condition > cutoff gets no description + if (iqb >= IQ_AVERAGE) { + cutoff = C_HURT; // ie. no cutoff + } else if (iqb >= IQ_DOPEY) { + cutoff = C_WOUNDED; + } else if (iqb >= IQ_ANIMAL) { + cutoff = C_SERIOUS; + } else { + cutoff = C_DEAD; + } + cond = getlfcondition(lf); + if (cond > cutoff) { + return ""; + } + return getlfconditionname(cond); +} + +enum MATERIAL getlfmaterial(lifeform_t *lf) { + if (lf->race->id == R_DANCINGWEAPON) { + object_t *wep; + wep = getweapon(lf); + if (wep) { + return wep->material->id; + } + } + + return lf->race->material->id; +} + +float getmaxcarryweight(lifeform_t *lf) { + float max; + float mod; + enum STRBRACKET sbrack; + + sbrack = getstrname(getattr(lf, A_STR), NULL); + switch (sbrack) { + case ST_HELPLESS: + mod = 0.1; break; + case ST_FEEBLE: + mod = 0.25; break; + case ST_VWEAK: + mod = 0.5; break; + case ST_WEAK: + mod = 0.75; break; + case ST_AVERAGE: + mod = 1; break; // your body weight + case ST_STRONG: + mod = 1.25; break; + case ST_MIGHTY: + mod = 1.5; break; + case ST_TITANIC: + mod = 2; break; // twice your own body weight + } + + max = getlfweight(lf, B_NOOBS) * mod; + + return max; +} + +float getmaxliftweight(lifeform_t *lf) { + float max; + float mod; + enum STRBRACKET sbrack; + + sbrack = getstrname(getattr(lf, A_STR), NULL); + switch (sbrack) { + case ST_HELPLESS: + mod = 0.05; break; + case ST_FEEBLE: + mod = 0.1; break; + case ST_VWEAK: + mod = 0.25; break; + case ST_WEAK: + mod = 0.4; break; + case ST_AVERAGE: + mod = 0.5; break; // half your body weight + case ST_STRONG: + mod = 0.75; break; + case ST_MIGHTY: + mod = 1; break; // your own body weight + case ST_TITANIC: + mod = 1.5; break; // more than your own body weight + } + + max = getlfweight(lf, B_NOOBS) * mod; + + return max; +} + +float getmaxpushweight(lifeform_t *lf) { + float max; + max = getlfweight(lf, B_NOOBS) * 2; // twice your body weight + return max; +} + +// TODO: take darkness into account +int getvisrange(lifeform_t *lf) { + int range; + flag_t *f; + + if (isblind(lf)) { + return 0; + } + + f = lfhasflag(lf, F_VISRANGE); + if (f) { + range = f->val[0]; + } else { + range = MAXVISRANGE; + } + + // modifications? + for (f = lf->flags->first ; f ; f = f->next) { + if (f->id == F_VISRANGEMOD) { + range += f->val[0]; + } + } + + if (range < 0) range = 0; + return range; } int getmovespeed(lifeform_t *lf) { - int speed = SPEED_MOVE; + int speed = 0; flag_t *f; - f = hasflag(lf->flags, F_MOVESPEED); + + f = lfhasflag(lf, F_MOVESPEED); if (f) { speed = f->val[0]; + } else { + speed = SPEED_MOVE; // default } + + // modifier? + for (f = lf->flags->first ; f ; f = f->next ){ + if (f->id == F_SLOWMOVE) { + speed += f->val[0]; + } else if (f->id == F_FASTMOVE) { + speed -= f->val[0]; + } + } + + switch (isburdened(lf)) { + case BR_NONE: + break; + case BR_BURDENED: + speed += 5; + break; + case BR_OVERLOADED: + speed += 10; + break; + } + return speed; } +char *getmoveverb(lifeform_t *lf) { + if (lfhasflag(lf, F_FLYING)) { + return "fly"; + } + + return "walk"; +} char *getlfname(lifeform_t *lf, char *buf) { if (lf == player) { sprintf(buf, "you"); } else { - sprintf(buf, "the %s",lf->race->name); + if (isblind(player)) { + sprintf(buf, "something"); + } else { + if (lf->race->id == R_DANCINGWEAPON) { + object_t *wep; + wep = getweapon(lf); + if (wep) { + char obname[BUFLEN]; + real_getobname(wep, obname, 1, B_FALSE, B_FALSE, B_FALSE); + sprintf(buf, "the %s",noprefix(obname)); + } else { + sprintf(buf, "the %s",lf->race->name); + } + } else { + sprintf(buf, "the %s",lf->race->name); + } + } } return buf; } -race_t *getrandomlf(map_t *map, int *level) { - enum RARITY rarity; +char *getlfnamea(lifeform_t *lf, char *buf) { + if (lf == player) { + sprintf(buf, "you"); + } else { + sprintf(buf, "%s %s", + isvowel(lf->race->name[0]) ? "an" : "a", + lf->race->name); + } + return buf; +} + +enum LFSIZE getlfsize(lifeform_t *lf) { + flag_t *f; + f = hasflag(lf->flags, F_SIZE); + assert(f); + return f->val[0]; +} + +float getlfweight(lifeform_t *lf, int withobs) { + float weight = 0; + weight = lf->race->weight; + + if (lfhasflag(lf, F_OBESE)) { + weight *= 2; + } + + if (withobs) { + weight += getobpileweight(lf->pack); + } + return weight; +} + +int getspellspeed(lifeform_t *lf) { + int speed = 0; + flag_t *f; + + f = lfhasflag(lf, F_SPELLSPEED); + if (f) { + speed = f->val[0]; + } else { + f = lfhasflag(lf, F_MOVESPEED); + if (f) { + speed = f->val[0]; + } else { + speed = SPEED_MOVE; // default + } + } + + // don't use movement speed modifier! + return speed; +} + +char *getplayername(char *buf) { + flag_t *f; + f = hasflag(player->flags, F_NAME); + if (f) { + strcpy(buf, f->text); + } else{ + // should never happen! + strcpy(buf, ""); + } + + return buf; +} + +char *getplayernamefull(char *buf) { + char pname[BUFLEN]; + job_t *j; + + getplayername(pname); + + j = getjob(player); + if (j) { + sprintf(buf, "%s the %s", pname, j->name); + } else { + sprintf(buf, "%s the %s", pname, player->race->name); + } + return buf; +} + + +object_t *getrandomarmour(lifeform_t *lf) { + object_t *o; + flag_t *f; + object_t *poss[MAXBODYPARTS]; + object_t **hitposition; + int hitchance[MAXBODYPARTS]; + int nposs = 0; + int maxroll = 0; + int i,n,idx; + int sel; + int anyfound = B_FALSE; + + // make a list of all valid armour + for (o = lf->pack->first ; o ; o = o->next) { + if (hasflag(o->flags, F_ARMOURRATING)) { + f = hasflag(o->flags, F_EQUIPPED); + if (f) { + anyfound = B_TRUE; + poss[nposs] = o; + if (hasflag(o->flags, F_SHIELD)) { + hitchance[nposs] = getbodyparthitchance(BP_BODY); + } else { + hitchance[nposs] = getbodyparthitchance(f->val[0]); + } + maxroll += hitchance[nposs]; + nposs++; + } + } + } + + if (anyfound == B_FALSE) return NULL; + + // now figure out chances of each one getting hit + hitposition = malloc(maxroll * sizeof(object_t *)); + idx = 0; + for (i = 0; i < nposs; i++) { + for (n = 0; n < hitchance[i]; n++) { + hitposition[idx] = poss[i]; + idx++; + } + } + + sel = rnd(0, maxroll-1); + o = hitposition[sel]; + + free(hitposition); + + return o; +} + +/* +int getrandommonlevel(int depth) { + int lev; + int max; + max = (depth / 3); + if (max < 1) max = 1; + lev = rnd(1,max); + return lev; +} +*/ + +race_t *getrandomrace(map_t *map) { + //int rarity; race_t *r; - int roll; race_t *poss[MAXRANDOMLFCANDIDATES]; int nposs = 0; int selidx; - int amt; - flag_t *f; - int db = B_FALSE; + int db = B_TRUE; + int depth; + int raritymin,raritymax; // determine rarity of lf to generate - rarity = RR_FREQUENT; - - // start with 'frequent'ly appearing items - // roll a die. 30% chance of getting rarer. - // stop when we fail the die roll. - roll = rnd(1,100); - while (roll < 30) { - rarity++; - if (rarity == RR_VERYRARE) break; - roll = rnd(1,100); + if (map) { + depth = map->depth; + } else { + depth = rnd(1,MAXDEPTH); } - if (db) dblog("adding random lf of rarity %d\n",rarity); + + getrarity(depth, &raritymin, &raritymax, 5); + + if (db) dblog("finding random lf with rarity val %d-%d\n",raritymin,raritymax); // try to find a lf of this type which will @@ -524,8 +1988,28 @@ race_t *getrandomlf(map_t *map, int *level) { nposs = 0; while (nposs == 0) { for (r = firstrace ; r ; r = r->next) { - if (hasflagval(r->flags, F_RARITY, map->habitat, rarity, NA, NULL) || - hasflagval(r->flags, F_RARITY, H_ALL, rarity, NA, NULL) ) { + int valid = B_FALSE; + flag_t *rarflag = NULL; + + // correct rarity? + rarflag = hasflagval(r->flags, F_RARITY, H_ALL, NA, NA, NULL); + if (!rarflag) { + if (map) { + rarflag = hasflagval(r->flags, F_RARITY, map->habitat, NA, NA, NULL); + } else { + rarflag = hasflagval(r->flags, F_RARITY, NA, NA, NA, NULL); + } + } + + if (rarflag) { + if ((rarflag->val[1] >= raritymin) && (rarflag->val[1] <= raritymax)) { + valid = B_TRUE; + } + } + + + if (valid) { + if (db) dblog("-> possibility: %s, rarity=%d",r->name, rarflag->val[1]); poss[nposs] = r; nposs++; if (nposs >= MAXRANDOMLFCANDIDATES) break; @@ -535,15 +2019,16 @@ race_t *getrandomlf(map_t *map, int *level) { // nothing found? if (nposs == 0) { // already at lowest rarity? - if (rarity == RR_FREQUENT) { + if ((raritymax >= 100) && (raritymin <= 0)) { // give up if (db) dblog("no possible lf at all! giving up."); return NULL; - } else { - // lower rarity and try again - rarity--; - if (db) dblog("no possible lfs like this. trying again with rarity %d\n",rarity); - } + } + + // expand range and try again + raritymax += 10; if (raritymax > 100) raritymax = 100; + raritymin -= 10; if (raritymin < 0) raritymin = 0; + if (db) dblog("no possible lfs like this. trying again with rarity %d-%d\n",raritymin,raritymax); } } @@ -551,42 +2036,202 @@ race_t *getrandomlf(map_t *map, int *level) { // pick a random lf from our possiblities selidx = rnd(0,nposs-1); r = poss[selidx]; - /* TODO: - // handle lf which appear in multiples (ie. rocks) - f = hasflag(ot->flags, F_NUMAPPEAR); - if (f) { - amt = rnd(f->val[0], f->val[1]); - } else { - amt = 1; - } - if (db) sprintf(buf, "%d %s", amt, ot->name); - */ - // TODO: should select a level based on map difficulty/depth - if (level) { - *level = rnd(1,3); + return r; +} + + +race_t *getreallyrandomrace(void) { + race_t **poss; + race_t *r; + int nposs = 0; + int sel; + int count = 0; + + // count races + for (r = firstrace ; r ; r = r->next) { + count++; } - + + + poss = malloc(count * sizeof(race_t *)); + + for (r = firstrace ; r ; r = r->next) { + if (appearsrandomly(r->id)) { + poss[nposs] = r; + nposs++; + } + } + sel = rnd(0,nposs-1); + r = poss[sel]; + free(poss); return r; } char *getspeedname(int speed, char *buf) { sprintf(buf, "unknownspeed"); - switch (speed) { - case SP_GODLIKE: sprintf(buf, "insanely fast"); break; - case SP_ULTRAFAST: sprintf(buf, "extremely fast"); break; - case SP_VERYFAST: sprintf(buf, "very fast"); break; - case SP_FAST: sprintf(buf, "fast"); break; - case SP_NORMAL: sprintf(buf, "normal"); break; - case SP_SLOW: sprintf(buf, "slow"); break; - case SP_VERYSLOW: sprintf(buf, "very slow"); break; - case SP_ULTRASLOW: sprintf(buf, "extremely slow"); break; - case SP_SLOWEST: sprintf(buf, "insanely slow"); break; - + if (speed <= SP_GODLIKE) { + sprintf(buf, "insanely fast"); + } else if (speed <= SP_ULTRAFAST) { + sprintf(buf, "extremely fast"); + } else if (speed <= SP_VERYFAST) { + sprintf(buf, "very fast"); + } else if (speed <= SP_FAST) { + sprintf(buf, "fast"); + } else if (speed <= SP_NORMAL) { + sprintf(buf, "normal"); + } else if (speed <= SP_SLOW) { + sprintf(buf, "slow"); + } else if (speed <= SP_VERYSLOW) { + sprintf(buf, "very slow"); + } else if (speed <= SP_ULTRASLOW) { + sprintf(buf, "extremely slow"); + } else { + sprintf(buf, "insanely slow"); } return buf; } +// ie. intelligence level: xxx +enum IQBRACKET getiqname(int iq, char *buf) { + if (iq <= 0) { + if (buf) strcpy(buf, "mindless"); + return IQ_MINDLESS; + } else if (iq == 1) { + if (buf) strcpy(buf, "vegetable"); + return IQ_VEGETABLE; + } else if (iq <= 3) { + if (buf) strcpy(buf, "animal"); + return IQ_ANIMAL; + } else if (iq <= 6) { + if (buf) strcpy(buf, "dim-witted"); + return IQ_DIMWITTED; + } else if (iq <= 9) { + if (buf) strcpy(buf, "dopey"); + return IQ_DOPEY; + } else if (iq <= 12) { + if (buf) strcpy(buf, "average"); + return IQ_AVERAGE; + } else if (iq <= 15) { + if (buf) strcpy(buf, "smart"); + return IQ_SMART; + } else if (iq <= 17) { + if (buf) strcpy(buf, "enlightened"); + return IQ_ENLIGHTENED; + } + + if (buf) strcpy(buf, "genius"); + return IQ_GENIUS; +} + +enum DEXBRACKET getdexname(int dex, char *buf) { + if (dex <= 0) { + if (buf) strcpy(buf, "incompetent"); + return DX_INCOMPETENT; + } else if (dex <= 2) { + if (buf) strcpy(buf, "oafish"); + return DX_OAFISH; + } else if (dex <= 4) { + if (buf) strcpy(buf, "inept"); + return DX_INEPT; + } else if (dex <= 6) { + if (buf) strcpy(buf, "clumsy"); + return DX_CLUMSY; + } else if (dex <= 8) { + if (buf) strcpy(buf, "awkward"); + return DX_AWKWARD; + } else if (dex == 9) { + if (buf) strcpy(buf, "average"); + return DX_AVERAGE; + } else if (dex <= 11) { + if (buf) strcpy(buf, "dextrous"); + return DX_DEXTROUS; + } else if (dex <= 13) { + if (buf) strcpy(buf, "nimble"); + return DX_NIMBLE; + } else if (dex <= 15) { + if (buf) strcpy(buf, "agile"); + return DX_AGILE; + } else if (dex <= 17) { + if (buf) strcpy(buf, "swift"); + return DX_SWIFT; + } + + if (buf) strcpy(buf, "supersonic"); + return DX_SUPERSONIC; +} + +// returns a pct addition for things like: +// accuracy, evasion, lockpicking +float getstatmod(lifeform_t *lf, enum ATTRIB att) { + float mod = 0; + float base; + // <9 = penalty + // 9 = average + // >9 = bonus up to 50% + base = getattr(lf, att) - 9; + mod = (int)((base / 9.0) * 50.0); + return mod; +} + +enum STRBRACKET getstrname(int str, char *buf) { + if (str <= 0) { + if (buf) strcpy(buf, "helpless"); + return ST_HELPLESS; + } else if (str <= 3) { + if (buf) strcpy(buf, "feeble"); + return ST_FEEBLE; + } else if (str <= 6) { + if (buf) strcpy(buf, "very weak"); + return ST_VWEAK; + } else if (str <= 8) { + if (buf) strcpy(buf, "weak"); + return ST_WEAK; + } else if (str <= 12) { + if (buf) strcpy(buf, "average"); + return ST_AVERAGE; + } else if (str <= 15) { + if (buf) strcpy(buf, "strong"); + return ST_STRONG; + } else if (str <= 17) { + if (buf) strcpy(buf, "mighty"); + return ST_MIGHTY; + } + + if (buf) strcpy(buf, "titanic"); + return ST_TITANIC; +} + +// get throw speed (ie. damage multiplier) +// based on strength. +int getthrowspeed(int str) { + enum STRBRACKET sb; + int speed = 0; + sb = getstrname(str, NULL); + switch (sb) { + case ST_HELPLESS: + case ST_FEEBLE: + speed = 0; + break; + case ST_VWEAK: + case ST_WEAK: + speed = 1; + break; + case ST_AVERAGE: + case ST_STRONG: + speed = 2; + break; + case ST_MIGHTY: + speed = 3; + break; + case ST_TITANIC: + speed = 4; + break; + // gun is 10 + } + return speed; +} + object_t *getweapon(lifeform_t *lf) { object_t *o; flag_t *f; @@ -599,6 +2244,502 @@ object_t *getweapon(lifeform_t *lf) { return NULL; } +int getunarmedattackspeed(lifeform_t *lf) { + int speed = SPEED_ATTACK; + flag_t *f; + f = lfhasflag(lf, F_UNARMEDSPEED); + if (f) { + speed = f->val[0]; + } + return speed; +} + +long getxpforlev(int level) { + long needxp = 0; + int i; + + // no xp needed for level 1 + for (i = 0; i < level - 1; i++) { + needxp += (10 * pow(2,i)); + } + return needxp; +} + +void givejob(lifeform_t *lf, enum JOB jobid) { + job_t *j; + flag_t *f; + int i; + int rollhp = B_FALSE, rollmp = B_FALSE; + + // give the job + addflag(lf->flags, F_JOB, jobid, NA, NA, NULL); + j = findjob(jobid); + + // override hitdice from race + if (hasflag(j->flags, F_HITDICE)) { + rollhp = B_TRUE; + f = lfhasflag(lf, F_HITDICE); + if (f) { + killflag(f); + } + } + // override mpdice from race + if (hasflag(j->flags, F_MPDICE)) { + rollmp = B_TRUE; + f = lfhasflag(lf, F_MPDICE); + if (f) { + killflag(f); + } + } + + // give start obs from it + givestartobs(lf, j->flags); + + + // now inherit all flags except startob ones + for (f = j->flags->first ; f ; f = f->next) { + switch (f->id) { + case F_STARTOB: + case F_STARTOBDT: + case F_STARTOBCLASS: + break; + default: + addflag_real(lf->flags, f->id, f->val[0], f->val[1], f->val[2], f->text, FROMJOB,B_TRUE); + break; + } + } + + if (rollhp) { + lf->maxhp = 0; + for (i = 0; i < lf->level; i++) { + lf->maxhp += rollhitdice(lf); + assert(lf->maxhp > 0); + } + lf->hp = lf->maxhp; + } + + // override mp from race + if (rollmp) { + f = hasflag(lf->flags, F_MPDICE); + if (f) { + lf->maxmp = f->val[0] * 4; + for (i = 0; i < lf->level-1; i++) { + lf->maxmp += rollmpdice(lf); + } + lf->mp = lf->maxmp; + } + } + + autoweild(lf); +} + + +void giveobflags(lifeform_t *lf, object_t *o, enum FLAG whattype) { + int flagsknown = 0, flagsfound = 0; + flag_t *f,*newflag; + + int held, equipped,activated; + int lifetimeval; + + if (o->pile->owner == lf) held = B_TRUE; + + if (held && hasflag(o->flags, F_EQUIPPED)) { + equipped = B_TRUE; + } + if (held && hasflag(o->flags, F_ACTIVATED)) { + activated = B_TRUE; + } + + if (whattype == F_EQUIPCONFER) { + if (!equipped) { + return; + } else { + lifetimeval = FROMOBEQUIP; + } + } else if (whattype == F_HOLDCONFER) { + if (!held) { + return; + } else { + lifetimeval = FROMOBHOLD; + } + } else if (whattype == F_ACTIVATECONFER) { + if (!activated) { + return; + } else { + lifetimeval = FROMOBACTIVATE; + } + } + + for (f = o->flags->first ; f ; f = f->next) { + if (f->id == whattype) { + int known = B_FALSE; + int addit = B_FALSE; + + if (f->val[2] == IFKNOWN) { + // only confer if known + if (isknown(o)) { + addit = B_TRUE; + } + } else { + addit = B_TRUE; + } + + if (isknown(o)) { + known = B_TRUE; + } + + if (addit) { + newflag = addflag_real(lf->flags, f->val[0], f->val[1], f->val[2], NA, f->text, lifetimeval, known); + newflag->obfrom = o->id; // remember which ob it was from + if (newflag->known) { // ie. if we found out about it through it being announced + flagsknown++; + } + flagsfound++; + } + } + } + + // if all conferred flags now known, object is known + if (flagsfound && (flagsknown == flagsfound)) { + makeknown(o->type->id); + } +} + + +// give start objects from a particular flagpile +void givestartobs(lifeform_t *lf, flagpile_t *fp) { + object_t *o; + flag_t *f; + char buf[BUFLEN]; + + // give start objects and id them + for (f = fp->first ; f ; f = f->next) { + o = NULL; + // if this is the player, DONT inherit STARTOB flags from race + if (lf->controller == C_PLAYER) { + if (f->lifetime == FROMRACE) { + continue; + } + } + if (f->id == F_STARTOB) { + if (rnd(1,100) <= f->val[0]) { + o = addob(lf->pack, f->text); + } + } else if (f->id == F_STARTOBDT) { + if (rnd(1,100) <= f->val[0]) { + while (!getrandomobwithdt(lf->cell->map, f->val[1], buf)); + //assert(strlen(buf) > 0); + o = addob(lf->pack, buf); + } + } else if (f->id == F_STARTOBCLASS) { + if (rnd(1,100) <= f->val[0]) { + while (!getrandomobwithclass(lf->cell->map, f->val[1], buf)); + //if (strlen(buf) <= 0); + o = addob(lf->pack, buf); + } + } + if (o) { + if (isplayer(lf)) { + identify(o); + } + } + } +} + +job_t *hasjob(lifeform_t *lf, enum JOB job) { + job_t *j = NULL; + if (lfhasflagval(lf, F_JOB, job, NA, NA, NULL)) { + j = findjob(job); + } + return j; +} + + +// does the lf has this flag, either internally or +// conferred by a held/equipped object? +flag_t *lfhasflag(lifeform_t *lf, enum FLAG fid) { + flag_t *f; + + // note: we check conferred flags first because we want + // these to override ones direclty on the player. + + // does a held object give us this flag? + /* + o = hasobwithflagval(lf->pack, F_HOLDCONFER, fid, NA, NA, NULL); + if (o) { + // return the flag, not the objcet + f = hasflagval(o->flags, F_HOLDCONFER, fid, NA, NA, NULL); + if (f) return f; + } + + for (o = lf->pack->first ; o ; o = o->next) { + f = hasflagval(o->flags, F_HOLDCONFER, fid, NA, NA, NULL); + if (f) { + if (f->val[2] == B_IFIDENT) { + if (isknown(o)) return f; + } else { + return f; + } + } + } + */ + + /* + // does an equipped object give us this flag? + for (o = lf->pack->first ; o ; o = o->next) { + if (hasflag(o->flags, F_EQUIPPED)) { + f = hasflagval(o->flags, F_EQUIPCONFER, fid, NA, NA, NULL); + if (f) { + if (f->val[2] == B_IFIDENT) { + if (isknown(o)) return f; + } else { + return f; + } + } + } + } + */ + + // do we have this flag directly? + f = hasflag(lf->flags, fid); + if (f) return f; + return NULL; +} + +flag_t *lfhasflagval(lifeform_t *lf, enum FLAG fid, int val0, int val1, int val2, char *text) { + flag_t *f; + f = hasflagval(lf->flags, fid, val0, val1, val2, text); + if (f) return f; + + // does a held object give us this flag? + /* + o = hasobwithflagval(lf->pack, F_HOLDCONFER, fid, val0, val1, text); + if (o) { + // return the flag, not the objcet + f = hasflagval(o->flags, F_HOLDCONFER, fid, val0, val1, text); + if (f) return f; + } + + for (o = lf->pack->first ; o ; o = o->next) { + f = hasflagval(o->flags, F_HOLDCONFER, fid, val0, val1, text); + if (f) { + if (f->val[2] == B_IFIDENT) { + if (isknown(o)) return f; + } else { + return f; + } + } + } + */ + + // does an equipped object give us this flag? + /* + for (o = lf->pack->first ; o ; o = o->next) { + if (hasflag(o->flags, F_EQUIPPED)) { + f = hasflagval(o->flags, F_EQUIPCONFER, fid, val0, val1, NULL); + if (f) { + if (f->val[2] == B_IFIDENT) { + if (isknown(o)) return f; + } else { + return f; + } + } + } + } + */ + return NULL; +} + +flag_t *lfhasknownflag(lifeform_t *lf, enum FLAG fid) { + flag_t *f; + + // note: we check conferred flags first because we want + // these to override ones direclty on the player. + + /* + + for (o = lf->pack->first ; o ; o = o->next) { + if (isknown(o)) { + f = hasflagval(o->flags, F_HOLDCONFER, fid, NA, NA, NULL); + if (f && f->known) { + if (f->val[2] == B_IFIDENT) { + if (isknown(o)) return f; + } else { + return f; + } + } + } + } + + */ + // does an equipped object give us this flag? + /* + for (o = lf->pack->first ; o ; o = o->next) { + if (isknown(o)) { + if (hasflag(o->flags, F_EQUIPPED)) { + f = hasflagval(o->flags, F_EQUIPCONFER, fid, NA, NA, NULL); + if (f && f->known) { + if (f->val[2] == B_IFIDENT) { + if (isknown(o)) return f; + } else { + return f; + } + } + } + } + } + */ + + // do we have this flag directly? + f = hasflagknown(lf->flags, fid); + if (f && f->known) return f; + return NULL; +} + +flag_t *lfhasknownflagval(lifeform_t *lf, enum FLAG fid, int val0, int val1, int val2, char *text) { + flag_t *f; + + /* + for (o = lf->pack->first ; o ; o = o->next) { + if (isknown(o)) { + f = hasflagval(o->flags, F_HOLDCONFER, fid, val0, val1, text); + if (f && f->known) { + if (f->val[2] == B_IFIDENT) { + if (isknown(o)) return f; + } else { + return f; + } + } + } + } + + // does an equipped object give us this flag? + for (o = lf->pack->first ; o ; o = o->next) { + if (isknown(o)) { + if (hasflag(o->flags, F_EQUIPPED)) { + f = hasflagval(o->flags, F_EQUIPCONFER, fid, val0, val1, NULL); + if (f && f->known) { + if (f->val[2] == B_IFIDENT) { + if (isknown(o)) return f; + } else { + return f; + } + } + } + } + } + */ + + // got the flag directly? + f = hasflagvalknown(lf->flags, fid, val0, val1, val2, text); + if (f && f->known) return f; + return NULL; +} + +// return true on failure +int lockpick(lifeform_t *lf, object_t *target, object_t *device) { + int successchance; + int roll; + flag_t *f; + char lfname[BUFLEN]; + char obname[BUFLEN]; + int faileffect; + + getlfname(lf,lfname); + getobname(target,obname, 1); + + f = hasflag(device->flags, F_PICKLOCKS); + assert(f); + successchance = f->val[0] + getstatmod(lf, A_DEX); + faileffect = f->val[1]; + + // take time + taketime(lf, getmovespeed(lf) ); + + roll = rnd(1,100); + if (roll <= successchance) { + // success! + // announce + if (isplayer(lf) || haslos(player, lf->cell)) { + msg("%s unlock%s %s.",lfname, isplayer(lf) ? "" : "s", obname); + } + // xp + gainxp(lf, 1); + // unlock it + killflagsofid(target->flags, F_LOCKED); + } else { + // failed! + if (faileffect == B_DIEONFAIL) { + char devname[BUFLEN]; + getobname(device,devname, 1); + // kill object + if (isplayer(lf)) { + msg("Your %s breaks!",noprefix(devname)); + } else if (haslos(player, lf->cell)) { + msg("%s%s %s breaks!",lfname, getpossessive(lfname), noprefix(devname)); + } + removeob(device, 1); + } else if (faileffect == B_BLUNTONFAIL) { + char devname[BUFLEN]; + getobname(device,devname, 1); + if (isplayer(lf)) { + msg("Your %s seems duller!",noprefix(devname)); + } else if (haslos(player, lf->cell)) { + msg("%s%s %s seems duller!",lfname, getpossessive(lfname), noprefix(devname)); + } + addflag(device->flags, F_BONUS, -1, NA, NA, NULL); + } else { + if (isplayer(lf) || haslos(player, lf->cell)) { + msg("%s fail%s to unlock %s.",lfname, isplayer(lf) ? "" : "s", obname); + } + } + return B_TRUE; + } + return B_FALSE; +} + +void loseobflags(lifeform_t *lf, object_t *o, int kind) { + flag_t *f,*ff,*nextff; + for (f = o->flags->first ; f ; f = f->next) { + int checkthis = B_FALSE; + if (kind == ALLCONFERRED) { + if ((f->id == F_EQUIPCONFER) || (f->id == F_HOLDCONFER) || (f->id == F_ACTIVATECONFER)) { + checkthis = B_TRUE; + } + } else { + if (f->id == kind) { + checkthis = B_TRUE; + } + } + if (checkthis) { + int lifetimecheck; + // probably don't need this now that we are using + // flag->obfrom... + if (f->id == F_EQUIPCONFER) { + lifetimecheck = FROMOBEQUIP; + } else if (f->id == F_ACTIVATECONFER) { + lifetimecheck = FROMOBACTIVATE; + } else { // ie. F_HOLDCONFER + lifetimecheck = FROMOBHOLD; + } + + // not using killflagsofid() because we only want + // to kill flags which came from this object + for (ff = lf->flags->first ; ff ; ff = nextff) { + nextff = ff->next; + if ( (ff->id == f->val[0]) && + (ff->val[0] == f->val[1]) && + (ff->val[1] == f->val[2]) && + (ff->lifetime == lifetimecheck) ) { + if (ff->obfrom == o->id) { + killflag(ff); + } + } + } + } + } +} + int haslof(lifeform_t *viewer, cell_t *dest) { int deltax, deltay; int numpixels; @@ -606,23 +2747,30 @@ int haslof(lifeform_t *viewer, cell_t *dest) { int dinc1,dinc2,xinc1,xinc2,yinc1,yinc2; int xinc,yinc,dinc; int i; - int x1,y1,dir; + int x1,y1; int x; int y; - int maxvisrange; - int modmaxvisrange; - int xray = B_FALSE; - int wentuphill = B_FALSE; - int origheight; - int shopwall; + //int maxvisrange; + //int lightrange; + //int xray = 0; + //int wentuphill = B_FALSE; + //int origheight; int x2,y2; map_t *map; - // must have line of sight to fire... - if (!haslos(viewer, dest)) return B_FALSE; + reason = E_OK; - if (viewer->cell->map != dest->map) return B_FALSE; + // must have line of sight to fire... + if (!haslos(viewer, dest)) { + reason = E_NOLOS; + return B_FALSE; + } + + if (viewer->cell->map != dest->map) { + reason = E_NOLOS; + return B_FALSE; + } map = dest->map; @@ -674,11 +2822,15 @@ int haslof(lifeform_t *viewer, cell_t *dest) { for (i = 0; i < numpixels ; i++) { cell_t *cell; + object_t *blockob; + /* + // we _DO_ need to move out of last one for line of fire. // don't need to move out of the last one if ((x == x2) && (y == y2)) { break; } + */ if (d < 0) { xinc = xinc1; @@ -693,8 +2845,26 @@ int haslof(lifeform_t *viewer, cell_t *dest) { // solid cells stop lof cell = getcellat(map, x, y); if (cell->type->solid) { + reason = E_NOLOF; return B_FALSE; } + // certain objects block lof + blockob = hasobwithflag(cell->obpile, F_BLOCKSTHROW); + if (blockob) { + int blocked = B_TRUE; // default + int isopen; + if (isdoor(blockob, &isopen)) { + if (isopen) { + // open doors don't block line of fire + blocked = B_FALSE; + } + } + + if (blocked) { + reason = E_NOLOF; + return B_FALSE; + } + } // move to next cell d += dinc; @@ -713,20 +2883,27 @@ int haslos(lifeform_t *viewer, cell_t *dest) { int dinc1,dinc2,xinc1,xinc2,yinc1,yinc2; int xinc,yinc,dinc; int i; - int x1,y1,dir; + int x1,y1; int x; int y; int maxvisrange; - int modmaxvisrange; - int xray = B_FALSE; - int wentuphill = B_FALSE; - int origheight; - int shopwall; - + int nightvisrange; + int xray = 0; + //int wentuphill = B_FALSE; + //int origheight; + //int shopwall; + flag_t *f; int x2,y2; map_t *map; + if (!dest) return B_FALSE; + + // let the player see when dead, otherwise the screen wil + // go black when "You die" appears. + if (isdead(viewer) && !isplayer(viewer)) return B_FALSE; + if (viewer->cell->map != dest->map) return B_FALSE; + map = dest->map; @@ -736,11 +2913,12 @@ int haslos(lifeform_t *viewer, cell_t *dest) { y2 = dest->y; - /* - if (hasproplf(viewer, P_XRAYVISION)) { - xray = getproplf(viewer, P_XRAYVISION); + f = hasflag(viewer->flags, F_XRAYVIS); + if (f) { + xray = f->val[0]; + } else { + xray = 0; } - */ deltax = (x2 - x1); @@ -753,6 +2931,11 @@ int haslos(lifeform_t *viewer, cell_t *dest) { //if (viewer->controller == C_HUMAN) wreck->mazelev[z].maze[y2*MAZEW+x2].known = B_PERM; return B_TRUE; } + // can't see if you're blind + if (lfhasflag(viewer, F_BLIND)) { + return B_FALSE; + } + /* if (hasproplf(viewer, P_BLINDED)) { @@ -792,13 +2975,14 @@ int haslos(lifeform_t *viewer, cell_t *dest) { x = x1; y = y1; //maxvisrange = getvisrange(viewer, B_LIGHTDOESNTMATTER); - maxvisrange = UNLIMITED; + maxvisrange = getvisrange(viewer); + nightvisrange = getnightvisrange(viewer); /* if (hasproplf(viewer, P_SEEINDARK) || wreck->mazelev[viewer->z].lightlevel >= 100) { - modmaxvisrange = maxvisrange; + lightrange = maxvisrange; } else { - modmaxvisrange = getvisrange(viewer, B_LIGHTMATTERS); + lightrange = getvisrange(viewer, B_LIGHTMATTERS); } */ @@ -811,35 +2995,26 @@ int haslos(lifeform_t *viewer, cell_t *dest) { } } - // outside our modified vision range, and not lit - /* - if (modmaxvisrange != UNLIMITED) { - if (getdistance(x1,y1,x2,y2) > modmaxvisrange) { - if (!xyislit(x2,y2,viewer->z)) { + // outside the range of our light, and not lit + if (nightvisrange != UNLIMITED) { + if (getcelldist(viewer->cell, dest) > nightvisrange) { + if (!islit(dest)) { return B_FALSE; } } } - */ //shopwall = B_FALSE; for (i = 0; i < numpixels ; i++) { cell_t *cell; - // if we went uphill, stop here - /* - if (wentuphill) { - return B_FALSE; - } - */ - // don't need to move out of the last one if ((x == x2) && (y == y2)) { break; } - if (d < 0) { + if (d < 0) { xinc = xinc1; yinc = yinc1; dinc = dinc1; @@ -849,40 +3024,59 @@ int haslos(lifeform_t *viewer, cell_t *dest) { dinc = dinc2; } - /* - if (debug) { - printf("checking LOS at %d,%d going (%d,%d)\n",x,y,xinc,yinc); - fflush(stdout); - } - */ - // solid cells stop los - cell = getcellat(map, x, y); - if (!cell->type->transparent) { - if (xray) xray--; - else return B_FALSE; - } - - /* - // check for smoke - if ((x != x1) || (y != y1)) { // if not in first cell - if (hasopaqueobject(viewer, x,y,z) && (getheight(x,y,z) >= origheight)) { - if (!hasproplf(viewer, P_SEEINSMOKE)) { - return B_FALSE; + // you can always see your own cell + if (i != 0) { + // if we went uphill, stop here + /* + if (wentuphill) { + return B_FALSE; + } + */ + + /* + if (debug) { + printf("checking LOS at %d,%d going (%d,%d)\n",x,y,xinc,yinc); + fflush(stdout); + } + */ + + // solid cells stop los - but if you are standing on a solid + // cell you can still see out. + cell = getcellat(map, x, y); + if (!cell->type->transparent) { + if (xray) xray--; + else return B_FALSE; + } + + /* + // check for smoke + if ((x != x1) || (y != y1)) { // if not in first cell + if (hasopaqueobject(viewer, x,y,z) && (getheight(x,y,z) >= origheight)) { + if (!hasproplf(viewer, P_SEEINSMOKE)) { + return B_FALSE; + } } } - } - */ + */ - // xray vision decreases by one - if (xray) xray--; + // check for objects which block view + if (hasobwithflag(cell->obpile, F_BLOCKSVIEW)) { + if (xray) xray--; + else return B_FALSE; + } + - // if you went uphill, can't see any further - /* - if (getheight(x,y,z) > origheight) { - wentuphill = B_TRUE; + // xray vision decreases by one + if (xray) xray--; + + // if you went uphill, can't see any further + /* + if (getheight(x,y,z) > origheight) { + wentuphill = B_TRUE; + } + */ } - */ // move to next cell d += dinc; @@ -898,64 +3092,694 @@ int haslos(lifeform_t *viewer, cell_t *dest) { return B_TRUE; } +int hasmr(lifeform_t *lf) { + if (lfhasflag(lf, F_RESISTMAG)) { + return B_TRUE; + } + return B_FALSE; +} + +void initjobs(void) { + int i; + // job definitions + // NOTE: try to always make the job's weapon be the first object defined. + // this will make sure that they have the letter 'a'. + addjob(J_GOD, "Diety"); + //addflag(lastjob->flags, F_OMNIPOTENT, B_TRUE, NA, NA, NULL); + addflag(lastjob->flags, F_MPDICE, 100, NA, NA, NULL); + addflag(lastjob->flags, F_MPREGEN, 100, NA, NA, NULL); + addflag(lastjob->flags, F_STARTOB, 100, NA, NA, "short sword of pyromania"); + addflag(lastjob->flags, F_STARTOB, 100, NA, NA, "hand of god"); + addflag(lastjob->flags, F_STARTOB, 100, NA, NA, "10 blocks of chocolate"); + addflag(lastjob->flags, F_STARTOB, 100, NA, NA, "10 vials of ambrosia"); + addflag(lastjob->flags, F_STARTOB, 100, NA, NA, "leather armour"); + addflag(lastjob->flags, F_STARTOB, 100, NA, NA, "leather boots"); + addflag(lastjob->flags, F_STARTOB, 100, NA, NA, "leather gloves"); + addflag(lastjob->flags, F_STARTOB, 100, NA, NA, "graph paper"); + addflag(lastjob->flags, F_STARTOB, 100, NA, NA, "a digital watch"); + addflag(lastjob->flags, F_STARTOB, 100, NA, NA, "10 blessed scrolls of create monster"); + addflag(lastjob->flags, F_STARTOB, 100, NA, NA, "ring of invulnerability"); + // gods may cast any spell at will + + for (i = SS_ABILITY; i < SS_LAST; i++) { + maycastspellschool(lastjob->flags, i); + } + addjob(J_ADVENTURER, "Adventurer"); + addflag(lastjob->flags, F_STARTOB, 100, NA, NA, "short sword"); + addflag(lastjob->flags, F_STARTOB, 100, NA, NA, "2 bananas"); + addflag(lastjob->flags, F_STARTOB, 100, NA, NA, "leather armour"); + addflag(lastjob->flags, F_STARTOB, 100, NA, NA, "10 gold coins"); + addflag(lastjob->flags, F_STARTOB, 100, NA, NA, "3 potions of healing"); + addjob(J_ALLOMANCER, "Allomancer"); + addflag(lastjob->flags, F_STARTOB, 100, NA, NA, "1 gold coins"); + addflag(lastjob->flags, F_STARTOB, 100, NA, NA, "club"); + addflag(lastjob->flags, F_STARTOB, 100, NA, NA, "cloak"); + addflag(lastjob->flags, F_STARTOB, 100, NA, NA, "potion of magic"); + addflag(lastjob->flags, F_MPDICE, 1, 1, NA, NULL); + //addflag(lastjob->flags, F_MPDICE, 5, 6, NA, NULL); + addflag(lastjob->flags, F_CANCAST, OT_S_ABSORBMETAL, NA, NA, NULL); + maycastspellschool(lastjob->flags, SS_ALLOMANCY); + addjob(J_PLUMBER, "Plumber"); + addflag(lastjob->flags, F_STARTOB, 100, NA, NA, "spanner"); + addflag(lastjob->flags, F_STARTOB, 100, NA, NA, "10 gold coins"); + addflag(lastjob->flags, F_STARTOB, 100, NA, NA, "overalls"); + addflag(lastjob->flags, F_STARTOB, 100, NA, NA, "cap"); + addflag(lastjob->flags, F_STARTOB, 100, NA, NA, "3-5 mushrooms"); + addflag(lastjob->flags, F_STARTOB, 100, NA, NA, "rubber boots"); + addflag(lastjob->flags, F_EVASION, 30, NA, NA, NULL); + addflag(lastjob->flags, F_OBESE, B_TRUE, NA, NA, NULL); + addflag(lastjob->flags, F_CANWILL, OT_A_JUMP, NA, NA, NULL); + addjob(J_PRINCE, "Prince"); + addflag(lastjob->flags, F_STARTOB, 100, NA, NA, "blessed ornamental sword"); + addflag(lastjob->flags, F_STARTOB, 100, NA, NA, "100 gold coins"); + addflag(lastjob->flags, F_STARTOB, 100, NA, NA, "golden crown"); + addflag(lastjob->flags, F_STARTOB, 100, NA, NA, "ornamental dagger"); + addflag(lastjob->flags, F_STARTOB, 100, NA, NA, "velvet robe"); + addflag(lastjob->flags, F_STARTOB, 100, NA, NA, "silk shirt"); + addflag(lastjob->flags, F_STARTOB, 100, NA, NA, "riding trousers"); + addflag(lastjob->flags, F_STARTOB, 100, NA, NA, "leather boots"); + addjob(J_COMMANDO, "Commando"); + addflag(lastjob->flags, F_STARTOB, 100, NA, NA, "combat knife"); + addflag(lastjob->flags, F_STARTOB, 100, NA, NA, "revolver"); + addflag(lastjob->flags, F_STARTOB, 100, NA, NA, "helmet"); + addflag(lastjob->flags, F_STARTOB, 100, NA, NA, "flak jacket"); + addflag(lastjob->flags, F_STARTOB, 100, NA, NA, "combat pants"); + addflag(lastjob->flags, F_STARTOB, 100, NA, NA, "leather boots"); + addflag(lastjob->flags, F_STARTOB, 100, NA, NA, "nightvis goggles"); + addflag(lastjob->flags, F_STARTOB, 100, NA, NA, "1-2 blocks of c4"); + addflag(lastjob->flags, F_STARTOB, 100, NA, NA, "1-3 grenades"); + addflag(lastjob->flags, F_STARTOB, 100, NA, NA, "1-3 flashbangs"); + addflag(lastjob->flags, F_STARTOB, 100, NA, NA, "digital watch"); + addflag(lastjob->flags, F_STARTOB, 100, NA, NA, "10 bullets"); + addflag(lastjob->flags, F_STARTSTR, ST_STRONG, NA, NA, NULL); + addflag(lastjob->flags, F_STARTIQ, IQ_DOPEY, NA, NA, NULL); +} void initrace(void) { - addrace(R_HUMAN, "human", '@'); + // races / monsters + addrace(R_HUMAN, "human", 75, 'h', MT_FLESH); addflag(lastrace->flags, F_CORPSETYPE, NA, NA, NA, "human corpse"); - addflag(lastrace->flags, F_RARITY, H_DUNGEON, RR_RARE, NA, ""); - addflag(lastrace->flags, F_HITDICE, 1, 4, NA, ""); + addflag(lastrace->flags, F_RARITY, H_DUNGEON, 25, NA, NULL); + addflag(lastrace->flags, F_SIZE, SZ_HUMAN, NA, NA, NULL); + addflag(lastrace->flags, F_HITDICE, 1, 4, NA, NULL); addflag(lastrace->flags, F_EVASION, 0, NA, NA, NULL); - addflag(lastrace->flags, F_MOVESPEED, SP_NORMAL, NA, NA, ""); - addflag(lastrace->flags, F_UNARMEDATTACKOB, NA, NA, NA, "fists"); - addflag(lastrace->flags, F_STARTOB, 100, NA, NA, "10 gold coins"); - addflag(lastrace->flags, F_STARTOB, 100, NA, NA, "quickblade"); - addflag(lastrace->flags, F_STARTOB, 100, NA, NA, "leather boots"); - addflag(lastrace->flags, F_STARTOB, 100, NA, NA, "leather gloves"); - addflag(lastrace->flags, F_STARTOB, 100, NA, NA, "3 potions of healing"); - addflag(lastrace->flags, F_STARTOBDT, 100, DT_PIERCE, NA, NULL); - addrace(R_GOBLIN, "goblin", 'g'); + addflag(lastrace->flags, F_MOVESPEED, SP_NORMAL, NA, NA, NULL); + addflag(lastrace->flags, F_UNARMEDSPEED, SP_NORMAL, NA, NA, NULL); + addflag(lastrace->flags, F_HASATTACK, NA, NA, NA, "fists"); + addflag(lastrace->flags, F_STARTOB, 80, 1, 50, "gold coin"); + addflag(lastrace->flags, F_STARTOBCLASS, 65, OC_WEAPON, NA, NULL); + addflag(lastrace->flags, F_STARTOBCLASS, 65, OC_ARMOUR, NA, NULL); + addflag(lastrace->flags, F_STARTOBCLASS, 65, OC_ARMOUR, NA, NULL); + addflag(lastrace->flags, F_STARTOBCLASS, 65, OC_ARMOUR, NA, NULL); + addflag(lastrace->flags, F_STARTOBCLASS, 30, OC_POTION, NA, NULL); + addflag(lastrace->flags, F_STARTOBCLASS, 30, OC_POTION, NA, NULL); + addflag(lastrace->flags, F_STARTOBCLASS, 30, OC_SCROLL, NA, NULL); + addflag(lastrace->flags, F_STARTOBCLASS, 30, OC_SCROLL, NA, NULL); + // TODO: humans start with a random job sometimes? + addflag(lastrace->flags, F_NOISETEXT, N_GETANGRY, NA, NA, "shouts^a shout"); + + // monsters + addrace(R_EYEBAT, "eyebat", 5, 'e', MT_FLESH); + addflag(lastrace->flags, F_CORPSETYPE, NA, NA, NA, "eyebat corpse"); + addflag(lastrace->flags, F_STARTIQ, IQ_SMART, NA, NA, NULL); + addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL); + addflag(lastrace->flags, F_RARITY, H_DUNGEON, 50, NA, NULL); + addflag(lastrace->flags, F_SIZE, SZ_SMALL, NA, NA, NULL); + addflag(lastrace->flags, F_HITDICE, 1, 3, NA, NULL); + addflag(lastrace->flags, F_EVASION, 20, NA, NA, NULL); + addflag(lastrace->flags, F_FLYING, B_TRUE, NA, NA, ""); + addflag(lastrace->flags, F_MOVESPEED, SP_SLOW, NA, NA, NULL); + addflag(lastrace->flags, F_SPELLSPEED, SP_VERYSLOW, NA, NA, NULL); + addflag(lastrace->flags, F_UNARMEDSPEED, SP_NORMAL, NA, NA, ""); + addflag(lastrace->flags, F_MPDICE, 0, 25, NA, NULL); + addflag(lastrace->flags, F_MPREGEN, 12, NA, NA, NULL); + addflag(lastrace->flags, F_CANCAST, OT_S_SLOW, NA, NA, NULL); + addflag(lastrace->flags, F_CANCAST, OT_S_DISPERSAL, NA, NA, NULL); + addflag(lastrace->flags, F_CANCAST, OT_S_GRAVBOOST, NA, NA, NULL); + addflag(lastrace->flags, F_SPELLCASTTEXT, NA, NA, NA, "gazes at you"); + addflag(lastrace->flags, F_XPVAL, 6, NA, NA, NULL); + addflag(lastrace->flags, F_NOBODYPART, BP_WEAPON, NA, NA, NULL); + addflag(lastrace->flags, F_NOBODYPART, BP_SECWEAPON, NA, NA, NULL); + addflag(lastrace->flags, F_NOBODYPART, BP_SHOULDERS, NA, NA, NULL); + addflag(lastrace->flags, F_NOBODYPART, BP_HANDS, NA, NA, NULL); + addflag(lastrace->flags, F_NOBODYPART, BP_LEGS, NA, NA, NULL); + addflag(lastrace->flags, F_NOPACK, B_TRUE, NA, NA, NULL); + addflag(lastrace->flags, F_SEEINDARK, UNLIMITED, NA, NA, NULL); + + + addrace(R_GOBLIN, "goblin", 20, 'g', MT_FLESH); addflag(lastrace->flags, F_CORPSETYPE, NA, NA, NA, "goblin corpse"); addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL); - addflag(lastrace->flags, F_RARITY, H_DUNGEON, RR_COMMON, NA, NULL); + addflag(lastrace->flags, F_RARITY, H_DUNGEON, 75, NA, NULL); + addflag(lastrace->flags, F_SIZE, SZ_MEDIUM, NA, NA, NULL); addflag(lastrace->flags, F_HITDICE, 1, 3, NA, NULL); addflag(lastrace->flags, F_EVASION, 10, NA, NA, NULL); addflag(lastrace->flags, F_MOVESPEED, SP_NORMAL, NA, NA, NULL); - addflag(lastrace->flags, F_UNARMEDATTACKOB, NA, NA, NA, "small claws"); + addflag(lastrace->flags, F_UNARMEDSPEED, SP_NORMAL, NA, NA, ""); + addflag(lastrace->flags, F_HASATTACK, 1, NA, NA, "claws"); + addflag(lastrace->flags, F_STARTIQ, IQ_DOPEY, NA, NA, NULL); addflag(lastrace->flags, F_STARTOBDT, 50, DT_PIERCE, NA, NULL); - addrace(R_BAT, "bat", 'B'); + addflag(lastrace->flags, F_STARTOBCLASS, 40, OC_POTION, NA, NULL); + addflag(lastrace->flags, F_XPVAL, 5, NA, NA, NULL); + addflag(lastrace->flags, F_WANTSBETTERWEP, B_TRUE, B_COVETS, NA, NULL); + addflag(lastrace->flags, F_WANTS, OT_GOLD, NA, NA, NULL); + addflag(lastrace->flags, F_WANTSOBFLAG, F_MISSILE, NA, NA, NULL); + addflag(lastrace->flags, F_NOISETEXT, N_GETANGRY, NA, NA, "shouts^a shout"); + addflag(lastrace->flags, F_SEEINDARK, 3, NA, NA, NULL); + addrace(R_GOBLINGUARD, "goblin guard", 30, 'g', MT_FLESH); + addflag(lastrace->flags, F_CORPSETYPE, NA, NA, NA, "goblin corpse"); + addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL); + addflag(lastrace->flags, F_RARITY, H_DUNGEON, 60, NA, NULL); + addflag(lastrace->flags, F_SIZE, SZ_MEDIUM, NA, NA, NULL); + addflag(lastrace->flags, F_HITDICE, 2, 3, NA, NULL); + addflag(lastrace->flags, F_EVASION, 10, NA, NA, NULL); + addflag(lastrace->flags, F_MOVESPEED, SP_NORMAL, NA, NA, NULL); + addflag(lastrace->flags, F_UNARMEDSPEED, SP_NORMAL, NA, NA, ""); + addflag(lastrace->flags, F_HASATTACK, 1, 5, 0, "claws"); + addflag(lastrace->flags, F_STARTIQ, IQ_AVERAGE, NA, NA, NULL); + addflag(lastrace->flags, F_STARTOBCLASS, 100, OC_ARMOUR, NA, NULL); + addflag(lastrace->flags, F_STARTOBCLASS, 50, OC_ARMOUR, NA, NULL); + addflag(lastrace->flags, F_STARTOBDT, 100, DT_PIERCE, NA, NULL); + addflag(lastrace->flags, F_STARTOBCLASS, 70, OC_POTION, NA, NULL); + addflag(lastrace->flags, F_STARTOBCLASS, 40, OC_POTION, NA, NULL); + addflag(lastrace->flags, F_XPVAL, 10, NA, NA, NULL); + addflag(lastrace->flags, F_WANTSBETTERWEP, B_TRUE, B_COVETS, NA, NULL); + addflag(lastrace->flags, F_WANTS, OT_GOLD, NA, NA, NULL); + addflag(lastrace->flags, F_WANTSOBFLAG, F_MISSILE, NA, NA, NULL); + addflag(lastrace->flags, F_NOISETEXT, N_GETANGRY, NA, NA, "shouts^a shout"); + addflag(lastrace->flags, F_SEEINDARK, 3, NA, NA, NULL); + addrace(R_GOBLINCHAMP, "goblin champion", 40, 'g', MT_FLESH); + addflag(lastrace->flags, F_CORPSETYPE, NA, NA, NA, "goblin corpse"); + addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL); + addflag(lastrace->flags, F_RARITY, H_DUNGEON, 50, NA, NULL); + addflag(lastrace->flags, F_SIZE, SZ_MEDIUM, NA, NA, NULL); + addflag(lastrace->flags, F_HITDICE, 3, 3, NA, NULL); + addflag(lastrace->flags, F_EVASION, 10, NA, NA, NULL); + addflag(lastrace->flags, F_MOVESPEED, SP_NORMAL, NA, NA, NULL); + addflag(lastrace->flags, F_UNARMEDSPEED, SP_NORMAL, NA, NA, ""); + addflag(lastrace->flags, F_HASATTACK, 1, 5, 0, "claws"); + addflag(lastrace->flags, F_STARTIQ, IQ_AVERAGE, NA, NA, NULL); + addflag(lastrace->flags, F_STARTOBCLASS, 100, OC_ARMOUR, NA, NULL); + addflag(lastrace->flags, F_STARTOBCLASS, 100, OC_ARMOUR, NA, NULL); + addflag(lastrace->flags, F_STARTOBCLASS, 50, OC_ARMOUR, NA, NULL); + addflag(lastrace->flags, F_STARTOBCLASS, 50, OC_ARMOUR, NA, NULL); + addflag(lastrace->flags, F_STARTOBDT, 100, DT_PIERCE, NA, NULL); + addflag(lastrace->flags, F_STARTOBDT, 80, DT_PIERCE, NA, NULL); + addflag(lastrace->flags, F_STARTOBCLASS, 60, OC_POTION, NA, NULL); + addflag(lastrace->flags, F_STARTOBCLASS, 30, OC_POTION, NA, NULL); + addflag(lastrace->flags, F_XPVAL, 20, NA, NA, NULL); + addflag(lastrace->flags, F_WANTSBETTERWEP, B_TRUE, B_COVETS, NA, NULL); + addflag(lastrace->flags, F_WANTS, OT_GOLD, NA, NA, NULL); + addflag(lastrace->flags, F_WANTSOBFLAG, F_MISSILE, NA, NA, NULL); + addflag(lastrace->flags, F_NOISETEXT, N_GETANGRY, NA, NA, "shouts^a shout"); + addflag(lastrace->flags, F_SEEINDARK, 3, NA, NA, NULL); + addrace(R_ORC, "orc", 90, 'o', MT_FLESH); + addflag(lastrace->flags, F_CORPSETYPE, NA, NA, NA, "orc corpse"); + addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL); + addflag(lastrace->flags, F_SIZE, SZ_HUMAN, NA, NA, NULL); + addflag(lastrace->flags, F_RARITY, H_DUNGEON, 75, NA, NULL); + addflag(lastrace->flags, F_HITDICE, 1, 3, NA, NULL); + addflag(lastrace->flags, F_EVASION, 5, NA, NA, NULL); + addflag(lastrace->flags, F_MOVESPEED, SP_NORMAL, NA, NA, NULL); + addflag(lastrace->flags, F_UNARMEDSPEED, SP_NORMAL, NA, NA, ""); + addflag(lastrace->flags, F_STARTIQ, IQ_DOPEY, NA, NA, NULL); + addflag(lastrace->flags, F_HASATTACK, 1, 4, 0, "claws"); + addflag(lastrace->flags, F_STARTOBDT, 50, DT_SLASH, NA, NULL); + addflag(lastrace->flags, F_STARTOBDT, 30, DT_BASH, NA, NULL); + addflag(lastrace->flags, F_STARTOBCLASS, 30, OC_POTION, NA, NULL); + addflag(lastrace->flags, F_STARTOB, 50, 1, 1, "leather armour"); + addflag(lastrace->flags, F_STARTOB, 50, 1, 1, "leather boots"); + addflag(lastrace->flags, F_STARTOB, 50, 1, 1, "bone helmet"); + addflag(lastrace->flags, F_STARTOB, 50, 1, 1, "gauntlets"); + addflag(lastrace->flags, F_STARTOB, 50, 1, 40, "gold coin"); + addflag(lastrace->flags, F_STARTOBCLASS, 50, OC_POTION, NA, NULL); + addflag(lastrace->flags, F_WANTS, OT_GOLD, NA, NA, NULL); + addflag(lastrace->flags, F_WANTSBETTERWEP, B_TRUE, NA, NA, NULL); + addflag(lastrace->flags, F_XPVAL, 5, NA, NA, NULL); + addflag(lastrace->flags, F_NOISETEXT, N_GETANGRY, NA, NA, "shouts^a shout"); + addflag(lastrace->flags, F_SEEINDARK, 2, NA, NA, NULL); + addrace(R_ORK, "ork", 90, 'o', MT_FLESH); + addflag(lastrace->flags, F_CORPSETYPE, NA, NA, NA, "orc corpse"); + addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL); + addflag(lastrace->flags, F_SIZE, SZ_HUMAN, NA, NA, NULL); + addflag(lastrace->flags, F_RARITY, H_DUNGEON, 75, NA, NULL); + addflag(lastrace->flags, F_HITDICE, 1, 3, NA, NULL); + addflag(lastrace->flags, F_EVASION, 0, NA, NA, NULL); + addflag(lastrace->flags, F_MOVESPEED, SP_NORMAL, NA, NA, NULL); + addflag(lastrace->flags, F_UNARMEDSPEED, SP_NORMAL, NA, NA, ""); + addflag(lastrace->flags, F_HASATTACK, 1, 4, 0, "claws"); + addflag(lastrace->flags, F_STARTIQ, IQ_AVERAGE, NA, NA, NULL); + addflag(lastrace->flags, F_STARTOBDT, 50, DT_SLASH, NA, NULL); + addflag(lastrace->flags, F_STARTOBDT, 30, DT_BASH, NA, NULL); + addflag(lastrace->flags, F_STARTOBCLASS, 30, OC_POTION, NA, NULL); + addflag(lastrace->flags, F_STARTOB, 50, 1, 1, "flak jacket"); + addflag(lastrace->flags, F_STARTOB, 50, 1, 1, "leather boots"); + addflag(lastrace->flags, F_STARTOB, 50, 1, 1, "football helmet"); + addflag(lastrace->flags, F_STARTOB, 50, 1, 25, "gold coin"); + addflag(lastrace->flags, F_STARTOBCLASS, 50, OC_POTION, NA, NULL); + addflag(lastrace->flags, F_STARTOBCLASS, 50, OC_TECH, NA, NULL); + addflag(lastrace->flags, F_WANTS, OT_GOLD, NA, NA, NULL); + addflag(lastrace->flags, F_WANTSOBFLAG, F_OPERABLE, B_COVETS, NA, NULL); // ie. tech + addflag(lastrace->flags, F_WANTSBETTERWEP, B_TRUE, B_COVETS, NA, NULL); + addflag(lastrace->flags, F_XPVAL, 8, NA, NA, NULL); + addflag(lastrace->flags, F_NOISETEXT, N_GETANGRY, NA, NA, "shouts^a shout"); + addflag(lastrace->flags, F_SEEINDARK, 3, NA, NA, NULL); + + addrace(R_SLIME, "slime", 10, 'j', MT_SLIME); + addflag(lastrace->flags, F_CORPSETYPE, NA, NA, NA, "pool of slime"); + addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL); + addflag(lastrace->flags, F_SIZE, SZ_SMALL, NA, NA, NULL); + addflag(lastrace->flags, F_RARITY, H_DUNGEON, 80, NA, NULL); + addflag(lastrace->flags, F_HITDICE, 2, 0, NA, NULL); + addflag(lastrace->flags, F_EVASION, 0, NA, NA, NULL); + addflag(lastrace->flags, F_MOVESPEED, SP_SLOW, NA, NA, NULL); + addflag(lastrace->flags, F_UNARMEDSPEED, SP_NORMAL, NA, NA, ""); + addflag(lastrace->flags, F_STARTIQ, IQ_MINDLESS, NA, NA, NULL); + addflag(lastrace->flags, F_NOBODYPART, BP_WEAPON, NA, NA, NULL); + addflag(lastrace->flags, F_NOBODYPART, BP_SECWEAPON, NA, NA, NULL); + addflag(lastrace->flags, F_NOBODYPART, BP_RIGHTHAND, NA, NA, NULL); + addflag(lastrace->flags, F_NOBODYPART, BP_LEFTHAND, NA, NA, NULL); + addflag(lastrace->flags, F_NOBODYPART, BP_EYES, NA, NA, NULL); + addflag(lastrace->flags, F_NOBODYPART, BP_HANDS, NA, NA, NULL); + addflag(lastrace->flags, F_NOBODYPART, BP_HEAD, NA, NA, NULL); + addflag(lastrace->flags, F_NOBODYPART, BP_SHOULDERS, NA, NA, NULL); + addflag(lastrace->flags, F_NOBODYPART, BP_LEGS, NA, NA, NULL); + addflag(lastrace->flags, F_NOBODYPART, BP_FEET, NA, NA, NULL); + addflag(lastrace->flags, F_HASATTACK, 2, 3, 0, "acidattack"); + addflag(lastrace->flags, F_XPVAL, 6, NA, NA, NULL); + addflag(lastrace->flags, F_SEEINDARK, UNLIMITED, NA, NA, NULL); + + addrace(R_LIZARDMAN, "lizardman", 100, 'z', MT_FLESH); + addflag(lastrace->flags, F_CORPSETYPE, NA, NA, NA, "lizard corpse"); + addflag(lastrace->flags, F_COLDBLOOD, B_TRUE, NA, NA, NULL); + addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL); + addflag(lastrace->flags, F_SIZE, SZ_LARGE, NA, NA, NULL); + addflag(lastrace->flags, F_RARITY, H_DUNGEON, 70, NA, NULL); + addflag(lastrace->flags, F_HITDICE, 2, 4, NA, NULL); + addflag(lastrace->flags, F_EVASION, 15, NA, NA, NULL); + addflag(lastrace->flags, F_MOVESPEED, SP_NORMAL, NA, NA, NULL); + addflag(lastrace->flags, F_UNARMEDSPEED, SP_FAST, NA, NA, ""); + addflag(lastrace->flags, F_STARTIQ, IQ_SMART, NA, NA, NULL); + addflag(lastrace->flags, F_HASATTACK, 1, 5, 1, "claws"); + addflag(lastrace->flags, F_HASATTACK, 1, 4, 0, "tail"); + addflag(lastrace->flags, F_DTVULN, DT_COLD, B_TRUE, NA, NULL); + addflag(lastrace->flags, F_DTRESIST, DT_FIRE, B_TRUE, NA, NULL); + addflag(lastrace->flags, F_XPVAL, 10, NA, NA, NULL); + addflag(lastrace->flags, F_SEEINDARK, 3, NA, NA, NULL); + + addrace(R_OGRE, "ogre", 100, 'O', MT_FLESH); + addflag(lastrace->flags, F_CORPSETYPE, NA, NA, NA, "ogre corpse"); + addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL); + addflag(lastrace->flags, F_SIZE, SZ_LARGE, NA, NA, NULL); + addflag(lastrace->flags, F_RARITY, H_DUNGEON, 50, NA, NULL); + addflag(lastrace->flags, F_HITDICE, 4, 0, NA, NULL); + addflag(lastrace->flags, F_EVASION, -5, NA, NA, NULL); + addflag(lastrace->flags, F_MOVESPEED, SP_NORMAL, NA, NA, NULL); + addflag(lastrace->flags, F_UNARMEDSPEED, SP_NORMAL, NA, NA, ""); + addflag(lastrace->flags, F_HASATTACK, 1, 6, 0, "fists"); + addflag(lastrace->flags, F_STARTIQ, IQ_DOPEY, NA, NA, NULL); + addflag(lastrace->flags, F_STARTOBDT, 90, DT_BASH, NA, NULL); + addflag(lastrace->flags, F_XPVAL, 15, NA, NA, NULL); + addflag(lastrace->flags, F_SEEINDARK, 2, NA, NA, NULL); + + addrace(R_TROLL, "troll", 90, 't', MT_FLESH); + addflag(lastrace->flags, F_CORPSETYPE, NA, NA, NA, "troll corpse"); + addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL); + addflag(lastrace->flags, F_SIZE, SZ_LARGE, NA, NA, NULL); + addflag(lastrace->flags, F_RARITY, H_DUNGEON, 65, NA, NULL); + addflag(lastrace->flags, F_HITDICE, 3, 0, NA, NULL); + addflag(lastrace->flags, F_EVASION, 10, NA, NA, NULL); + addflag(lastrace->flags, F_MOVESPEED, SP_NORMAL, NA, NA, NULL); + addflag(lastrace->flags, F_UNARMEDSPEED, SP_FAST, NA, NA, ""); + addflag(lastrace->flags, F_STARTIQ, IQ_DIMWITTED, NA, NA, NULL); + addflag(lastrace->flags, F_HASATTACK, 2, 4, 0, "claws"); + addflag(lastrace->flags, F_XPVAL, 15, NA, NA, NULL); + addflag(lastrace->flags, F_REGENERATES, 2, NA, NA, NULL); + addflag(lastrace->flags, F_SEEINDARK, 5, NA, NA, NULL); + + addrace(R_LURKINGHORROR, "lurking horror", 100, 'U', MT_FLESH); + addflag(lastrace->flags, F_NOCORPSE, B_TRUE, NA, NA, NULL); + addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL); + addflag(lastrace->flags, F_SIZE, SZ_LARGE, NA, NA, NULL); + addflag(lastrace->flags, F_RARITY, H_DUNGEON, 50, NA, NULL); + addflag(lastrace->flags, F_HITDICE, 3, 0, NA, NULL); + addflag(lastrace->flags, F_EVASION, 0, NA, NA, NULL); + addflag(lastrace->flags, F_MOVESPEED, SP_SLOW, NA, NA, NULL); + addflag(lastrace->flags, F_UNARMEDSPEED, SP_NORMAL, NA, NA, ""); + addflag(lastrace->flags, F_INDUCEFEAR, B_TRUE, NA, NA, NULL); + addflag(lastrace->flags, F_STARTIQ, IQ_MINDLESS, NA, NA, NULL); + addflag(lastrace->flags, F_NOBODYPART, BP_WEAPON, NA, NA, NULL); + addflag(lastrace->flags, F_NOBODYPART, BP_SECWEAPON, NA, NA, NULL); + addflag(lastrace->flags, F_NOBODYPART, BP_RIGHTHAND, NA, NA, NULL); + addflag(lastrace->flags, F_NOBODYPART, BP_LEFTHAND, NA, NA, NULL); + addflag(lastrace->flags, F_NOBODYPART, BP_EYES, NA, NA, NULL); + addflag(lastrace->flags, F_NOBODYPART, BP_HANDS, NA, NA, NULL); + addflag(lastrace->flags, F_NOBODYPART, BP_HEAD, NA, NA, NULL); + addflag(lastrace->flags, F_NOBODYPART, BP_SHOULDERS, NA, NA, NULL); + addflag(lastrace->flags, F_NOBODYPART, BP_LEGS, NA, NA, NULL); + addflag(lastrace->flags, F_NOBODYPART, BP_FEET, NA, NA, NULL); + addflag(lastrace->flags, F_XPVAL, 4, NA, NA, NULL); + addflag(lastrace->flags, F_SEEINDARK, UNLIMITED, NA, NA, NULL); + + addrace(R_POLTERGEIST, "poltergeist", 50, 'p', MT_FLESH); + addflag(lastrace->flags, F_NOCORPSE, B_TRUE, NA, NA, NULL); + addflag(lastrace->flags, F_STARTIQ, IQ_AVERAGE, NA, NA, NULL); + addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL); + addflag(lastrace->flags, F_RARITY, H_DUNGEON, 50, NA, NULL); + addflag(lastrace->flags, F_SIZE, SZ_MEDIUM, NA, NA, NULL); + addflag(lastrace->flags, F_HITDICE, 2, NA, NA, NULL); + addflag(lastrace->flags, F_EVASION, 10, NA, NA, NULL); + addflag(lastrace->flags, F_FLYING, B_TRUE, NA, NA, ""); + addflag(lastrace->flags, F_MOVESPEED, SP_NORMAL, NA, NA, NULL); + addflag(lastrace->flags, F_SPELLSPEED, SP_NORMAL, NA, NA, NULL); + addflag(lastrace->flags, F_UNARMEDSPEED, SP_NORMAL, NA, NA, ""); + addflag(lastrace->flags, F_MPDICE, 0, 4, NA, NULL); + addflag(lastrace->flags, F_MPREGEN, 4, NA, NA, NULL); + addflag(lastrace->flags, F_CANCAST, OT_S_TELEKINESIS, NA, NA, NULL); + addflag(lastrace->flags, F_SPELLCASTTEXT, NA, NA, NA, "gestures"); + addflag(lastrace->flags, F_XPVAL, 8, NA, NA, NULL); + addflag(lastrace->flags, F_NOBODYPART, BP_WEAPON, NA, NA, NULL); + addflag(lastrace->flags, F_NOBODYPART, BP_SECWEAPON, NA, NA, NULL); + addflag(lastrace->flags, F_NOBODYPART, BP_SHOULDERS, NA, NA, NULL); + addflag(lastrace->flags, F_NOBODYPART, BP_HANDS, NA, NA, NULL); + addflag(lastrace->flags, F_NOBODYPART, BP_LEGS, NA, NA, NULL); + addflag(lastrace->flags, F_NOPACK, B_TRUE, NA, NA, NULL); + addflag(lastrace->flags, F_SEEINDARK, UNLIMITED, NA, NA, NULL); + // end monsters + + // small animals + addrace(R_NEWT, "newt", 0.1, ':', MT_FLESH); + addflag(lastrace->flags, F_RARITY, H_DUNGEON, 100, NA, NULL); + addflag(lastrace->flags, F_COLDBLOOD, B_TRUE, NA, NA, NULL); + addflag(lastrace->flags, F_ANIMAL, B_TRUE, NA, NA, NULL); + addflag(lastrace->flags, F_STARTIQ, IQ_ANIMAL, NA, NA, NULL); + addflag(lastrace->flags, F_HITDICE, 1, 0, NA, NULL); + addflag(lastrace->flags, F_SIZE, SZ_MINI, NA, NA, NULL); + addflag(lastrace->flags, F_EVASION, 0, NA, NA, NULL); + addflag(lastrace->flags, F_MOVESPEED, SP_NORMAL, NA, NA, NULL); + addflag(lastrace->flags, F_UNARMEDSPEED, SP_NORMAL, NA, NA, ""); + addflag(lastrace->flags, F_FLEEONDAM, B_TRUE, NA, NA, ""); + addflag(lastrace->flags, F_XPVAL, 1, NA, NA, NULL); + addflag(lastrace->flags, F_NOBODYPART, BP_WEAPON, NA, NA, NULL); + addflag(lastrace->flags, F_NOBODYPART, BP_SECWEAPON, NA, NA, NULL); + addflag(lastrace->flags, F_NOBODYPART, BP_HANDS, NA, NA, NULL); + addflag(lastrace->flags, F_NOPACK, B_TRUE, NA, NA, NULL); + addflag(lastrace->flags, F_NOSPELLS, B_TRUE, NA, NA, NULL); + addflag(lastrace->flags, F_DTRESIST, DT_FIRE, B_TRUE, NA, NULL); + addrace(R_BAT, "bat", 1, 'B', MT_FLESH); addflag(lastrace->flags, F_CORPSETYPE, NA, NA, NA, "bat corpse"); - addflag(lastrace->flags, F_LFATTACKDELAY, -3, NA, NA, ""); // extra fast attacks + addflag(lastrace->flags, F_RARITY, H_DUNGEON, 90, NA, ""); + addflag(lastrace->flags, F_ANIMAL, B_TRUE, NA, NA, NULL); + addflag(lastrace->flags, F_STARTIQ, IQ_ANIMAL, NA, 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_UNARMEDSPEED, SP_FAST, NA, NA, ""); addflag(lastrace->flags, F_FLYING, B_TRUE, NA, NA, ""); - addflag(lastrace->flags, F_RARITY, H_DUNGEON, RR_COMMON, NA, ""); addflag(lastrace->flags, F_HITDICE, 0, 2, NA, ""); - addflag(lastrace->flags, F_UNARMEDATTACKOB, NA, NA, NA, "tiny teeth"); + addflag(lastrace->flags, F_HASATTACK, 1, 2, 0, "teeth"); addflag(lastrace->flags, F_EVASION, 30, NA, NA, NULL); - addrace(R_RAT, "rat", 'r'); + addflag(lastrace->flags, F_XPVAL, 2, NA, NA, NULL); + addflag(lastrace->flags, F_NOBODYPART, BP_WEAPON, NA, NA, NULL); + addflag(lastrace->flags, F_NOBODYPART, BP_SECWEAPON, NA, NA, NULL); + addflag(lastrace->flags, F_NOBODYPART, BP_SHOULDERS, NA, NA, NULL); + addflag(lastrace->flags, F_NOBODYPART, BP_HANDS, NA, NA, NULL); + addflag(lastrace->flags, F_NOBODYPART, BP_LEGS, NA, NA, NULL); + addflag(lastrace->flags, F_NOPACK, B_TRUE, NA, NA, NULL); + addflag(lastrace->flags, F_NOSPELLS, B_TRUE, NA, NA, NULL); + addflag(lastrace->flags, F_SEEINDARK, UNLIMITED, NA, NA, NULL); + addrace(R_RAT, "giant rat", 0.2, 'r', MT_FLESH); + addflag(lastrace->flags, F_ANIMAL, B_TRUE, NA, NA, NULL); + addflag(lastrace->flags, F_STARTIQ, IQ_ANIMAL, NA, NA, NULL); + addflag(lastrace->flags, F_UNARMEDSPEED, SP_NORMAL, NA, NA, ""); addflag(lastrace->flags, F_CORPSETYPE, NA, NA, NA, "rodent corpse"); + addflag(lastrace->flags, F_SIZE, SZ_MEDIUM, NA, NA, NULL); addflag(lastrace->flags, F_MOVESPEED, SP_FAST, NA, NA, ""); - addflag(lastrace->flags, F_MOVESPEED, 5, NA, NA, ""); - addflag(lastrace->flags, F_RARITY, H_DUNGEON, RR_COMMON, NA, ""); + addflag(lastrace->flags, F_RARITY, H_DUNGEON, 90, NA, ""); addflag(lastrace->flags, F_HITDICE, 0, 1, NA, ""); - addflag(lastrace->flags, F_UNARMEDATTACKOB, NA, NA, NA, "tiny teeth"); - addflag(lastrace->flags, F_UNARMEDATTACKOB, NA, NA, NA, "tiny claws"); + addflag(lastrace->flags, F_HASATTACK, 1, 2, 0, "teeth"); + addflag(lastrace->flags, F_HASATTACK, 1, 3, 0, "claws"); addflag(lastrace->flags, F_EVASION, 20, NA, NA, NULL); - addrace(R_GIANTFLY, "giant fly", 'I'); + addflag(lastrace->flags, F_XPVAL, 1, NA, NA, NULL); + addflag(lastrace->flags, F_NOBODYPART, BP_WEAPON, NA, NA, NULL); + addflag(lastrace->flags, F_NOBODYPART, BP_SECWEAPON, NA, NA, NULL); + addflag(lastrace->flags, F_NOBODYPART, BP_SHOULDERS, NA, NA, NULL); + addflag(lastrace->flags, F_NOBODYPART, BP_HANDS, NA, NA, NULL); + addflag(lastrace->flags, F_NOPACK, B_TRUE, NA, NA, NULL); + addflag(lastrace->flags, F_NOSPELLS, B_TRUE, NA, NA, NULL); + addflag(lastrace->flags, F_WANTSOBFLAG, F_EDIBLE, B_COVETS, NA, NULL); + addflag(lastrace->flags, F_SEEINDARK, 4, NA, NA, NULL); + addrace(R_WOLF, "wolf", 10, 'd', MT_FLESH); + addflag(lastrace->flags, F_ANIMAL, B_TRUE, NA, NA, NULL); + addflag(lastrace->flags, F_STARTIQ, IQ_ANIMAL, NA, NA, NULL); + addflag(lastrace->flags, F_UNARMEDSPEED, SP_FAST, NA, NA, ""); + addflag(lastrace->flags, F_CORPSETYPE, NA, NA, NA, "wolf corpse"); + 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, 80, NA, ""); + addflag(lastrace->flags, F_HITDICE, 2, 0, NA, ""); + addflag(lastrace->flags, F_HASATTACK, 1, 5, 0, "teeth"); + addflag(lastrace->flags, F_HASATTACK, 1, 5, 0, "claws"); + addflag(lastrace->flags, F_EVASION, 10, NA, NA, NULL); + addflag(lastrace->flags, F_XPVAL, 12, NA, NA, NULL); + addflag(lastrace->flags, F_NOBODYPART, BP_WEAPON, NA, NA, NULL); + addflag(lastrace->flags, F_NOBODYPART, BP_SECWEAPON, NA, NA, NULL); + addflag(lastrace->flags, F_NOBODYPART, BP_SHOULDERS, NA, NA, NULL); + addflag(lastrace->flags, F_NOBODYPART, BP_HANDS, NA, NA, NULL); + addflag(lastrace->flags, F_NOPACK, B_TRUE, NA, NA, NULL); + addflag(lastrace->flags, F_NOSPELLS, B_TRUE, NA, NA, NULL); + addflag(lastrace->flags, F_WANTSOBFLAG, F_EDIBLE, B_COVETS, NA, NULL); + addflag(lastrace->flags, F_SEEINDARK, 5, NA, NA, NULL); + + // insects + addrace(R_GIANTFLY, "giant fly", 1, 'i', MT_FLESH); + addflag(lastrace->flags, F_INSECT, B_TRUE, NA, NA, NULL); + addflag(lastrace->flags, F_STARTIQ, IQ_ANIMAL, NA, NA, NULL); addflag(lastrace->flags, F_CORPSETYPE, NA, NA, NA, "fly corpse"); + addflag(lastrace->flags, F_NUMAPPEAR, 3, 3, NA, ""); addflag(lastrace->flags, F_MOVESPEED, SP_VERYFAST, NA, NA, ""); + addflag(lastrace->flags, F_SIZE, SZ_SMALL, NA, NA, NULL); + addflag(lastrace->flags, F_UNARMEDSPEED, SP_NORMAL, NA, NA, ""); addflag(lastrace->flags, F_FLYING, B_TRUE, NA, NA, ""); - addflag(lastrace->flags, F_RARITY, H_DUNGEON, RR_COMMON, NA, ""); - addflag(lastrace->flags, F_HITDICE, 0, 2, NA, ""); + addflag(lastrace->flags, F_RARITY, H_DUNGEON, 85, NA, ""); + addflag(lastrace->flags, F_HITDICE, 1, 0, NA, ""); + addflag(lastrace->flags, F_EVASION, 50, NA, NA, NULL); + addflag(lastrace->flags, F_HASATTACK, 1, 2, 0, "teeth"); + addflag(lastrace->flags, F_XPVAL, 2, NA, NA, NULL); + addflag(lastrace->flags, F_NOBODYPART, BP_WEAPON, NA, NA, NULL); + addflag(lastrace->flags, F_NOBODYPART, BP_SECWEAPON, NA, NA, NULL); + addflag(lastrace->flags, F_NOBODYPART, BP_SHOULDERS, NA, NA, NULL); + addflag(lastrace->flags, F_NOBODYPART, BP_HANDS, NA, NA, NULL); + addflag(lastrace->flags, F_NOPACK, B_TRUE, NA, NA, NULL); + addflag(lastrace->flags, F_NOSPELLS, B_TRUE, NA, NA, NULL); + addflag(lastrace->flags, F_NOISETEXT, N_GETANGRY, NA, NA, "buzzes angrily^an angry buzzing"); + addflag(lastrace->flags, F_DTVULN, DT_POISONGAS, NA, NA, NULL); + addrace(R_GIANTBLOWFLY, "giant blowfly", 2, 'i', MT_FLESH); + addflag(lastrace->flags, F_INSECT, B_TRUE, NA, NA, NULL); + addflag(lastrace->flags, F_STARTIQ, IQ_ANIMAL, NA, NA, NULL); + addflag(lastrace->flags, F_CORPSETYPE, NA, NA, NA, "fly corpse"); + addflag(lastrace->flags, F_NUMAPPEAR, 1, 2, NA, ""); + addflag(lastrace->flags, F_MOVESPEED, SP_VERYFAST, NA, NA, ""); + addflag(lastrace->flags, F_SIZE, SZ_SMALL, NA, NA, NULL); + addflag(lastrace->flags, F_UNARMEDSPEED, SP_FAST, NA, NA, ""); + addflag(lastrace->flags, F_FLYING, B_TRUE, NA, NA, ""); + addflag(lastrace->flags, F_RARITY, H_DUNGEON, 75, NA, ""); + addflag(lastrace->flags, F_HITDICE, 1, 1, NA, ""); addflag(lastrace->flags, F_EVASION, 40, NA, NA, NULL); - addflag(lastrace->flags, F_UNARMEDATTACKOB, NA, NA, NA, "tiny teeth"); - addrace(R_GIANTBLOWFLY, "giant blowfly", 'I'); - addflag(lastrace->flags, F_CORPSETYPE, NA, NA, NA, "fly corpse"); + addflag(lastrace->flags, F_HASATTACK, 1, 3, 0, "teeth"); + addflag(lastrace->flags, F_XPVAL, 3, NA, NA, NULL); + addflag(lastrace->flags, F_NOBODYPART, BP_WEAPON, NA, NA, NULL); + addflag(lastrace->flags, F_NOBODYPART, BP_SECWEAPON, NA, NA, NULL); + addflag(lastrace->flags, F_NOBODYPART, BP_SHOULDERS, NA, NA, NULL); + addflag(lastrace->flags, F_NOBODYPART, BP_HANDS, NA, NA, NULL); + addflag(lastrace->flags, F_NOBODYPART, BP_LEGS, NA, NA, NULL); + addflag(lastrace->flags, F_NOPACK, B_TRUE, NA, NA, NULL); + addflag(lastrace->flags, F_NOSPELLS, B_TRUE, NA, NA, NULL); + addflag(lastrace->flags, F_NOISETEXT, N_GETANGRY, NA, NA, "buzzes angrily^an angry buzzing"); + addflag(lastrace->flags, F_DTVULN, DT_POISONGAS, NA, NA, NULL); + addrace(R_GLOWBUG, "glowbug", 1, 'i', MT_FLESH); + addflag(lastrace->flags, F_INSECT, B_TRUE, NA, NA, NULL); + addflag(lastrace->flags, F_STARTIQ, IQ_ANIMAL, NA, NA, NULL); + addflag(lastrace->flags, F_CORPSETYPE, NA, NA, NA, "glowbug corpse"); addflag(lastrace->flags, F_MOVESPEED, SP_VERYFAST, NA, NA, ""); + addflag(lastrace->flags, F_SIZE, SZ_SMALL, NA, NA, NULL); + addflag(lastrace->flags, F_UNARMEDSPEED, SP_NORMAL, NA, NA, ""); addflag(lastrace->flags, F_FLYING, B_TRUE, NA, NA, ""); - addflag(lastrace->flags, F_RARITY, H_DUNGEON, RR_UNCOMMON, NA, ""); - addflag(lastrace->flags, F_HITDICE, 1, 2, NA, ""); - addflag(lastrace->flags, F_EVASION, 30, NA, NA, NULL); - addflag(lastrace->flags, F_UNARMEDATTACKOB, NA, NA, NA, "tiny teeth"); + addflag(lastrace->flags, F_RARITY, H_DUNGEON, 85, NA, ""); + addflag(lastrace->flags, F_HITDICE, 1, 0, NA, ""); + addflag(lastrace->flags, F_EVASION, 60, NA, NA, NULL); + addflag(lastrace->flags, F_HASATTACK, 1, 2, 0, "zapper"); + addflag(lastrace->flags, F_XPVAL, 1, NA, NA, NULL); + addflag(lastrace->flags, F_NOBODYPART, BP_WEAPON, NA, NA, NULL); + addflag(lastrace->flags, F_NOBODYPART, BP_SECWEAPON, NA, NA, NULL); + addflag(lastrace->flags, F_NOBODYPART, BP_SHOULDERS, NA, NA, NULL); + addflag(lastrace->flags, F_NOBODYPART, BP_HANDS, NA, NA, NULL); + addflag(lastrace->flags, F_NOPACK, B_TRUE, NA, NA, NULL); + addflag(lastrace->flags, F_NOSPELLS, B_TRUE, NA, NA, NULL); + addflag(lastrace->flags, F_PRODUCESLIGHT, 2, NA, NA, NULL); + addflag(lastrace->flags, F_DTVULN, DT_POISONGAS, NA, NA, NULL); + + // undead + addrace(R_ZOMBIE, "zombie", 50, 'Z', MT_FLESH); + addflag(lastrace->flags, F_UNDEAD, B_TRUE, NA, NA, NULL); + addflag(lastrace->flags, F_STARTIQ, IQ_MINDLESS, NA, NA, NULL); + addflag(lastrace->flags, F_NOCORPSE, B_TRUE, NA, NA, NULL); + addflag(lastrace->flags, F_BLOODOB, NA, NA, NA, NULL); + addflag(lastrace->flags, F_NUMAPPEAR, 2, 4, NA, NULL); + addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL); + addflag(lastrace->flags, F_RARITY, H_DUNGEON, 75, NA, NULL); + addflag(lastrace->flags, F_SIZE, SZ_HUMAN, NA, NA, NULL); + addflag(lastrace->flags, F_HITDICE, 2, 2, NA, NULL); + addflag(lastrace->flags, F_EVASION, -10, NA, NA, NULL); + addflag(lastrace->flags, F_MOVESPEED, SP_SLOW, NA, NA, NULL); + addflag(lastrace->flags, F_UNARMEDSPEED, SP_SLOW, NA, NA, ""); + addflag(lastrace->flags, F_HASATTACK, 1, 4, NA, "claws"); + addflag(lastrace->flags, F_HASATTACK, 1, 5, NA, "teeth"); + addflag(lastrace->flags, F_XPVAL, 3, NA, NA, NULL); + addflag(lastrace->flags, F_DTIMMUNE, DT_COLD, NA, NA, NULL); + addflag(lastrace->flags, F_DTIMMUNE, DT_POISONGAS, NA, NA, NULL); + addflag(lastrace->flags, F_DTIMMUNE, DT_DECAY, NA, NA, NULL); + addflag(lastrace->flags, F_DTVULN, DT_HOLY, NA, NA, NULL); + addrace(R_SKELETON, "skeleton", 20, 'Z', MT_BONE); + addflag(lastrace->flags, F_UNDEAD, B_TRUE, NA, NA, NULL); + addflag(lastrace->flags, F_STARTIQ, IQ_MINDLESS, NA, 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); + addflag(lastrace->flags, F_RARITY, H_DUNGEON, 70, NA, NULL); + addflag(lastrace->flags, F_SIZE, SZ_HUMAN, NA, NA, NULL); + addflag(lastrace->flags, F_HITDICE, 2, 4, NA, NULL); + addflag(lastrace->flags, F_EVASION, -10, NA, NA, NULL); + addflag(lastrace->flags, F_MOVESPEED, SP_SLOW, NA, NA, NULL); + addflag(lastrace->flags, F_UNARMEDSPEED, SP_NORMAL, NA, NA, ""); + addflag(lastrace->flags, F_HASATTACK, 1, 5, NA, "teeth"); + addflag(lastrace->flags, F_STARTOBDT, 50, DT_CHOP, NA, NULL); + addflag(lastrace->flags, F_XPVAL, 6, NA, NA, NULL); + addflag(lastrace->flags, F_DTIMMUNE, DT_COLD, NA, NA, NULL); + addflag(lastrace->flags, F_DTIMMUNE, DT_POISONGAS, NA, NA, NULL); + addflag(lastrace->flags, F_DTIMMUNE, DT_DECAY, NA, NA, NULL); + addflag(lastrace->flags, F_DTVULN, DT_HOLY, NA, NA, NULL); + addflag(lastrace->flags, F_DTVULN, DT_PROJECTILE, NA, NA, NULL); + + + addrace(R_GHAST, "ghast", 50, 'Z', MT_FLESH); + addflag(lastrace->flags, F_UNDEAD, B_TRUE, NA, NA, NULL); + addflag(lastrace->flags, F_STARTIQ, IQ_SMART, NA, 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); + addflag(lastrace->flags, F_RARITY, H_DUNGEON, 55, NA, NULL); + addflag(lastrace->flags, F_SIZE, SZ_HUMAN, NA, NA, NULL); + addflag(lastrace->flags, F_HITDICE, 4, 2, NA, NULL); + addflag(lastrace->flags, F_MOVESPEED, SP_SLOW, NA, NA, NULL); + addflag(lastrace->flags, F_UNARMEDSPEED, SP_NORMAL, NA, NA, ""); + addflag(lastrace->flags, F_HASATTACK, 1, 4, 4, "teeth"); + addflag(lastrace->flags, F_HASATTACK, NA, NA, NA, "strong paralyzing touch"); + addflag(lastrace->flags, F_XPVAL, 15, NA, NA, NULL); + addflag(lastrace->flags, F_DTIMMUNE, DT_COLD, NA, NA, NULL); + addflag(lastrace->flags, F_DTIMMUNE, DT_POISONGAS, NA, NA, NULL); + addflag(lastrace->flags, F_DTIMMUNE, DT_DECAY, NA, NA, NULL); + addflag(lastrace->flags, F_DTVULN, DT_HOLY, NA, NA, NULL); + addflag(lastrace->flags, F_WANTSOBFLAG, F_EDIBLE, NA, NA, NULL); + + addrace(R_GHOUL, "ghoul", 50, 'Z', MT_FLESH); + addflag(lastrace->flags, F_UNDEAD, B_TRUE, NA, NA, NULL); + addflag(lastrace->flags, F_STARTIQ, IQ_MINDLESS, NA, 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); + addflag(lastrace->flags, F_RARITY, H_DUNGEON, 65, NA, NULL); + addflag(lastrace->flags, F_SIZE, SZ_HUMAN, NA, NA, NULL); + addflag(lastrace->flags, F_HITDICE, 3, 2, NA, NULL); + addflag(lastrace->flags, F_EVASION, -10, NA, NA, NULL); + addflag(lastrace->flags, F_MOVESPEED, SP_SLOW, NA, NA, NULL); + addflag(lastrace->flags, F_UNARMEDSPEED, SP_SLOW, NA, NA, ""); + addflag(lastrace->flags, F_HASATTACK, 1, 5, 3, "teeth"); + addflag(lastrace->flags, F_HASATTACK, NA, NA, NA, "paralyzing touch"); + addflag(lastrace->flags, F_XPVAL, 10, NA, NA, NULL); + addflag(lastrace->flags, F_DTIMMUNE, DT_COLD, NA, NA, NULL); + addflag(lastrace->flags, F_DTIMMUNE, DT_POISONGAS, NA, NA, NULL); + addflag(lastrace->flags, F_DTIMMUNE, DT_DECAY, NA, NA, NULL); + addflag(lastrace->flags, F_DTVULN, DT_HOLY, NA, NA, NULL); + addflag(lastrace->flags, F_WANTSOBFLAG, F_EDIBLE, NA, NA, NULL); + + // special monsters + addrace(R_GASCLOUD, "cloud of gas", 0.1, '}', MT_GAS); + 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_STARTIQ, IQ_MINDLESS, NA, NA, NULL); + addflag(lastrace->flags, F_SIZE, SZ_LARGE, NA, NA, NULL); + addflag(lastrace->flags, F_FLYING, B_TRUE, NA, NA, ""); + addflag(lastrace->flags, F_HITDICE, 1, 1, NA, ""); + addflag(lastrace->flags, F_EVASION, 100, NA, NA, NULL); + addflag(lastrace->flags, F_NOBODYPART, BP_WEAPON, NA, NA, NULL); + addflag(lastrace->flags, F_NOBODYPART, BP_SECWEAPON, NA, NA, NULL); + addflag(lastrace->flags, F_NOBODYPART, BP_RIGHTHAND, NA, NA, NULL); + addflag(lastrace->flags, F_NOBODYPART, BP_LEFTHAND, NA, NA, NULL); + addflag(lastrace->flags, F_NOBODYPART, BP_HANDS, NA, NA, NULL); + addflag(lastrace->flags, F_NOBODYPART, BP_HEAD, NA, NA, NULL); + addflag(lastrace->flags, F_NOBODYPART, BP_BODY, NA, NA, NULL); + addflag(lastrace->flags, F_NOBODYPART, BP_SHOULDERS, NA, NA, NULL); + addflag(lastrace->flags, F_NOBODYPART, BP_LEGS, NA, NA, NULL); + addflag(lastrace->flags, F_NOBODYPART, BP_FEET, NA, NA, NULL); + addflag(lastrace->flags, F_NOPACK, B_TRUE, NA, NA, NULL); + addflag(lastrace->flags, F_NOSPELLS, B_TRUE, NA, NA, NULL); + addflag(lastrace->flags, F_SEEINDARK, 4, NA, NA, NULL); + + addrace(R_DANCINGWEAPON, "dancing weapon", 0, ')', MT_METAL); + addflag(lastrace->flags, F_SIZE, SZ_SMALL, NA, NA, NULL); + addflag(lastrace->flags, F_FLYING, B_TRUE, NA, NA, ""); + addflag(lastrace->flags, F_HITDICE, 2, NA, NA, ""); + addflag(lastrace->flags, F_EVASION, 50, NA, 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_NOBODYPART, BP_SECWEAPON, NA, NA, NULL); + addflag(lastrace->flags, F_NOBODYPART, BP_RIGHTHAND, NA, NA, NULL); + addflag(lastrace->flags, F_NOBODYPART, BP_LEFTHAND, NA, NA, NULL); + addflag(lastrace->flags, F_NOBODYPART, BP_HANDS, NA, NA, NULL); + addflag(lastrace->flags, F_NOBODYPART, BP_HEAD, NA, NA, NULL); + addflag(lastrace->flags, F_NOBODYPART, BP_BODY, NA, NA, NULL); + addflag(lastrace->flags, F_NOBODYPART, BP_SHOULDERS, NA, NA, NULL); + addflag(lastrace->flags, F_NOBODYPART, BP_LEGS, NA, NA, NULL); + addflag(lastrace->flags, F_NOBODYPART, BP_FEET, NA, NA, NULL); + addflag(lastrace->flags, F_NOSPELLS, B_TRUE, NA, NA, NULL); + addflag(lastrace->flags, F_SEEINDARK, UNLIMITED, NA, NA, NULL); +} + +int isbleeding(lifeform_t *lf) { + float hppct; + hppct = ((float)lf->hp / (float) lf->maxhp) * 100; + + if (hppct <= 15) return B_TRUE; + return B_FALSE; +} + +int isblind(lifeform_t *lf) { + if (lfhasflag(lf, F_BLIND)) { + return B_TRUE; + } + if (lfhasflagval(lf, F_NOBODYPART, BP_EYES, NA, NA, NULL)) { + return B_TRUE; + } + return B_FALSE; +} + +enum BURDENED isburdened(lifeform_t *lf) { + float cur,max; + float ratio; + // monsters can't be burdened! + if (!isplayer(lf)) { + return BR_NONE; + } + max = getmaxcarryweight(lf); + cur = getobpileweight(lf->pack); + ratio = cur / max; + if (ratio > 1.5) { + return BR_OVERLOADED; + } else if (ratio > 1) { + return BR_BURDENED; + } + return BR_NONE; } int isdead(lifeform_t *lf) { @@ -965,7 +3789,6 @@ int isdead(lifeform_t *lf) { } void killlf(lifeform_t *lf) { - int i; lifeform_t *nextone, *lastone, *l; map_t *m; flag_t *f; @@ -975,6 +3798,9 @@ void killlf(lifeform_t *lf) { // remove references lf->cell->lf = NULL; + // shouldn't need this... + lf->cell = NULL; + // check if anyone is targetting us. // if so, stop targetting us now that // we are dead. @@ -997,9 +3823,6 @@ void killlf(lifeform_t *lf) { free(lf->pack); // kill flags - while (lf->flags->first) { - killflag(lf->flags->first); - } killflagpile(lf->flags); // remove from list @@ -1022,14 +3845,126 @@ void killlf(lifeform_t *lf) { } } +int isfleeing(lifeform_t *lf) { + if (lfhasflag(lf, F_FLEEFROM)) { + return B_TRUE; + } + return B_FALSE; +} + +int isfreebp(lifeform_t *lf, enum BODYPART bp) { + if (hasobwithflagval(lf->pack, F_EQUIPPED, bp, NA, NA, NULL)) return B_FALSE; + + if ((bp == BP_WEAPON) || (bp == BP_SECWEAPON)) { + object_t *o; + enum BODYPART otherbp; + // check for 2handed weapons in other hand too + if (bp == BP_WEAPON) otherbp = BP_SECWEAPON; + else otherbp = BP_WEAPON; + + + o = hasobwithflagval(lf->pack, F_EQUIPPED, otherbp, NA, NA, NULL); + if (o && hasflag(o->flags, F_TWOHANDED)) { + return B_FALSE; + } + } + return B_TRUE; +} + +int isgenius(lifeform_t *lf) { + enum IQBRACKET iqb; + iqb = getiqname(getattr(lf, A_IQ), NULL); + + if (lfhasflag(lf, F_OMNIPOTENT) || + lfhasflag(lf, F_EXTRAINFO) || + iqb >= IQ_GENIUS) { + return B_TRUE; + } + return B_FALSE; +} + +int isingunrange(lifeform_t *lf, cell_t *where) { + object_t *gun; + int range; + gun = getfirearm(lf); + if (!gun) return B_FALSE; + range = getfirearmrange(gun); + if (getcelldist(lf->cell, where) <= range) { + return B_TRUE; + } + return B_FALSE; +} + + +int isimmobile(lifeform_t *lf) { + if (lfhasflag(lf, F_GRAVBOOSTED)) { + return B_TRUE; + } + if (lfhasflag(lf, F_PARALYZED)) { + return B_TRUE; + } + return B_FALSE; +} + +int ispeaceful(lifeform_t *lf) { + if (lfhasflag(lf, F_HOSTILE)) { + return B_FALSE; + } + if (lfhasflagval(lf, F_TARGET, player->id, NA, NA, NULL)) { + return B_FALSE; + } + return B_TRUE; +} + +int isplayer(lifeform_t *lf) { + if (lf && (lf->controller == C_PLAYER)) { + return B_TRUE; + } + return B_FALSE; +} + +int ispolymorphed(lifeform_t *lf) { + if (lfhasflag(lf, F_POLYMORPHED)) { + return B_TRUE; + } else { + return B_FALSE; + } +} + +void killjob(job_t *job) { + job_t *nextone, *lastone; + + // free mem + free(job->name); + killflagpile(job->flags); + + // remove from list + nextone = job->next; + if (nextone != NULL) { + nextone->prev = job->prev; + } else { /* last */ + lastjob = job->prev; + } + + if (job->prev == NULL) { + /* first */ + nextone = job->next; + free(job); + job = nextone; + } else { + lastone = job->prev; + free (lastone->next ); + lastone->next = nextone; + } +} void killrace(race_t *race) { - int i; race_t *nextone, *lastone; // free mem free(race->name); + killflagpile(race->flags); // remove from list nextone = race->next; @@ -1051,80 +3986,1101 @@ void killrace(race_t *race) { } } +// lose hp, and adjust damage based on resistances +int losehp(lifeform_t *lf, unsigned int amt, enum DAMTYPE damtype, lifeform_t *fromlf, char *damsrc) { + return losehp_real(lf, amt, damtype, fromlf, damsrc, B_TRUE); +} -void losehp(lifeform_t *lf, int amt, int damtype, lifeform_t *fromlf, char *damsrc) { +int losehp_real(lifeform_t *lf, unsigned int amt, enum DAMTYPE damtype, lifeform_t *fromlf, char *damsrc, int reducedam) { char buf[BUFLEN]; - lf->hp -= amt; - if (lf->lastdam) { - free(lf->lastdam); + + if (isplayer(lf)) { + statdirty = B_TRUE; } + // adjust damage! + if (reducedam) { + adjustdamlf(lf, &amt, damtype); + } + + // stop resting/running! + interrupt(lf); + + // occasionally drop blood + if (rnd(1,3) == 1) { + bleed(lf); + } + + // take damage + lf->hp -= amt; + + // fill in lastdam... + lf->lastdamtype = damtype; + + // if they died + if (lf->hp <= 0) { + //if (!fromlf || (fromlf == player)) { + if (fromlf && isplayer(fromlf)) { + addflag(lf->flags, F_KILLEDBYPLAYER, B_TRUE, NA, NA, NULL); + } + } else { + // effects based on damage + if ((damtype == DT_COLD) && lfhasflag(lf, F_COLDBLOOD)) { + // slow them + addtempflag(lf->flags, F_SLOWMOVE, 5, NA, NA, NULL, 10); + } + } + + // replace 'the' at start of damsrc with 'a' if (strstr(damsrc, "the ") == damsrc) { sprintf(buf, "a %s", (damsrc+4)); } else { strcpy(buf, damsrc); } - lf->lastdam = strdup(buf); + setlastdam(lf, buf); // fight back if required - fightback(lf, fromlf); + if (fromlf) { + fightback(lf, fromlf); + } + + // update screen + drawstatus(); + updatestatus(); + return amt; +} + +void makenoise(lifeform_t *lf, enum NOISETYPE nid) { + flag_t *f; + char buf[BUFLEN]; + f = hasflagval(lf->flags, F_NOISETEXT, nid, NA, NA, NULL); + if (f) { + char *dummy; + char *verb, *noun; + verb = strtok_r(f->text, "^", &dummy); + noun = strtok_r(NULL, "^", &dummy); + + + if (haslos(player, lf->cell)) { + getlfname(lf, buf); + msg("%s %s.", buf, verb); + } else { + youhear(lf->cell, noun); + } + } +} + +void maycastspellschool(flagpile_t *fp, enum SPELLSCHOOL ss) { + objecttype_t *ot; + for (ot = objecttype ; ot ; ot = ot->next) { + if (ot->obclass->id == OC_SPELL) { + if (hasflagval(ot->flags, F_SPELLSCHOOL, ss, NA, NA, NULL)) { + addflag(fp, F_CANCAST, ot->id, NA, NA, NULL); + } + } + } + +} + + +int modattr(lifeform_t *lf, enum ATTRIB attr, int amt) { + // already at max/min? + if ((amt > 0) && (lf->att[attr] >= 18)) { + return B_TRUE; + } + if ((amt < 0) && (lf->att[attr] <= 0)) { + return B_TRUE; + } + + lf->att[attr] += amt; + + // increase base if required + if (lf->att[attr] > lf->baseatt[attr]) { + lf->baseatt[attr] = lf->att[attr]; + } + + // enforce limits + if (lf->att[attr] > 18) lf->att[attr] = 18; + if (lf->att[attr] < 0) lf->att[attr] = 0; + + if ((amt != 0) && (isplayer(lf) || haslos(player, lf->cell))) { + char lfname[BUFLEN], verb[BUFLEN], adverb[BUFLEN]; + getlfname(lf, lfname); + if (isplayer(lf)) strcpy(verb, "feel"); + else strcpy(verb, "looks"); + if (amt > 0) { + switch (attr) { + case A_STR: + strcpy(adverb, "stronger"); + break; + case A_DEX: + strcpy(adverb, "more agile"); + break; + case A_IQ: + strcpy(adverb, "smarter"); + break; + default: + break; + } + } else { // ie. amt < 0 + switch (attr) { + case A_STR: + strcpy(adverb, "weaker"); + break; + case A_DEX: + strcpy(adverb, "less agile"); + break; + case A_IQ: + strcpy(adverb, "foolish"); + break; + default: + break; + } + } + msg("%s %s %s!", lfname, verb, adverb); + } + return B_FALSE; +} + +void modhunger(lifeform_t *lf, int amt) { + flag_t *f; + int prehlev, posthlev; + f = hasflag(lf->flags, F_HUNGER); + if (!f) { + return; + } + prehlev = gethungerlevel(f->val[0]); + f->val[0] += amt; + posthlev = gethungerlevel(f->val[0]); + + // announce + if (isplayer(lf)) { + if (posthlev == H_STARVED) { + msg("You collapse from starvation."); + setlastdam(lf, "starvation"); + lf->hp = 0; + } else if (prehlev != posthlev) { + if (posthlev != H_NONE) { + char buf[BUFLEN]; + int needfeeling = B_FALSE; + int needexclam = B_FALSE; + switch (posthlev) { + case H_PECKISH: + case H_HUNGRY: + case H_VHUNGRY: + needfeeling = B_TRUE; + break; + default: + needfeeling = B_FALSE; + break; + } + switch (posthlev) { + case H_STUFFED: + case H_STARVING: + needexclam = B_TRUE; + break; + default: + needexclam = B_FALSE; + break; + } + + + + + gethungername(posthlev, buf); + msg("You are %s%s%s%c", + ((amt < 0) && (posthlev > H_NONE)) ? "still " : "", + needfeeling ? "feeling " : "", + buf, + (needexclam) ? '!' : '.'); + } + } + } + f->val[0] += amt; } // give initial equiment to a lifeform void outfitlf(lifeform_t *lf) { - flag_t *f; - object_t *bestwep; - char buf[BUFLEN]; - object_t *o; + givestartobs(lf, lf->flags); - // give start objects - for (f = lf->flags->first ; f ; f = f->next) { - if (f->id == F_STARTOB) { - if (rnd(1,100) <= f->val[0]) { - addob(lf->pack, f->text); + // weild/wear stuff + autoweild(lf); +} + + +int pickup(lifeform_t *lf, object_t *what, int howmany) { + char obname[BUFLEN]; + object_t *o; + //flag_t *f; + int failed = B_FALSE; + + if (!what) { + return B_TRUE; + } + if (howmany == 0) { + return B_TRUE; + } + + getobname(what, obname, howmany); + if (howmany == ALL) howmany = what->amt; + + + if (!canpickup(lf, what)){ + // tell the player why! + if (lf->controller == C_PLAYER) { + switch (reason) { + case E_NOSPACE: + msg("Your pack is too full to fit any more objects."); + break; + case E_NOPACK: + msg("You lack the ability to carry things!"); + break; + case E_NOPICKUP: + msg("You can't pick up %s!",obname); + break; + case E_TOOHEAVY: + msg("%s %s too heavy to lift!",obname, (what->amt == 1) ? "is" : "are"); + break; + case E_GRAVBOOSTED: + msg("The %s feels too heavy to lift!",noprefix(obname)); + break; + default: + msg("For some reason, you cannot pick up %s!",obname); + break; } - } else if (f->id == F_STARTOBDT) { - if (rnd(1,100) <= f->val[0]) { - getrandomobwithdt(NULL, f->val[1], buf); - addob(lf->pack, buf); + } + failed = B_TRUE; + } + + if (!failed) { + if (touch(lf, what)) { + taketime(lf, SPEED_PICKUP); + return B_TRUE; + } + if (hasflag(what->flags, F_DEAD)) { + taketime(lf, SPEED_PICKUP); + return B_TRUE; + } + } + + // special case + + if (!failed) { + // try to move whatever was selected + o = moveob(what, lf->pack, howmany); + if (o) { // if pickup was successful... + if (isplayer(lf)) { + msglower("%c - %s.",o->letter, obname); + } else if (haslos(player, lf->cell)) { + char buf[BUFLEN]; + getlfname(lf, buf); + msg("%s picks up %s.",buf, obname); + } + /* + taketime(lf, (SPEED_PICKUP * howmany)); + */ + taketime(lf, SPEED_PICKUP); + // TODO: update burdened status + } else { + // tell the player why! + if (lf->controller == C_PLAYER) { + switch (reason) { + case E_NOSPACE: + msg("Your pack is too full to fit any more objects."); + break; + default: + msg("For some reason, you cannot pick up %s!",obname); + break; + } + } + failed = B_TRUE; + } + } + + if (failed) { + // if object isn't where player is, move it to player's pile + // for example, if obejct was being picked up via telekenesis + if (what->pile->where != lf->cell) { + moveob(what, lf->cell->obpile, howmany); + } + + return B_TRUE; + } + + return B_FALSE; +} + + + +void precalclos(lifeform_t *lf) { + int x,y; + cell_t *c; + int maxvisrange; + cell_t *los[MAX_MAPW * MAX_MAPH]; + int nlos; + int i; + + // free existing structures + if (lf->los) { + free(lf->los); + } + + + nlos = 0; + + maxvisrange = getvisrange(lf); + for (y = lf->cell->y - maxvisrange; y <= lf->cell->y + maxvisrange ; y++) { + for (x = lf->cell->x - maxvisrange; x <= lf->cell->x + maxvisrange ; x++) { + c = getcellat(lf->cell->map, x, y); + // + if ((c != lf->cell) && haslos(lf, c)) { + los[nlos] = c; + nlos++; } } } - // weild weapons if required - bestwep = getbestweapon(lf); - if (bestwep) { - weild(lf, bestwep); - // make sure it doesn't take any time - lf->timespent = 0; + // now fill in lifeform structure + lf->los = malloc(sizeof(cell_t *) * nlos); + for (i = 0; i < nlos; i++) { + lf->los[i] = los[i]; + } + lf->nlos = nlos; +} + +int push(lifeform_t *lf, object_t *o, int dir) { + cell_t *obcell, *dstcell; + char obname[BUFLEN]; + getobname(o, obname, o->amt); + + // remember cells + obcell = o->pile->where; + dstcell = getcellindir(obcell, dir); + + if (!obcell || !dstcell) { + return B_TRUE; } - // weild armour if required + // move object + o = moveob(o, dstcell->obpile, o->amt); + if (!o) { + return B_TRUE; + } + + // move player + moveto(lf, obcell); + + // take time - twice normal + taketime(lf, getmovespeed(lf) * 2); + + // announce + if (lf->controller == C_PLAYER) { + msg("You push %s.", obname); + } else if (haslos(player, dstcell)) { + char buf[BUFLEN]; + getlfname(lf, buf); + capitalise(buf); + msg("%s pushes %s.", haslos(player, lf->cell) ? buf : "Something", obname); + } + + touch(lf, o); + + return B_FALSE; + +} + +// move lf to the _START_ of the destination map list +void relinklf(lifeform_t *src, map_t *dst) { + map_t *srcmap; + + srcmap = src->cell->map; + + // unlink this player from the current list + if (src->prev == NULL) { + // first + srcmap->lf = src->next; + } else { + // not first + src->prev->next = src->next; + } + if (src->next == NULL) { + // last + srcmap->lastlf = src->prev; + } else { + // not last + src->next->prev = src->prev; + } + + // add this lf to the START of the list on the new map + if (dst->lf == NULL) { + // first (and only) element in new list + dst->lf = src; + src->prev = NULL; + src->next = NULL; + dst->lastlf = src; + } else { + lifeform_t *aa; + + // go to start of list + aa = dst->lf; + + dst->lf = src; + src->prev = NULL; + src->next = aa; + + aa->prev = src; + } + + // note this function will NOT set the lifeform's cell to one on the new map. + + // now rise up + sortlf(dst, src); +} + +// strat resting... +void startresting(lifeform_t *lf) { + addflag(lf->flags, F_RESTING, B_TRUE, NA, NA, NULL); + + if (lf->controller == C_PLAYER) { + msg("You start resting..."); + } else if (haslos(player, lf->cell)) { + char buf[BUFLEN]; + getlfname(lf, buf); + capitalise(buf); + msg("%s starts resting."); + } +} + +int rolliq(enum IQBRACKET bracket) { + int roll = 0; + switch (bracket) { + case IQ_MINDLESS: + roll = 0; + break; + case IQ_VEGETABLE: + roll = rnd(1,3); + break; + case IQ_ANIMAL: + roll = rnd(4,6); + break; + case IQ_DIMWITTED: + roll = rnd(4,6); + break; + case IQ_DOPEY: + roll = rnd(7,9); + break; + case IQ_AVERAGE: + roll = rnd(10,12); + break; + case IQ_SMART: + roll = rnd(13,15); + break; + case IQ_ENLIGHTENED: + roll = rnd(16,17); + break; + case IQ_GENIUS: + roll = 18; + break; + default: + roll = rolldie(3,6); + break; + } + return roll; +} + +int rolldex(enum DEXBRACKET bracket) { + int roll = 0; + switch (bracket) { + case DX_INCOMPETENT: + roll = 0; + break; + case DX_OAFISH: + roll = rnd(1,2); + break; + case DX_INEPT: + roll = rnd(3,4); + break; + case DX_CLUMSY: + roll = rnd(5,6); + break; + case DX_AWKWARD: + roll = rnd(7,8); + break; + case DX_AVERAGE: + roll = 9; + break; + case DX_DEXTROUS: + roll = rnd(10,11); + break; + case DX_NIMBLE: + roll = rnd(12,13); + break; + case DX_AGILE: + roll = rnd(14,15); + break; + case DX_SWIFT: + roll = rnd(16,17); + break; + case DX_SUPERSONIC: + roll = 18; + break; + default: + roll = rolldie(3,6); + break; + } + return roll; +} + +int rollstr(enum STRBRACKET bracket) { + int roll = 0; + switch (bracket) { + case ST_HELPLESS: + roll = 0; + break; + case ST_FEEBLE: + roll = rnd(1,3); + break; + case ST_VWEAK: + roll = rnd(4,6); + break; + case ST_WEAK: + roll = rnd(7,9); + break; + case ST_AVERAGE: + roll = rnd(10,12); + break; + case ST_STRONG: + roll = rnd(13,15); + break; + case ST_MIGHTY: + roll = rnd(16,17); + break; + case ST_TITANIC: + roll = 18; + break; + default: + roll = rolldie(3,6); + break; + } + return roll; +} + +int savingthrow(lifeform_t *lf, enum ATTRIB attr) { + int roll; + int attrib; + int mod; + int db = B_FALSE; + attrib = getattr(lf, attr); + mod = (lf->level / 3); + roll = rolldie(3, 6) - mod; // 3d6, modified for level + if (db) msg("sthrw vs %s: attr:%d, mod:%d, roll:%d, ",getattrname(attr), attrib, mod, roll); + if (roll <= attrib) { + return B_TRUE; + } + return B_FALSE; +} + +// returns TRUE if something happened +int scare(lifeform_t *lf, lifeform_t *scarer, int howlong) { + if (!scarer) return B_FALSE; + + // immune to fear? + if (lfhasflag(lf, F_UNDEAD)) { + return B_FALSE; + } + // not intelligent enough to be scared? + if (getdexname(getattr(scarer, A_IQ), NULL) <= IQ_VEGETABLE) { + return B_FALSE; + } + + if (!savingthrow(lf, A_IQ)) { + flag_t *f; + // already fleeing? + f = hasflagval(lf->flags, F_FLEEFROM, scarer->id, NA, NA, NULL); + if (f) { + // update time + if (f->lifetime != PERMENANT) { + if (f->lifetime < howlong) { + f->lifetime = howlong; + } + } + } else { + addtempflag(lf->flags, F_FLEEFROM, scarer->id, NA, NA, NULL, howlong); + } + return B_TRUE; + } + return B_FALSE; +} + + +int setammo(lifeform_t *lf, object_t *ammo) { + object_t *gun; + object_t *o; + char gunname[BUFLEN],ammoname[BUFLEN]; + + if (ammo) { + getobname(ammo, ammoname, ammo->amt); + } + + gun = getfirearm(lf); + if (!gun) { + if (isplayer(lf)) { + msg("You have no firearm weilded!"); + } + return B_TRUE; + } + getobname(gun, gunname, gun->amt); + + + if (ammo && !isammofor(ammo, gun)) { + if (isplayer(lf)) { + msg("You can't load %s with %s!", gunname, ammoname); + } + return B_TRUE; + } + + + // remove current ammo for (o = lf->pack->first ; o ; o = o->next) { - if (canwear(lf, o)) { - wear(lf, o); + flag_t *f; + f = hasflag(o->flags, F_CURAMMO); + if (f) { + killflag(f); + } + } + + + if (ammo) { + addflag(ammo->flags, F_CURAMMO, B_TRUE, NA, NA, NULL); + if (isplayer(lf)) { + msg("Using %s as ammo for %s.", ammoname, gunname); + } + } else { + if (isplayer(lf)) { + msg("No ammo equipped for %s.", gunname); + } + } + return B_FALSE; +} + +void setattr(lifeform_t *lf, enum ATTRIB attr, int val) { + lf->att[attr] = val; + if (lf->att[attr] > lf->baseatt[attr]) { + lf->baseatt[attr] = lf->att[attr]; + } +} + +void setguntarget(lifeform_t *lf, lifeform_t *targ) { + flag_t *f; + f = hasflag(lf->flags, F_GUNTARGET); + if (f) { + killflag(f); + } + + if (targ) { + addflag(lf->flags, F_GUNTARGET, targ->id, NA, NA, NULL); + if (isplayer(lf)) { + // announce + char targname[BUFLEN]; + getlfname(targ, targname); + msg("Targetted: %s.",noprefix(targname)); // remove 'the ' + } + } else { + if (isplayer(lf)) { + // announce + msg("Targetted: nothing."); } } } -void taketime(lifeform_t *lf, int howlong) { +void setrace(lifeform_t *lf, enum RACE rid) { + flag_t *f,*nextf; + int i; + race_t *newrace; + char buf[BUFLEN]; + + + newrace = findrace(rid); + + + if (gamestarted && lf->race) { + race_t *origrace; + + statdirty = B_TRUE; + + f = lfhasflag(lf, F_ORIGRACE); + if (f) { + origrace = findrace(f->val[0]); + } + // announce + if (origrace && (newrace == origrace)) { + if (isplayer(lf)) { + msg("You revert to your original form!"); + } else if (haslos(player, lf->cell)) { + getlfname(lf, buf); + msg("The %s transforms back to its original form!", newrace->name); + } + } else { + if (isplayer(lf)) { + msg("You transform into %s %s!", isvowel(newrace->name[0]) ? "an" : "a", newrace->name); + } else if (haslos(player, lf->cell)) { + getlfname(lf, buf); + msg("%s transforms into %s %s!", buf, isvowel(newrace->name[0]) ? "an" : "a", newrace->name); + } + } + } + + // first remove flags from existing race + for (f = lf->flags->first ; f ; f = nextf) { + nextf = f->next; + if (f->lifetime == FROMRACE) { + killflag(f); + } + } + + // set race + lf->race = newrace; + + // inherit flags from race + copyflags(lf->flags, lf->race->flags, FROMRACE); + + + // generate hp/maxhp from hit dice + lf->maxhp = 0; + for (i = 0; i < lf->level; i++) { + lf->maxhp += rollhitdice(lf); + assert(lf->maxhp > 0); + } + lf->hp = lf->maxhp; + + // generate mp, if you have it. + f = hasflag(lf->flags, F_MPDICE); + if (f) { + lf->maxmp = f->val[0] * 4; + for (i = 0; i < lf->level-1; i++) { + lf->maxmp += rollmpdice(lf); + } + lf->mp = lf->maxmp; + } + + // generate stats + f = hasflag(lf->flags, F_STARTSTR); + if (f) { + i = f->val[0]; + lf->att[A_STR] = rollstr(i); + } else { + // average + lf->att[A_STR] = rollstr(ST_AVERAGE); + } + + f = hasflag(lf->flags, F_STARTDEX); + if (f) { + i = f->val[0]; + lf->att[A_DEX] = rolldex(i); + } else { + // average + lf->att[A_DEX] = rolldex(DX_AVERAGE); + } + + f = hasflag(lf->flags, F_STARTIQ); + if (f) { + i = f->val[0]; + lf->att[A_IQ] = rolliq(i); + } else { + lf->att[A_IQ] = rolliq(IQ_AVERAGE); + } + + // base attrs + lf->baseatt[A_STR] = lf->att[A_STR]; + lf->baseatt[A_DEX] = lf->att[A_DEX]; + lf->baseatt[A_IQ] = lf->att[A_IQ]; + + // TODO + // check whether: + // new race can equip things (F_NOBODYPART xx) + // new race can hold objects (F_NOPACK xx) + // new race can use magic (F_NOSPELLS) + if (gamestarted) { + enum BODYPART bp; + object_t *o,*nexto; + + // no pack? + if (lfhasflag(lf, F_NOPACK)) { + // drop everything + if (countobs(lf->pack)) { + if (isplayer(lf)) { + msg("Your possessions drop to the ground!"); + } else if (haslos(player, lf->cell)) { + getlfname(lf, buf); + msg("%s%s possessions drop to the ground!",buf, getpossessive(buf)); + } + } + for (o = lf->pack->first ; o ; o = nexto) { + nexto = o->next; + + moveob(o, lf->cell->obpile, o->amt); + } + } + + for (bp = BP_WEAPON; bp < MAXBODYPARTS; bp++) { + if (lfhasflagval(lf, F_NOBODYPART, bp, NA, NA, NULL)) { + for (o = lf->pack->first; o ; o = nexto ) { + nexto = o->next; + if (hasflagval(o->flags, F_EQUIPPED, bp, NA, NA, NULL)) { + char obname[BUFLEN]; + getobname(o, obname, o->amt); + // drop it! + if (isplayer(lf)) { + msg("Your %s drops to the ground!",noprefix(obname)); + } else if (haslos(player, lf->cell)) { + getlfname(lf, buf); + msg("%s%s %s drop to the ground!",buf, getpossessive(buf), + noprefix(obname)); + } + moveob(o, lf->cell->obpile, o->amt); + } + } + } + } + } // end if gamestarted +} + +void setlastdam(lifeform_t *lf, char *buf) { + if (lf->lastdam) { + free(lf->lastdam); + } + lf->lastdam = strdup(buf); +} + +void interrupt(lifeform_t *lf) { + stopresting(lf); + stoprunning(lf); + killflagsofid(lf->flags, F_AUTOCMD); +} + +int shoot(lifeform_t *lf) { + object_t *gun,*ammo; + lifeform_t *targ; + int firespeed; + + reason = E_OK; + gun = getfirearm(lf); + if (!gun) { + reason = E_NOTEQUIPPED; + return B_TRUE; + } + // get target + targ = getguntarget(player); + if (!targ) { + reason = E_NOTARGET; + return B_TRUE; + } + // get ammo + ammo = getammo(lf); + if (!ammo) { + reason = E_NOAMMO; + return B_TRUE; + } + + // get fire speed + firespeed = getfirearmspeed(gun); + + taketime(lf, getattackspeed(lf)); + + fireat(player, ammo, targ->cell, firespeed, gun); + return B_FALSE; +} + +void sortlf(map_t *map, lifeform_t *lf) { + if ((lf->next) && lf->timespent >= lf->next->timespent) { + lifeform_t *temp; + // remember next element + temp = lf->next; + + // remove this element from list + // don't bother checking if (l->next == NULL) as we know + // this won't be true due to the for loop condition + if (lf->prev == NULL) { + // first + map->lf = lf->next; + lf->next->prev = NULL; + } else { + // not first + lf->prev->next = lf->next; + lf->next->prev = lf->prev; + } + + // TESTING: re-add at correct position. + while (temp->next && (temp->next->timespent <= lf->timespent)) { +//dblog("moving past %d %s (timespend=%d)...",temp->next->id, temp->next->race->name, temp->next->timespent); + temp = temp->next; + } + + // re-add element afterwards + lf->next = temp->next; + lf->prev = temp; + temp->next = lf; + if (lf->next == NULL) { + map->lastlf = lf; + } else { + lf->next->prev = lf; + } + } else if ((lf->prev) && (lf->timespent < lf->prev->timespent)) { + lifeform_t *temp; + // remember previous element + temp = lf->prev; + + // remove this element from list + // don't bother checking if (l->prev == NULL) as we know + // this won't be true due to the for loop condition + if (lf->next == NULL) { + // last + map->lastlf = lf->prev; + lf->prev->next = NULL; + } else { + // not last + lf->prev->next = lf->next; + lf->next->prev = lf->prev; + } + + // re-add at correct position. + while (temp->prev && (temp->prev->timespent > lf->timespent)) { +//dblog("moving past %d %s (timespend=%d)...",temp->next->id, temp->next->race->name, temp->next->timespent); + temp = temp->prev; + } + + // re-add element before + lf->next = temp; + lf->prev = temp->prev; + temp->prev = lf; + if (lf->prev == NULL) { + map->lf = lf; + } else { + lf->prev->next = lf; + } + } +} + +void stopresting(lifeform_t *lf) { + flag_t *f; + // stop resting! + f = hasflag(lf->flags, F_RESTING); + if (f) { + killflag(f); + //lf->timespent = 0; + if (isplayer(lf)) { + msg("Your rest is interrupted!"); + } else if (haslos(player, lf->cell)) { + char buf[BUFLEN]; + getlfname(lf, buf); + capitalise(buf); + msg("%s stops resting.",buf); + } + } +} + +void stoprunning(lifeform_t *lf) { + flag_t *f; + f = hasflag(lf->flags, F_RUNNING); + if (f) { + killflag(f); + } +} + +int takeoff(lifeform_t *lf, object_t *o) { + flag_t *f; + char obname[BUFLEN]; + char buf[BUFLEN]; + + if (!isarmour(o)) { + return unweild(lf, o); + } + + getobname(o, obname, 1); + + if (!cantakeoff(lf, o)) { + switch (reason) { + case E_CURSED: + if (lf->controller == C_PLAYER) { + msg("Your %s appears to be stuck to you!", noprefix(obname)); + o->blessknown = B_TRUE; + } + // still take time + taketime(lf, getmovespeed(lf)); + break; + case E_NOTEQUIPPED: + if (lf->controller == C_PLAYER) { + msg("You are not wearing that!"); + } + break; + default: + if (lf->controller == C_PLAYER) { + msg("For some reason, you cannot remove your %s!", noprefix(obname)); + } + // still take time + taketime(lf, getmovespeed(lf)); + break; + } + return B_TRUE; + } + + // remove the equipped flag + f = hasflag(o->flags, F_EQUIPPED); + killflag(f); + + taketime(lf, getmovespeed(lf)); + if (gamestarted) { + if (lf->controller == C_PLAYER) { + msg("You take off %s.", obname); + } else if (haslos(player, lf->cell)) { + getlfname(lf, buf); + capitalise(buf); + msg("%s takes off %s.", buf, obname); + } + + } + + // lose flags + loseobflags(lf, o, F_EQUIPCONFER); + + if (obproduceslight(o)) { + calclight((getoblocation(o))->map); + drawscreen(); + } + + return B_FALSE; +} + +void taketime(lifeform_t *lf, long howlong) { int db = B_TRUE; + map_t *map; + + if (isplayer(lf)) { + statdirty = B_TRUE; + } + + map = lf->cell->map; assert(howlong > 0); if (db && gamestarted && haslos(player, lf->cell)) { - lifeform_t *l; dblog("lfid %d (%s) spending %d time\n",lf->id,lf->race->name, howlong); } // inc timespent lf->timespent += howlong; + assert(lf->timespent >= 0); + + // time-based effects on lifeforms (eg hp regeneration) go here... + modhunger(lf, howlong); + // TODO: decrement lifeform's (or their object's) temporary flags + // if you don't have a map, start forgetting the dungeon - if (lf->controller == C_PLAYER) { - if (!hasknownob(lf->pack, OT_MAP)) { - lf->forgettimer += ((float)howlong / 15.0); + if (isplayer(lf)) { + if (!lfhasflag(lf, F_PHOTOMEM)) { + lf->forgettimer += ((float)howlong / 100.0); if (lf->forgettimer > 1) { int amt; @@ -1135,6 +5091,883 @@ void taketime(lifeform_t *lf, int howlong) { } } } + + // now move player up in linked list... + sortlf(map, lf); + + } +int throwat(lifeform_t *thrower, object_t *o, cell_t *where) { + taketime(thrower, SPEED_THROW); + return fireat(thrower, o, where, getthrowspeed(getattr(thrower, A_STR)), NULL); +} +// lf effects which happen every xx ticks +void timeeffectslf(lifeform_t *lf) { + flag_t *f; + f = hasflag(lf->flags, F_FOODPOISONED); + if (f) { + //sprintf(buf, "eating a bad %s",strchr(obname, ' ')); + // chance of losing hp + if (rnd(0,3)) { + char buf[BUFLEN]; + if (isplayer(lf)) { + msg("You vomit violently."); + } + sprintf(buf, "food poisoning^from a bad %s",noprefix(f->text)); + losehp(lf, 2, DT_DIRECT, NULL, buf); + } + } + // decrement flags + timeeffectsflags(lf->flags); + // revert to original form if a polymorph just expired + if (lf->polyrevert) { + enum RACE rid = R_NONE; + race_t *r; + flag_t *ff; + // change back + ff = lfhasflag(lf, F_ORIGRACE); + if (ff) { + rid = ff->val[0]; + } else { + rid = R_NONE; // should never happen! + } + r = findrace(rid); + if (r) { + setrace(lf, r->id); + } else { + if (isplayer(lf)) { + msg("For some reason, you are unable to revert to your original form!"); + } + } + lf->polyrevert = B_FALSE; + } + +} + +////////////////////////////////// +// effects which happen before every TURN +// (ie. the faster the player is, the faster they happen) +// eg. damage from walking on things +////////////////////////////////// +void turneffectslf(lifeform_t *lf) { + int db = B_FALSE; + map_t *map; + object_t *o; + flag_t *f; + char buf[BUFLEN]; + int i; + + map = lf->cell->map; + + if (db) dblog("starting turneffectslf for lf id %d %s", lf->id, lf->race->name); + + // update where player knows + // (but without a map you will then slowly forget it) + if (isplayer(lf)) { + updateknowncells(); + } else { + lf->ignorecell = NULL; + } + + // stuck inside solid cells? + if (!cellwalkable(lf, lf->cell, NULL)) { + if (isplayer(lf)) { + msg("You reintegrate inside a solid object!"); + } + losehp(lf, 9999, DT_DIRECT, NULL, "re-integration inside a solid object"); + //} + } + + // regeneration + sumflags(lf->flags, F_REGENERATES, &i, NULL, NULL); + if (i > 0) { + // heal hp + gainhp(lf, i); + } + + // MP regeneration + sumflags(lf->flags, F_MPREGEN, &i, NULL, NULL); + if (i > 0) { + // heal mp + gainmp(lf, i); + } + + if (lfhasflag(lf, F_MAGSHIELD)) { + object_t *nexto; + // metal weapons? + for (o = lf->pack->first ; o ; o = nexto) { + nexto = o->next; + if (ismetal(o->material->id)) { + f = isequipped(o); + if (f && ((f->val[0] == BP_WEAPON) || (f->val[0] == BP_SECWEAPON))) { + cell_t *c; + // weapon flies away + c = getrandomadjcell(lf->cell, WE_NOTSOLID); + if (!c) c = lf->cell; + moveob(o, c->obpile, o->amt); + if (isplayer(lf)) { + getobname(o, buf, o->amt); + msg("Your %s flies out of your hands!",noprefix(buf), (o->amt == 1) ? "flies" : "fly"); + } else if (haslos(player, lf->cell)) { + char lfname[BUFLEN]; + getobname(o, buf, o->amt); + getlfname(lf, lfname); + msg("%s%s %s flies out of its hands!",lfname, getpossessive(lfname), + noprefix(buf), (o->amt == 1) ? "flies" : "fly"); + } + } + } + } + // objects on the ground? + for (o = lf->cell->obpile->first ; o ; o = nexto) { + nexto = o->next; + if (ismetal(o->material->id)) { + cell_t *c; + // object flies away + c = getrandomadjcell(lf->cell, WE_NOTSOLID); + if (!c) c = lf->cell; + moveob(o, c->obpile, o->amt); + if (isplayer(lf)) { + getobname(o, buf, o->amt); + msg("%s is repelled away from you!",buf); + } else if (haslos(player, lf->cell)) { + char lfname[BUFLEN]; + getobname(o, buf, o->amt); + getlfname(lf, lfname); + msg("%s is repelled away from %s!",buf, lfname); + } + } + } + } + + // damage from cell objects? + for (o = lf->cell->obpile->first ; o ; o = o->next) { + f = hasflag(o->flags, F_WALKDAM); + if (f) { + int dam; + dam = f->val[0]; + getobname(o, buf, o->amt); + dam = losehp(lf, dam, f->val[1], NULL, buf); + if (dam > 0) { + if (isplayer(lf)) { + msg("%s %ss you!", buf, getattackverb(f->val[1], dam,lf->maxhp)); + } else if (haslos(player, lf->cell)) { + char lfname[BUFLEN]; + getlfname(lf, lfname); + msg("%s %ss %s!", buf, getattackverb(f->val[1], dam,lf->maxhp), lfname); + } + } + } + } +} + +// returns B_TRUE if the action which involved touching this should fail +int touch(lifeform_t *lf, object_t *o) { + flag_t *f; + char buf[BUFLEN]; + char obname[BUFLEN]; + char lfname[BUFLEN]; + + if (!gamestarted) return B_FALSE; + + getlfname(lf, lfname); + getobname(o, obname, o->amt); + + // freezing touch? + f = hasflag(lf->flags, F_FREEZINGTOUCH); + if (f) { + // not wearing gloves? + if (!getequippedob(lf->pack, BP_HANDS)) { + dospelleffects(lf, OT_S_FREEZEOB, NULL, o, NULL, B_UNCURSED, NULL); + + // we use val[0] here rather than timeleft, because we don't + // want to decrement it each turn. + f->val[0]--; + if (f->val[0] <= 0) { + if (lf->controller == C_PLAYER) { + msg("Your hands stop glowing blue."); + } else if (haslos(player, lf->cell)) { + getlfname(lf, buf); + msg("%s's hands stop glowing blue."); + } + killflag(f); + } + } + } + + f = hasflag(o->flags, F_SHARP); + if (f) { + object_t *gloves; + gloves = getequippedob(lf->pack, BP_HANDS); + if (!gloves) { + + if (isplayer(lf)) { + msg("Ow! You cut your finger on %s.", obname); + } + + sprintf(buf, "touching %s", obname); + losehp(lf, rnd(1,2), DT_SLASH, NULL, buf); + } + } + + // flaming objects? + if (hasflag(o->flags, F_ONFIRE)) { + // flaming weapons are ok + if (!isweapon(o)) { + object_t *gloves; + // wearing gloves? they get damaged. + gloves = getequippedob(lf->pack, BP_HANDS); + if (gloves) { + takedamage(gloves, 2, DT_FIRE); + } else { + // otherwise YOU get damaged. + if (isplayer(lf)) { + msg("Ow! You burn your hands on %s.",obname); + } else if (haslos(player, lf->cell)) { + msg("%s burns iteself on %s.",lfname, obname); + } + sprintf(buf, "touching %s",obname); + losehp(lf, 2, DT_FIRE, NULL, buf); + return B_TRUE; + } + + } + } + return B_FALSE; +} + +int unweild(lifeform_t *lf, object_t *o) { + flag_t *f; + char obname[BUFLEN]; + char buf[BUFLEN]; + + getobname(o, obname, 1); + + if (!cantakeoff(lf, o)) { + switch (reason) { + case E_CURSED: + if (lf->controller == C_PLAYER) { + msg("Your %s appears to be stuck to your hand!", noprefix(obname)); + if (!o->blessknown) { + o->blessknown = B_TRUE; + } + } + break; + case E_NOTEQUIPPED: + if (lf->controller == C_PLAYER) { + msg("You are not weilding that!"); + } + break; + default: + if (lf->controller == C_PLAYER) { + msg("For some reason, you cannot stop weilding your %s!", noprefix(obname)); + } + break; + } + return B_TRUE; + } + + // remove the equipped flag + f = hasflag(o->flags, F_EQUIPPED); + killflagsofid(o->flags, F_EQUIPPED); + + // unweilding doesn't take any time + if (gamestarted) { + if (lf->controller == C_PLAYER) { + msg("You are no longer weilding %s.", obname); + } else if (haslos(player, lf->cell)) { + getlfname(lf, buf); + capitalise(buf); + msg("%s stops weilding %s.", buf, obname); + } + } + + // lose flags + loseobflags(lf, o, F_EQUIPCONFER); + + if (obproduceslight(o)) { + calclight((getoblocation(o))->map); + drawscreen(); + } + + return B_FALSE; +} + +int useability(lifeform_t *lf, enum OBTYPE aid) { + int rv; + // taketime() will happen during abiltiyeffects() + // use the ability + rv = abilityeffects(lf, aid); + return rv; +} + +int usestairs(lifeform_t *lf, object_t *o) { + flag_t *f; + map_t *curmap; + map_t *newmap; + cell_t *newcell; + objecttype_t *ot; + int dir; + int newdepth; + + curmap = lf->cell->map; + + f = hasflag(o->flags, F_CLIMBABLE); + assert(f); + dir = f->val[0]; + + // depth of new level? + if (dir == D_UP) { + newdepth = curmap->depth - 1; + } else { + newdepth = curmap->depth + 1; + } + + // announce + if (isplayer(lf)) { + msg("You %s %s the staircase...", lfhasflag(lf, F_FLYING) ? "fly" : "walk", getdirname(dir)); + } else if (haslos(player, lf->cell)) { + char buf[BUFLEN]; + getlfname(lf, buf); + msg("%s %s %s the staircase...", buf, lfhasflag(lf, F_FLYING) ? "flies" : "walks", getdirname(dir)); + } + // move cursor to msgwindow while we create the new level... + wrefresh(msgwin); + + + // do stairs already go somewhere? + f = hasflag(o->flags, F_MAPLINK); + if (f) { + newmap = findmap(f->val[0]); + } else { + // is there already a level of the correct depth? + newmap = findmapofdepth(newdepth); + if (newmap) { + // link these stairs to it + addflag(o->flags, F_MAPLINK, newmap->id, NA, NA, NULL); + } else { + // need to create a new map! + + // get return stair ob type + ot = getoppositestairs(o->type); + + // generate a new map! + newmap = addmap(); + createmap(newmap, newdepth, curmap->habitat, curmap, ot); + // link current map to new one + addflag(o->flags, F_MAPLINK, newmap->id, NA, NA, NULL); + } + } + + // find other end of stairs + ot = getoppositestairs(o->type); + newcell = findobinmap(newmap, ot->id); + + if (newcell) { + if (isplayer(lf)) { + msg("You arrive at level %d.", newcell->map->depth); + } + // move player to new map + moveto(lf, newcell); + taketime(lf, getmovespeed(lf)); + } else { + dblog("ERROR - can't find opposite end of stairs!"); + msg("ERROR - can't find opposite end of stairs!"); + } + drawscreen(); + + return B_FALSE; +} + +int validateraces(void) { + int goterror = B_FALSE; + race_t *r; + for (r = firstrace ; r ; r = r->next) { + if (!hasflag(r->flags, F_SIZE)) { + printf("ERROR in race '%s' - missing F_SIZE.", r->name); + goterror = B_TRUE; + + } + } + return goterror; +} + +int rest(lifeform_t *lf, int onpurpose) { + flag_t *f; + flag_t *ff; + int healtime = 3; + + + taketime(lf, getmovespeed(lf)); + + if (onpurpose) { + f = lfhasflag(lf, F_RESTCOUNT); + if (!f) { + f = addflag(lf->flags, F_RESTCOUNT, 0, NA, NA, NULL); + } + f->val[0]++; + f->lifetime = 2; + + ff = lfhasflag(lf, F_RESTHEALTIME); + if (ff) { + healtime = ff->val[0]; + } else { + healtime = 3; + } + + // 3 turns = heal + if (f->val[0] >= 3) { + int amt = 1; + //if (isplayer(lf)) msg("hp given."); + ff = lfhasflag(lf, F_RESTHEALAMT); + if (ff) { + amt = ff->val[0]; + } else { + amt = 1; + } + gainhp(lf, 1); + killflag(f); + } + } + + + if (onpurpose) { + if (isplayer(lf)) { + // clear msg bar + clearmsg(); + } + } + return B_FALSE; +} + +int wear(lifeform_t *lf, object_t *o) { + int rv = B_FALSE; + char buf[BUFLEN],obname[BUFLEN]; + flag_t *f; + enum BODYPART possbp[MAXBODYPARTS]; + int nparts = 0; + enum BODYPART bp; + + + getobname(o, obname, 1); + + // check for already equipped first! + f = hasflag(o->flags, F_EQUIPPED); + if (f) { + if (lf->controller == C_PLAYER) { + if (f->val[0] == BP_WEAPON) { + msg("You're weilding that!"); + } else { + msg("You're already wearing that!"); + } + } + return B_TRUE; + } + + // metal objects and magshield? + if (lfhasflag(lf, F_MAGSHIELD)) { + if (isplayer(lf)) { + msg("Your %s evades your grasp!", noprefix(buf)); + } + return B_TRUE; + } + + + nparts = 0; + for (f = o->flags->first ; f ; f = f->next) { + if (f->id == F_GOESON) { + possbp[nparts] = f->val[0]; + nparts++; + } + } + + if (nparts == 0) { + if (lf->controller == C_PLAYER) { + msg("You can't wear that!"); + } + return B_TRUE; + } else if (nparts == 1) { + bp = possbp[0]; + } else { + int i; + /* + if (gamestarted && isplayer(lf)) { + int i; + // ask where + sprintf(buf, "Wear %s on which body part?", obname); + initprompt(&prompt, buf); + for (i = 0; i < nparts; i++) { + if (!hasobwithflagval(lf->pack, F_EQUIPPED, possbp[i], NA, NA, NULL)) { + addchoice(&prompt, i, getbodypartname(possbp[i]), NULL); + } + } + addchoice(&prompt, '^', "Cancel", NULL); + i = getchoicestr(&prompt); + if (i == '^') { + return B_TRUE; + } else { + bp = possbp[i]; + } + } else { // autoequip + */ + // go in first possible place + bp = BP_NONE; + for (i = 0; i < nparts; i++) { + if (!hasobwithflagval(lf->pack, F_EQUIPPED, possbp[i], NA, NA, NULL)) { + bp = possbp[i]; + break; + } + } + if (bp == BP_NONE) return B_TRUE; + //} + } + + if (o->type->id == OT_RING_PROTFIRE) { + dblog("a"); + } + + while (!canwear(lf, o, bp)) { + int errresolved = B_FALSE; + if (gamestarted && lf->created) { + switch (reason) { + case E_ALREADYUSING: + if (lf->controller == C_PLAYER) { + msg("You're already wearing that!"); + } + break; + case E_WEARINGSOMETHINGELSE: + f = hasflag(o->flags, F_GOESON); + if (f) { + object_t *inway; + // find what else is there + inway = getequippedob(lf->pack, f->val[0]); + getobname(inway,buf, 1); + if (lf->controller == C_PLAYER) { + int ch; + char buf2[BUFLEN]; + // take offending item off first - this takes extra time. + sprintf(buf2, "Remove your %s",noprefix(buf)); + ch = askchar(buf2, "yn","y", B_TRUE); + if (ch == 'y') { + if (isarmour(inway)) { + if (!takeoff(player, inway)) { + // took it off! + errresolved = B_TRUE; + } + } else { // weapon + if (!unweild(player, inway)) { + // took it off! + errresolved = B_TRUE; + } + } + } + } + } else { + // should never happen + msg("You can't wear that!"); + } + break; + default: + if (lf->controller == C_PLAYER) { + msg("You can't wear that!"); + } + break; + } + } // end if gamestarted + if (!errresolved) { + return B_TRUE; + } + // if we DID resolve the error, loop around and check if we can wear again... + } // end while !canwear + + // some checks first... + touch(lf, o); + if (hasflag(o->flags, F_DEAD)) { + taketime(lf, getmovespeed(lf)); + return B_TRUE; + } + + // wear it + //f = hasflag(o->flags, F_GOESON); + //bp = f->val[0]; + + addflag(o->flags, F_EQUIPPED, bp, -1, -1, NULL); + taketime(lf, getmovespeed(lf)); + + /* + if (isplayer(lf)) { + // equipping unknown objects makes them known + if (!isknown(o)) { + // announce + announceob(o->type->id); + + // make the obejct type known + makeknown(o->type->id); + getobname(o, obname, 1); + } + } + */ + + if (gamestarted && lf->created) { + if (lf->controller == C_PLAYER) { + msg("You are now wearing %s.", obname); + } else if (haslos(player, lf->cell)) { + getlfname(lf, buf); + capitalise(buf); + msg("%s puts on %s.", buf, obname); + + } + + if (o->blessed == B_CURSED) { + if (lf->controller == C_PLAYER) { + msg("Oh no! The %s releases a pulse of evil!", noprefix(obname)); + o->blessknown = B_TRUE; + } else if (haslos(player, lf->cell)) { + getlfname(lf, buf); + msg("%s%s %s releases a pulse of evil!", buf, getpossessive(buf), obname); + o->blessknown = B_TRUE; + } + } + + } + // give flags + giveobflags(lf, o, F_EQUIPCONFER); + + return rv; +} + +int weild(lifeform_t *lf, object_t *o) { + char buf[BUFLEN]; + flag_t *f; + object_t *oo; + int twohanded = B_FALSE; + enum BODYPART weildloc,otherloc; + + if (o) { + getobname(o, buf, o->amt); + } + + if (!canweild(lf, o)) { + if (gamestarted && lf->created) { + if (lf->controller == C_PLAYER) { + switch (reason) { + case E_ALREADYUSING: + msg("You are already weilding that!"); + break; + case E_NOUNARMEDATTACK: + msg("You cannot fight without a weapon!"); + break; + case E_NOHANDS: + msg("You are not capable of weilding a weapon!"); + break; + default: + msg("For some reason, you weild this!"); + break; + } + } + } + return B_TRUE; + } + + // metal objects and magshield? + if (lfhasflag(lf, F_MAGSHIELD)) { + if (isplayer(lf)) { + msg("Your %s evades your grasp!", noprefix(buf)); + } + return B_TRUE; + } + + + // anything else weilded? + if (o) { + if (hasflag(o->flags, F_FIREARM)) { + weildloc = BP_SECWEAPON; + otherloc = BP_WEAPON; + } else { + weildloc = BP_WEAPON; + otherloc = BP_SECWEAPON; + } + + if (hasflag(o->flags, F_TWOHANDED)) { + twohanded = B_TRUE; + } else { + twohanded = B_FALSE; + } + } else { // ie. asked to fight unarmed + weildloc = BP_WEAPON; + twohanded = B_FALSE; + } + + for (oo = lf->pack->first ; oo ; oo = oo->next) { + f = hasflagval(oo->flags, F_EQUIPPED, weildloc, -1, -1, NULL); + if (f) { + if (isarmour(oo)) { + char inwayname[BUFLEN]; + char buf2[BUFLEN]; + char ch; + if (isplayer(lf)) { + getobname(oo, inwayname, oo->amt); + // prompt before taking it off. + sprintf(buf2, "Remove your %s",noprefix(inwayname)); + ch = askchar(buf2, "yn","y", B_TRUE); + } else { + ch = 'y'; + } + if (ch == 'y') { + if (isarmour(oo)) { + if (takeoff(lf, oo)) { + // if we can't remove it, stop. + return B_TRUE; + } + } else { // weapon + if (unweild(lf, oo)) { + // if we can't remove it, stop. + return B_TRUE; + } + } + } else { + return B_TRUE; + } + } else { + // just unweild it + if (unweild(lf, oo)) { + // if we can't unweild old weapon, stop + return B_TRUE; + } + } + } + /* + // this weapon is two handed and uses the other hand + if (hasflag(oo->flags, F_TWOHANDED)) { + f = hasflagval(oo->flags, F_EQUIPPED, otherloc, -1, -1, NULL); + if (f) { + // unweild it + if (unweild(lf, oo)) { + // if we can't unweild old weapon, stop + return B_TRUE; + } + } + } + */ + + // new weapon is two handed? check other hand too. + if (twohanded) { + f = hasflagval(oo->flags, F_EQUIPPED, otherloc, -1, -1, NULL); + if (f) { + if (isweapon(oo)) { + // just unweild it + if (unweild(lf, oo)) { + // if we can't unweild old weapon, stop + return B_TRUE; + } + } else { // armour + char buf2[BUFLEN]; + char inwayname[BUFLEN]; + char ch; + if (isplayer(lf)) { + // prompt before taking it off. + getobname(oo, inwayname, oo->amt); + sprintf(buf2, "Remove your %s",noprefix(inwayname)); + ch = askchar(buf2, "yn","y", B_TRUE); + } else { + ch = 'y'; + } + if (ch == 'y') { + if (isarmour(oo)) { + if (takeoff(lf, oo)) { + // if we can't remove it, stop. + return B_TRUE; + } + } else { + if (unweild(lf, oo)) { + // if we can't remove it, stop. + return B_TRUE; + } + } + } else { + return B_TRUE; + } + } + } + } + } + + + // if we asked to just unweild our weapon, exit now + // with no error. + if (!o) { + if (gamestarted && lf->created && (lf->race->id != R_DANCINGWEAPON)) { + if (isplayer(lf)) { + msg("You are now fighting unarmed."); + } else if (haslos(player, lf->cell)) { + getlfname(lf, buf); + msg("%s is now fighting unarmed.",buf); + } + } + return B_FALSE; + } + + // now weild this + addflag(o->flags, F_EQUIPPED, weildloc, -1, -1, NULL); + if (hasflag(o->flags, F_TWOHANDED)) { + addflag(o->flags, F_EQUIPPED, otherloc, -1, -1, NULL); + } + taketime(lf, getmovespeed(lf)); + if (gamestarted && lf->created && (lf->race->id != R_DANCINGWEAPON)) { + if (lf->controller == C_PLAYER) { + char buf2[BUFLEN]; + + sprintf(buf2, "You are now weilding %c - %s", o->letter, buf); + if (twohanded) { + strcat(buf2, " (both hands)"); + } else if (weildloc == BP_SECWEAPON) { + strcat(buf2, " (in left hand)"); + } + strcat(buf2, "."); + msg(buf2); + // warn if it won't do any damage + if (!hasflag(o->flags, F_DAM) && !hasflag(o->flags, F_FIREARM)) { + msg("You have a feeling that this weapon will not be very effective..."); + } + } else if (haslos(player, lf->cell)) { + char buf2[BUFLEN]; + getlfname(lf, buf2); + msg("%s weilds %s.", buf2, buf); + + } + touch(lf, o); + + if (o->blessed == B_CURSED) { + if (lf->controller == C_PLAYER) { + msg("Oh no! The %s releases a pulse of evil!", strchr(buf, ' ')+1); + o->blessknown = B_TRUE; + } else if (haslos(player, lf->cell)) { + char buf2[BUFLEN]; + getlfname(lf, buf2); + msg("%s%s %s releases a pulse of evil!", buf2, getpossessive(buf2), buf); + o->blessknown = B_TRUE; + } + } + + if (isfirearm(o)) { + // select ammo + setammo(lf, getrandomammo(lf)); + + if (getammo(lf)) { + autotarget(lf); + } + } + } + + return B_FALSE; +} + +int youhear(cell_t *c, char *text) { + if (canhear(player, c)) { + msg("You hear %s.", text); + return B_TRUE; + } + return B_FALSE; +} diff --git a/lf.h b/lf.h index dff77b4..0a9b6a7 100644 --- a/lf.h +++ b/lf.h @@ -1,34 +1,162 @@ #include "defs.h" - lifeform_t *addlf(cell_t *cell, enum RACE rid, int level); -race_t *addrace(enum RACE id, char *name, char glyph); +lifeform_t *real_addlf(cell_t *cell, enum RACE rid, int level, int controller); +job_t *addjob(enum JOB id, char *name); +race_t *addrace(enum RACE id, char *name, float weight, char glyph, enum MATERIAL mat); +void adjustdamlf(lifeform_t *lf, unsigned int *amt, enum DAMTYPE damtype); +void autotarget(lifeform_t *lf); +void autoweild(lifeform_t *lf); +int appearsrandomly(enum RACE rid); +void bleed(lifeform_t *lf); +int cancast(lifeform_t *lf, enum OBTYPE oid, int *mpcost); +int caneat(lifeform_t *lf, object_t *o); +int canhear(lifeform_t *lf, cell_t *c); int canpickup(lifeform_t *lf, object_t *o); -int canwear(lifeform_t *lf, object_t *o); +int canpush(lifeform_t *lf, object_t *o, int dir); +int canquaff(lifeform_t *lf, object_t *o); +int canrest(lifeform_t *lf); +int canwear(lifeform_t *lf, object_t *o, enum BODYPART where); int canweild(lifeform_t *lf, object_t *o); int cantakeoff(lifeform_t *lf, object_t *o); +int castspell(lifeform_t *lf, enum OBTYPE sid, lifeform_t *targlf, object_t *targob, cell_t *targcell); void die(lifeform_t *lf); +void dumplf(void); +int eat(lifeform_t *lf, object_t *o); +object_t *eyesshaded(lifeform_t *lf); void fightback(lifeform_t *lf, lifeform_t *attacker); +job_t *findjob(enum JOB jobid); lifeform_t *findlf(map_t *m, int lfid); race_t *findrace(enum RACE id); +race_t *findracebyname(char *name); +int flee(lifeform_t *lf); void gainhp(lifeform_t *lf, int amt); -int getarmour(lifeform_t *lf); +void gainlevel(lifeform_t *lf); +void gainmp(lifeform_t *lf, int amt); +void gainxp(lifeform_t *lf, long amt); +object_t *getarmour(lifeform_t *lf, enum BODYPART bp); +int getarmourrating(lifeform_t *lf); +int getattackspeed(lifeform_t *lf); +int getattr(lifeform_t *lf, enum ATTRIB attr); +int getdexmod(lifeform_t *lf); +int getevasion(lifeform_t *lf); +object_t *getbestmissile(lifeform_t *lf); object_t *getbestweapon(lifeform_t *lf); +object_t *getbestfirearm(lifeform_t *lf); +int getbodyparthitchance(enum BODYPART bp); char *getbodypartname(enum BODYPART bp); char *getbodypartequipname(enum BODYPART bp); object_t *getequippedob(obpile_t *op, enum BODYPART bp); -int getlfattackspeed(lifeform_t *lf); +object_t *getfirearm(lifeform_t *lf); +lifeform_t *getguntarget(lifeform_t *lf); +int getguntargetid(lifeform_t *lf); +//int gethealtime(lifeform_t *lf); +int gethearingrange(lifeform_t *lf); +enum HUNGER gethungerlevel(int hunger); +char * gethungername(enum HUNGER hunger, char *buf); +int gethungerval(lifeform_t *lf); +job_t *getjob(lifeform_t *lf); +int getlfaccuracy(lifeform_t *lf); +enum LFCONDITION getlfcondition(lifeform_t *lf); +int getnightvisrange(lifeform_t *lf); +char *getlfconditionname(enum LFCONDITION cond); +char *getseenlfconditionname(lifeform_t *lf, lifeform_t *viewer); +enum MATERIAL getlfmaterial(lifeform_t *lf); +float getmaxcarryweight(lifeform_t *lf); +float getmaxliftweight(lifeform_t *lf); +float getmaxpushweight(lifeform_t *lf); +int getvisrange(lifeform_t *lf); int getmovespeed(lifeform_t *lf); +char *getmoveverb(lifeform_t *lf); char *getlfname(lifeform_t *lf, char *buf); -race_t *getrandomlf(map_t *map, int *level); +char *getlfnamea(lifeform_t *lf, char *buf); +enum LFSIZE getlfsize(lifeform_t *lf); +float getlfweight(lifeform_t *lf, int withobs); +int getspellspeed(lifeform_t *lf); +char *getplayername(char *buf); +char *getplayernamefull(char *buf); +object_t *getrandomarmour(lifeform_t *lf); +//int getrandommonlevel(int depth); +race_t *getrandomrace(map_t *map); +race_t *getreallyrandomrace(void); char *getspeedname(int speed, char *buf); +float getstatmod(lifeform_t *lf, enum ATTRIB att); +enum STRBRACKET getstrname(int str, char *buf); +enum DEXBRACKET getdexname(int dex, char *buf); +enum IQBRACKET getiqname(int iq, char *buf); +int getthrowspeed(int str); +int getunarmedattackspeed(lifeform_t *lf); object_t *getweapon(lifeform_t *lf); +long getxpforlev(int level); +void givejob(lifeform_t *lf, enum JOB jobid); +void giveobflags(lifeform_t *lf, object_t *o, enum FLAG whattype); +void givestartobs(lifeform_t *lf, flagpile_t *fp); +map_t *gotolev(lifeform_t *lf, int depth, object_t *fromstairs); +job_t *hasjob(lifeform_t *lf, enum JOB job); +flag_t *lfhasflag(lifeform_t *lf, enum FLAG fid); +flag_t *lfhasflagval(lifeform_t *lf, enum FLAG fid, int val0, int val1, int val2, char *text); +flag_t *lfhasknownflag(lifeform_t *lf, enum FLAG fid); +flag_t *lfhasknownflagval(lifeform_t *lf, enum FLAG fid, int val0, int val1, int val2, char *text); +int lockpick(lifeform_t *lf, object_t *target, object_t *device); +void loseobflags(lifeform_t *lf, object_t *o, int kind); int haslof(lifeform_t *viewer, cell_t *dest); int haslos(lifeform_t *viewer, cell_t *dest); +int hasmr(lifeform_t *lf); +void initjobs(void); void initrace(void); +void interrupt(lifeform_t *lf); +int isbleeding(lifeform_t *lf); +int isblind(lifeform_t *lf); +enum BURDENED isburdened(lifeform_t *lf); int isdead(lifeform_t *lf); +int isfleeing(lifeform_t *lf); +int isfreebp(lifeform_t *lf, enum BODYPART bp); +int isgenius(lifeform_t *lf); +int isingunrange(lifeform_t *lf, cell_t *where); +int isimmobile(lifeform_t *lf); +int ispeaceful(lifeform_t *lf); +int isplayer(lifeform_t *lf); +int ispolymorphed(lifeform_t *lf); +void killjob(job_t *job); void killlf(lifeform_t *lf); void killrace(race_t *race); -void losehp(lifeform_t *lf, int amt, int damtype, lifeform_t *fromlf, char *damsrc); +int losehp(lifeform_t *lf, unsigned int amt, enum DAMTYPE damtype, lifeform_t *fromlf, char *damsrc); +int losehp_real(lifeform_t *lf, unsigned int amt, enum DAMTYPE damtype, lifeform_t *fromlf, char *damsrc, int reducedam); +void makenoise(lifeform_t *lf, enum NOISETYPE nid); +void maycastspellschool(flagpile_t *fp, enum SPELLSCHOOL ss); +int modattr(lifeform_t *lf, enum ATTRIB attr, int amt); +void modhunger(lifeform_t *lf, int amt); void outfitlf(lifeform_t *lf); -void taketime(lifeform_t *lf, int howlong); +int pickup(lifeform_t *lf, object_t *what, int howmany); +void precalclos(lifeform_t *lf); +int push(lifeform_t *lf, object_t *o, int dir); +void relinklf(lifeform_t *src, map_t *dst); +int rest(lifeform_t *lf, int onpurpose); +void startresting(lifeform_t *lf); +int rolldex(enum DEXBRACKET bracket); +int rolliq(enum IQBRACKET bracket); +int rollstr(enum STRBRACKET bracket); +int savingthrow(lifeform_t *lf, enum ATTRIB attr); +int scare(lifeform_t *lf, lifeform_t *scarer, int howlong); +int setammo(lifeform_t *lf, object_t *o); +void setattr(lifeform_t *lf, enum ATTRIB attr, int val); +void setguntarget(lifeform_t *lf, lifeform_t *targ); +void setrace(lifeform_t *lf, enum RACE rid); +void setlastdam(lifeform_t *lf, char *buf); +int shoot(lifeform_t *lf); +void sortlf(map_t *map, lifeform_t *lf); +void stopresting(lifeform_t *lf); +void stoprunning(lifeform_t *lf); +int takeoff(lifeform_t *lf, object_t *o); +void taketime(lifeform_t *lf, long howlong); +int throwat(lifeform_t *thrower, object_t *o, cell_t *where); +void timeeffectslf(lifeform_t *lf); +void turneffectslf(lifeform_t *lf); +int touch(lifeform_t *lf, object_t *o); +int unweild(lifeform_t *lf, object_t *o); +int useability(lifeform_t *lf, enum OBTYPE aid); +int usestairs(lifeform_t *lf, object_t *o); +int validateraces(void); +int wear(lifeform_t *lf, object_t *o); +int weild(lifeform_t *lf, object_t *o); +int youhear(cell_t *c, char *text); diff --git a/log.txt b/log.txt index 529fb28..92183d9 100644 --- a/log.txt +++ b/log.txt @@ -2,14668 +2,22152 @@ ====== NEW LOGFILE ==== -adding 7 stone to cell 21,1 -DB: '7 stone' -> adding 7 x stone -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (stone). -DB: Looking for stacks... -DB: STACK FOUND (1 x stone). Adding 7 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (2 x stone). Adding 7 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (3 x stone). Adding 7 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (4 x stone). Adding 7 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (5 x stone). Adding 7 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (6 x stone). Adding 7 obs to existing stack. -adding 1 quarterstaff to cell 8,3 -DB: '1 quarterstaff' -> adding 1 x quarterstaff -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (quarterstaff). -adding 1 morningstar to cell 3,4 -DB: '1 morningstar' -> adding 1 x morningstar -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (morningstar). -adding 7 stone to cell 43,6 -DB: '7 stone' -> adding 7 x stone -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (stone). -DB: Looking for stacks... -DB: STACK FOUND (1 x stone). Adding 7 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (2 x stone). Adding 7 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (3 x stone). Adding 7 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (4 x stone). Adding 7 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (5 x stone). Adding 7 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (6 x stone). Adding 7 obs to existing stack. -adding 7 stone to cell 45,9 -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -adding 1 scroll of uncontrolled teleportation to cell 32,10 -DB: '1 scroll of uncontrolled teleportation' -> adding 1 x scroll of uncontrolled teleportation -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (scroll of uncontrolled teleportation). -adding 10 gold coin to cell 35,10 -DB: '10 gold coin' -> adding 10 x gold coin -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (gold coin). -DB: Looking for stacks... -DB: STACK FOUND (1 x gold coin). Adding 10 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (2 x gold coin). Adding 10 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (3 x gold coin). Adding 10 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (4 x gold coin). Adding 10 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (5 x gold coin). Adding 10 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (6 x gold coin). Adding 10 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (7 x gold coin). Adding 10 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (8 x gold coin). Adding 10 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (9 x gold coin). Adding 10 obs to existing stack. -adding 7 stone to cell 36,10 -DB: '7 stone' -> adding 7 x stone -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (stone). -DB: Looking for stacks... -DB: STACK FOUND (1 x stone). Adding 7 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (2 x stone). Adding 7 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (3 x stone). Adding 7 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (4 x stone). Adding 7 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (5 x stone). Adding 7 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (6 x stone). Adding 7 obs to existing stack. -adding 1 quarterstaff to cell 66,11 -DB: '1 quarterstaff' -> adding 1 x quarterstaff -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (quarterstaff). -adding 1 quarterstaff to cell 21,13 -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -adding 1 spear to cell 33,13 -DB: '1 spear' -> adding 1 x spear -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (spear). -adding 1 quickblade to cell 36,13 -DB: '1 quickblade' -> adding 1 x quickblade -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (quickblade). -adding 1 quickblade to cell 44,13 -DB: '1 quickblade' -> adding 1 x quickblade -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (quickblade). -adding 1 quickblade to cell 78,15 -DB: '1 quickblade' -> adding 1 x quickblade -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (quickblade). -adding 2 stone to cell 34,16 -DB: '2 stone' -> adding 2 x stone -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (stone). -DB: Looking for stacks... -DB: STACK FOUND (1 x stone). Adding 2 obs to existing stack. -adding 1 quickblade to cell 47,19 -DB: '1 quickblade' -> adding 1 x quickblade -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (quickblade). -adding 1 map to cell 29,21 -DB: '1 map' -> adding 1 x map -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (map). -adding 1 map to cell 15,23 -DB: '1 map' -> adding 1 x map -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (map). -adding 1 map to cell 40,26 -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -adding 1 stone to cell 44,26 -DB: '1 stone' -> adding 1 x stone -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (stone). -adding 1 stone to cell 53,26 -DB: '1 stone' -> adding 1 x stone -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (stone). -adding 1 stone to cell 75,26 -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -adding 2 stone to cell 15,27 -DB: '2 stone' -> adding 2 x stone -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (stone). -DB: Looking for stacks... -DB: STACK FOUND (1 x stone). Adding 2 obs to existing stack. -adding 1 spear to cell 63,31 -DB: '1 spear' -> adding 1 x spear -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (spear). -adding 1 scroll of uncontrolled teleportation to cell 1,33 -DB: '1 scroll of uncontrolled teleportation' -> adding 1 x scroll of uncontrolled teleportation -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (scroll of uncontrolled teleportation). -adding 1 scroll of uncontrolled teleportation to cell 6,33 -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -adding 9 stone to cell 17,33 -DB: '9 stone' -> adding 9 x stone -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (stone). -DB: Looking for stacks... -DB: STACK FOUND (1 x stone). Adding 9 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (2 x stone). Adding 9 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (3 x stone). Adding 9 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (4 x stone). Adding 9 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (5 x stone). Adding 9 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (6 x stone). Adding 9 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (7 x stone). Adding 9 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (8 x stone). Adding 9 obs to existing stack. -adding 1 scroll of sense surroundings to cell 5,34 -DB: '1 scroll of sense surroundings' -> adding 1 x scroll of sense surroundings -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (scroll of sense surroundings). -adding 5 stone to cell 18,37 -DB: '5 stone' -> adding 5 x stone -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (stone). -DB: Looking for stacks... -DB: STACK FOUND (1 x stone). Adding 5 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (2 x stone). Adding 5 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (3 x stone). Adding 5 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (4 x stone). Adding 5 obs to existing stack. -adding 1 map to cell 70,37 -DB: '1 map' -> adding 1 x map -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (map). -adding 1 map to cell 24,39 -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -adding 1 map to cell 73,40 -DB: '1 map' -> adding 1 x map -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (map). -adding 1 map to cell 2,42 -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -adding 5 stone to cell 42,42 -DB: '5 stone' -> adding 5 x stone -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (stone). -DB: Looking for stacks... -DB: STACK FOUND (1 x stone). Adding 5 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (2 x stone). Adding 5 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (3 x stone). Adding 5 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (4 x stone). Adding 5 obs to existing stack. -adding 9 stone to cell 50,43 -DB: '9 stone' -> adding 9 x stone -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (stone). -DB: Looking for stacks... -DB: STACK FOUND (1 x stone). Adding 9 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (2 x stone). Adding 9 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (3 x stone). Adding 9 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (4 x stone). Adding 9 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (5 x stone). Adding 9 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (6 x stone). Adding 9 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (7 x stone). Adding 9 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (8 x stone). Adding 9 obs to existing stack. -adding 1 quarterstaff to cell 40,44 -DB: '1 quarterstaff' -> adding 1 x quarterstaff -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (quarterstaff). -adding 1 quarterstaff to cell 55,44 -adding random object of damtype piercing, rarity 2 +redraw +findotn(): modname is 'wooden door' +findotn(): modname is 'wooden door' +findotn(): modname is 'wooden door' +findotn(): modname is 'wooden door' +findotn(): modname is 'wooden door' +findotn(): modname is 'wooden door' +findotn(): modname is 'wooden door' +findotn(): modname is 'wooden door' +findotn(): modname is 'wooden door' +findotn(): modname is 'wooden door' +findotn(): modname is 'staircase going up' +findotn(): modname is 'staircase going down' +adding random object with rarity value between 72 - 100 +got 56 possibilities. +random ob: 1 x lockpick ('lockpick') +adding rand obj 1 lockpick to cell 18,1 +findotn(): modname is 'lockpick' +adding random object with rarity value between 72 - 100 +got 56 possibilities. +random ob: 1 x scroll of mind scan ('scroll of mind scan') +adding rand obj 1 scroll of mind scan to cell 8,2 +findotn(): modname is 'scroll of mind scan' +adding random object with rarity value between 72 - 100 +got 56 possibilities. +random ob: 1 x lockpick ('lockpick') +adding rand obj 1 lockpick to cell 42,2 +findotn(): modname is 'lockpick' +finding random lf with rarity val 75-100 -got 5 possibilities. -DB: '1 dagger' -> adding 1 x dagger -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (dagger). -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -adding 1 short sword to cell 35,45 -DB: '1 short sword' -> adding 1 x short sword -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (short sword). -adding 1 short sword to cell 50,46 -adding random object of damtype piercing, rarity 2 +-> possibility: goblin, rarity=75 +-> possibility: orc, rarity=75 +-> possibility: ork, rarity=75 +-> possibility: slime, rarity=80 +-> possibility: newt, rarity=100 +-> possibility: bat, rarity=90 +-> possibility: giant rat, rarity=90 +-> possibility: wolf, rarity=80 +-> possibility: giant fly, rarity=85 +-> possibility: giant blowfly, rarity=75 +-> possibility: glowbug, rarity=85 +-> possibility: zombie, rarity=75 +got 12 possibilities. +adding rand lf slime to cell 45,6 +findotn(): modname is 'acidattack' +finding random lf with rarity val 75-100 -got 5 possibilities. -DB: '1 dagger' -> adding 1 x dagger -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (dagger). -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -adding 1 piece of broken glass to cell 21,47 -DB: '1 piece of broken glass' -> adding 1 x piece of broken glass -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (piece of broken glass). ---> Will add 3 pillars ---> Will add 8 objects to room 0 (of 23) -adding àð¿_ÿ to cell 58,31 -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -adding 1 quickblade to cell 67,28 -DB: '1 quickblade' -> adding 1 x quickblade -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (quickblade). -adding 1 rapier to cell 37,31 -DB: '1 rapier' -> adding 1 x rapier -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (rapier). -adding 1 scroll of uncontrolled teleportation to cell 72,26 -DB: '1 scroll of uncontrolled teleportation' -> adding 1 x scroll of uncontrolled teleportation -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (scroll of uncontrolled teleportation). ---> Will add 3 objects to room 1 (of 23) -adding àð¿_ÿ to cell 10,40 -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). ---> Will add 4 objects to room 2 (of 23) -adding 1 steak knife to cell 20,45 -DB: '1 steak knife' -> adding 1 x steak knife -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (steak knife). -adding àð¿_ÿ to cell 16,45 -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). ---> Will add 9 objects to room 3 (of 23) -adding àð¿_ÿ to cell 13,22 -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -adding 1 stone to cell 7,22 -DB: '1 stone' -> adding 1 x stone -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (stone). -adding àð¿_ÿ to cell 7,23 -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -adding 1 dagger to cell 9,22 -DB: '1 dagger' -> adding 1 x dagger -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (dagger). -adding 7 stone to cell 7,18 -DB: '7 stone' -> adding 7 x stone -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (stone). -DB: Looking for stacks... -DB: STACK FOUND (1 x stone). Adding 7 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (2 x stone). Adding 7 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (3 x stone). Adding 7 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (4 x stone). Adding 7 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (5 x stone). Adding 7 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (6 x stone). Adding 7 obs to existing stack. ---> Will add 1 objects to room 4 (of 23) -adding 1 stone to cell 76,17 -DB: '1 stone' -> adding 1 x stone -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (stone). ---> Will add 8 objects to room 5 (of 23) -adding 3 stone to cell 63,15 -DB: '3 stone' -> adding 3 x stone -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (stone). -DB: Looking for stacks... -DB: STACK FOUND (1 x stone). Adding 3 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (2 x stone). Adding 3 obs to existing stack. -adding 1 rapier to cell 62,17 -DB: '1 rapier' -> adding 1 x rapier -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (rapier). -adding 2 stone to cell 62,15 -DB: '2 stone' -> adding 2 x stone -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (stone). -DB: Looking for stacks... -DB: STACK FOUND (1 x stone). Adding 2 obs to existing stack. -adding 1 dagger to cell 63,16 -DB: '1 dagger' -> adding 1 x dagger -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (dagger). -adding 1 dagger to cell 63,20 -DB: '1 dagger' -> adding 1 x dagger -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (dagger). -adding 8 stone to cell 65,17 -DB: '8 stone' -> adding 8 x stone -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (stone). -DB: Looking for stacks... -DB: STACK FOUND (1 x stone). Adding 8 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (2 x stone). Adding 8 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (3 x stone). Adding 8 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (4 x stone). Adding 8 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (5 x stone). Adding 8 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (6 x stone). Adding 8 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (7 x stone). Adding 8 obs to existing stack. ---> Will add 4 objects to room 6 (of 23) -adding 10 stone to cell 50,42 -DB: '10 stone' -> adding 10 x stone -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (stone). -DB: Looking for stacks... -DB: STACK FOUND (1 x stone). Adding 10 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (2 x stone). Adding 10 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (3 x stone). Adding 10 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (4 x stone). Adding 10 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (5 x stone). Adding 10 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (6 x stone). Adding 10 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (7 x stone). Adding 10 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (8 x stone). Adding 10 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (9 x stone). Adding 10 obs to existing stack. -adding 6 stone to cell 45,43 -DB: '6 stone' -> adding 6 x stone -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (stone). -DB: Looking for stacks... -DB: STACK FOUND (1 x stone). Adding 6 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (2 x stone). Adding 6 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (3 x stone). Adding 6 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (4 x stone). Adding 6 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (5 x stone). Adding 6 obs to existing stack. -adding 6 stone to cell 54,43 -DB: '6 stone' -> adding 6 x stone -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (stone). -DB: Looking for stacks... -DB: STACK FOUND (1 x stone). Adding 6 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (2 x stone). Adding 6 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (3 x stone). Adding 6 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (4 x stone). Adding 6 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (5 x stone). Adding 6 obs to existing stack. ---> Will add 2 objects to room 7 (of 23) -adding àð¿_ÿ to cell 47,13 -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). ---> Will add 9 objects to room 8 (of 23) -adding 6 stone to cell 57,34 -DB: '6 stone' -> adding 6 x stone -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (stone). -DB: Looking for stacks... -DB: STACK FOUND (1 x stone). Adding 6 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (2 x stone). Adding 6 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (3 x stone). Adding 6 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (4 x stone). Adding 6 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (5 x stone). Adding 6 obs to existing stack. -adding 1 steak knife to cell 53,34 -DB: '1 steak knife' -> adding 1 x steak knife -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (steak knife). -adding 1 scimitar to cell 53,35 -DB: '1 scimitar' -> adding 1 x scimitar -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (scimitar). -adding 1 scroll of uncontrolled teleportation to cell 54,35 -DB: '1 scroll of uncontrolled teleportation' -> adding 1 x scroll of uncontrolled teleportation -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (scroll of uncontrolled teleportation). ---> Will add 8 objects to room 9 (of 23) -adding 1 steak knife to cell 31,30 -DB: '1 steak knife' -> adding 1 x steak knife -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (steak knife). -adding 1 steak knife to cell 31,31 -DB: '1 steak knife' -> adding 1 x steak knife -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (steak knife). -adding 1 morningstar to cell 32,32 -DB: '1 morningstar' -> adding 1 x morningstar -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (morningstar). -adding 1 potion of healing to cell 34,34 -DB: '1 potion of healing' -> adding 1 x potion of healing -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (potion of healing). -adding 1 great club to cell 33,31 -DB: '1 great club' -> adding 1 x great club -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (great club). ---> Will add 0 objects to room 10 (of 23) ---> Will add 1 objects to room 11 (of 23) -adding 2 stone to cell 73,3 -DB: '2 stone' -> adding 2 x stone -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (stone). -DB: Looking for stacks... -DB: STACK FOUND (1 x stone). Adding 2 obs to existing stack. ---> Will add 6 objects to room 12 (of 23) -adding 1 steak knife to cell 4,5 -DB: '1 steak knife' -> adding 1 x steak knife -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (steak knife). -adding 3 stone to cell 2,3 -DB: '3 stone' -> adding 3 x stone -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (stone). -DB: Looking for stacks... -DB: STACK FOUND (1 x stone). Adding 3 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (2 x stone). Adding 3 obs to existing stack. -adding 1 potion of healing to cell 10,3 -DB: '1 potion of healing' -> adding 1 x potion of healing -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (potion of healing). -adding 3 stone to cell 9,6 -DB: '3 stone' -> adding 3 x stone -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (stone). -DB: Looking for stacks... -DB: STACK FOUND (1 x stone). Adding 3 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (2 x stone). Adding 3 obs to existing stack. -adding 5 stone to cell 4,3 -DB: '5 stone' -> adding 5 x stone -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (stone). -DB: Looking for stacks... -DB: STACK FOUND (1 x stone). Adding 5 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (2 x stone). Adding 5 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (3 x stone). Adding 5 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (4 x stone). Adding 5 obs to existing stack. ---> Will add 10 objects to room 13 (of 23) -adding 22 gold coin to cell 30,43 -DB: '22 gold coin' -> adding 22 x gold coin -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (gold coin). -DB: Looking for stacks... -DB: STACK FOUND (1 x gold coin). Adding 22 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (2 x gold coin). Adding 22 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (3 x gold coin). Adding 22 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (4 x gold coin). Adding 22 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (5 x gold coin). Adding 22 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (6 x gold coin). Adding 22 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (7 x gold coin). Adding 22 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (8 x gold coin). Adding 22 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (9 x gold coin). Adding 22 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (10 x gold coin). Adding 22 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (11 x gold coin). Adding 22 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (12 x gold coin). Adding 22 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (13 x gold coin). Adding 22 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (14 x gold coin). Adding 22 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (15 x gold coin). Adding 22 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (16 x gold coin). Adding 22 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (17 x gold coin). Adding 22 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (18 x gold coin). Adding 22 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (19 x gold coin). Adding 22 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (20 x gold coin). Adding 22 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (21 x gold coin). Adding 22 obs to existing stack. -adding 1 map to cell 34,48 -DB: '1 map' -> adding 1 x map -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (map). -adding àð¿_ÿ to cell 30,45 -DB: '10 gold coins' -> adding 10 x gold coin -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (gold coin). -DB: Looking for stacks... -DB: STACK FOUND (1 x gold coin). Adding 10 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (2 x gold coin). Adding 10 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (3 x gold coin). Adding 10 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (4 x gold coin). Adding 10 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (5 x gold coin). Adding 10 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (6 x gold coin). Adding 10 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (7 x gold coin). Adding 10 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (8 x gold coin). Adding 10 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (9 x gold coin). Adding 10 obs to existing stack. -DB: 'quickblade' -> adding 1 x quickblade -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (quickblade). -DB: 'leather boots' -> adding 1 x pair of leather boots -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (pair of leather boots). -DB: 'leather gloves' -> adding 1 x pair of leather gloves -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (pair of leather gloves). -DB: '3 potions of healing' -> adding 3 x potion of healing -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (potion of healing). -DB: Looking for stacks... -DB: STACK FOUND (1 x potion of healing). Adding 3 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (2 x potion of healing). Adding 3 obs to existing stack. -adding random object of damtype piercing, rarity 2 - -got 5 possibilities. -DB: '1 dagger' -> adding 1 x dagger -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (dagger). -DB: 'fists' -> adding 1 x fists -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (fists). -adding 7 stone to cell 29,42 -DB: '7 stone' -> adding 7 x stone -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (stone). -DB: Looking for stacks... -DB: STACK FOUND (1 x stone). Adding 7 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (2 x stone). Adding 7 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (3 x stone). Adding 7 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (4 x stone). Adding 7 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (5 x stone). Adding 7 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (6 x stone). Adding 7 obs to existing stack. -adding 6 stone to cell 33,45 -DB: '6 stone' -> adding 6 x stone -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (stone). -DB: Looking for stacks... -DB: STACK FOUND (1 x stone). Adding 6 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (2 x stone). Adding 6 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (3 x stone). Adding 6 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (4 x stone). Adding 6 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (5 x stone). Adding 6 obs to existing stack. -adding 6 stone to cell 34,46 -DB: '6 stone' -> adding 6 x stone -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (stone). -DB: Looking for stacks... -DB: STACK FOUND (1 x stone). Adding 6 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (2 x stone). Adding 6 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (3 x stone). Adding 6 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (4 x stone). Adding 6 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (5 x stone). Adding 6 obs to existing stack. -adding 1 empty flask to cell 28,48 -DB: '1 empty flask' -> adding 1 x empty flask -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (empty flask). ---> Will add 3 objects to room 14 (of 23) -adding 8 stone to cell 26,1 -DB: '8 stone' -> adding 8 x stone -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (stone). -DB: Looking for stacks... -DB: STACK FOUND (1 x stone). Adding 8 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (2 x stone). Adding 8 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (3 x stone). Adding 8 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (4 x stone). Adding 8 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (5 x stone). Adding 8 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (6 x stone). Adding 8 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (7 x stone). Adding 8 obs to existing stack. -adding 6 stone to cell 24,2 -DB: '6 stone' -> adding 6 x stone -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (stone). -DB: Looking for stacks... -DB: STACK FOUND (1 x stone). Adding 6 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (2 x stone). Adding 6 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (3 x stone). Adding 6 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (4 x stone). Adding 6 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (5 x stone). Adding 6 obs to existing stack. ---> Will add 0 objects to room 15 (of 23) ---> Will add 3 objects to room 16 (of 23) -adding 1 great club to cell 52,22 -DB: '1 great club' -> adding 1 x great club -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (great club). -adding 1 morningstar to cell 56,23 -DB: '1 morningstar' -> adding 1 x morningstar -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (morningstar). ---> Will add 3 objects to room 17 (of 23) -adding 1 spear to cell 73,41 -DB: '1 spear' -> adding 1 x spear -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (spear). -adding 4 stone to cell 74,40 -DB: '4 stone' -> adding 4 x stone -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (stone). -DB: Looking for stacks... -DB: STACK FOUND (1 x stone). Adding 4 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (2 x stone). Adding 4 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (3 x stone). Adding 4 obs to existing stack. -adding àð¿_ÿ to cell 70,42 -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). ---> Will add 1 objects to room 18 (of 23) ---> Will add 11 objects to room 19 (of 23) -adding 4 stone to cell 75,9 -DB: '4 stone' -> adding 4 x stone -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (stone). -DB: Looking for stacks... -DB: STACK FOUND (1 x stone). Adding 4 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (2 x stone). Adding 4 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (3 x stone). Adding 4 obs to existing stack. -adding 5 stone to cell 71,8 -DB: '5 stone' -> adding 5 x stone -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (stone). -DB: Looking for stacks... -DB: STACK FOUND (1 x stone). Adding 5 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (2 x stone). Adding 5 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (3 x stone). Adding 5 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (4 x stone). Adding 5 obs to existing stack. -adding 7 stone to cell 76,9 -DB: '7 stone' -> adding 7 x stone -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (stone). -DB: Looking for stacks... -DB: STACK FOUND (1 x stone). Adding 7 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (2 x stone). Adding 7 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (3 x stone). Adding 7 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (4 x stone). Adding 7 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (5 x stone). Adding 7 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (6 x stone). Adding 7 obs to existing stack. -adding àð¿_ÿ to cell 77,8 -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -adding 1 map to cell 74,7 -DB: '1 map' -> adding 1 x map -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (map). -adding àð¿_ÿ to cell 77,10 -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). ---> Will add 4 objects to room 20 (of 23) ---> Will add 2 objects to room 21 (of 23) -adding 10 stone to cell 23,27 -DB: '10 stone' -> adding 10 x stone -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (stone). -DB: Looking for stacks... -DB: STACK FOUND (1 x stone). Adding 10 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (2 x stone). Adding 10 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (3 x stone). Adding 10 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (4 x stone). Adding 10 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (5 x stone). Adding 10 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (6 x stone). Adding 10 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (7 x stone). Adding 10 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (8 x stone). Adding 10 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (9 x stone). Adding 10 obs to existing stack. -adding 1 great club to cell 24,24 -DB: '1 great club' -> adding 1 x great club -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (great club). ---> Will add 11 objects to room 22 (of 23) -adding àð¿_ÿ to cell 32,14 -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -adding 1 great club to cell 35,11 -DB: '1 great club' -> adding 1 x great club -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (great club). -adding àð¿_ÿ to cell 31,14 -DB: '10 gold coins' -> adding 10 x gold coin -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (gold coin). -DB: Looking for stacks... -DB: STACK FOUND (1 x gold coin). Adding 10 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (2 x gold coin). Adding 10 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (3 x gold coin). Adding 10 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (4 x gold coin). Adding 10 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (5 x gold coin). Adding 10 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (6 x gold coin). Adding 10 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (7 x gold coin). Adding 10 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (8 x gold coin). Adding 10 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (9 x gold coin). Adding 10 obs to existing stack. -DB: 'quickblade' -> adding 1 x quickblade -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (quickblade). -DB: 'leather boots' -> adding 1 x pair of leather boots -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (pair of leather boots). -DB: 'leather gloves' -> adding 1 x pair of leather gloves -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (pair of leather gloves). -DB: '3 potions of healing' -> adding 3 x potion of healing -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (potion of healing). -DB: Looking for stacks... -DB: STACK FOUND (1 x potion of healing). Adding 3 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (2 x potion of healing). Adding 3 obs to existing stack. -adding random object of damtype piercing, rarity 3 +-> possibility: goblin, rarity=75 +-> possibility: orc, rarity=75 +-> possibility: ork, rarity=75 +-> possibility: slime, rarity=80 +-> possibility: newt, rarity=100 +-> possibility: bat, rarity=90 +-> possibility: giant rat, rarity=90 +-> possibility: wolf, rarity=80 +-> possibility: giant fly, rarity=85 +-> possibility: giant blowfly, rarity=75 +-> possibility: glowbug, rarity=85 +-> possibility: zombie, rarity=75 +got 12 possibilities. +adding rand lf orc to cell 49,6 +adding random object with rarity value between 72 - 100 + (must have obclass = Potions) +got 6 possibilities. +random ob: 1 x potion of acrobatics ('potion of acrobatics') +findotn(): modname is 'potion of acrobatics' +findotn(): modname is 'leather armour' +findotn(): modname is 'bone helmet' +findotn(): modname is 'gauntlets' +adding random object with rarity value between 72 - 100 + (must have obclass = Potions) +got 6 possibilities. +random ob: 1 x potion of fruit juice ('potion of fruit juice') +findotn(): modname is 'potion of fruit juice' +findotn(): modname is 'claws' +adding random object with rarity value between 72 - 100 +got 56 possibilities. +random ob: 1 x banana ('banana') +adding rand obj 1 banana to cell 51,10 +findotn(): modname is 'banana' +adding random object with rarity value between 72 - 100 +got 56 possibilities. +random ob: 1 x dagger ('dagger') +adding rand obj 1 +0 dagger to cell 11,11 +findotn(): modname is 'dagger' +finding random lf with rarity val 75-100 +-> possibility: goblin, rarity=75 +-> possibility: orc, rarity=75 +-> possibility: ork, rarity=75 +-> possibility: slime, rarity=80 +-> possibility: newt, rarity=100 +-> possibility: bat, rarity=90 +-> possibility: giant rat, rarity=90 +-> possibility: wolf, rarity=80 +-> possibility: giant fly, rarity=85 +-> possibility: giant blowfly, rarity=75 +-> possibility: glowbug, rarity=85 +-> possibility: zombie, rarity=75 +got 12 possibilities. +adding rand lf ork to cell 47,14 +adding random object with rarity value between 72 - 100 + (must have damtype = slashing) +got 4 possibilities. +random ob: 1 x scimitar ('scimitar') +findotn(): modname is 'scimitar' +findotn(): modname is 'leather boots' +adding random object with rarity value between 72 - 100 + (must have obclass = Tools/Technology) got 1 possibilities. -DB: '1 quickblade' -> adding 1 x quickblade -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (quickblade). -DB: 'fists' -> adding 1 x fists -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (fists). -adding 1 scimitar to cell 36,12 -DB: '1 scimitar' -> adding 1 x scimitar -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (scimitar). -adding 1 scroll of uncontrolled teleportation to cell 30,15 -DB: '1 scroll of uncontrolled teleportation' -> adding 1 x scroll of uncontrolled teleportation -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (scroll of uncontrolled teleportation). +random ob: 1 x lockpick ('lockpick') +findotn(): modname is 'lockpick' +findotn(): modname is 'claws' +adding random object with rarity value between 72 - 100 +got 56 possibilities. +random ob: 1 x mushroom ('mushroom') +adding rand obj 1 mushroom to cell 66,14 +findotn(): modname is 'mushroom' +finding random lf with rarity val 75-100 + +-> possibility: goblin, rarity=75 +-> possibility: orc, rarity=75 +-> possibility: ork, rarity=75 +-> possibility: slime, rarity=80 +-> possibility: newt, rarity=100 +-> possibility: bat, rarity=90 +-> possibility: giant rat, rarity=90 +-> possibility: wolf, rarity=80 +-> possibility: giant fly, rarity=85 +-> possibility: giant blowfly, rarity=75 +-> possibility: glowbug, rarity=85 +-> possibility: zombie, rarity=75 +got 12 possibilities. +adding rand lf orc to cell 74,15 +adding random object with rarity value between 72 - 100 + (must have damtype = slashing) +got 4 possibilities. +random ob: 1 x knife ('knife') +findotn(): modname is 'knife' +adding random object with rarity value between 72 - 100 + (must have damtype = bludgeoning) +got 4 possibilities. +random ob: 1 x club ('club') +findotn(): modname is 'club' +adding random object with rarity value between 72 - 100 + (must have obclass = Potions) +got 6 possibilities. +random ob: 1 x potion of acrobatics ('potion of acrobatics') +findotn(): modname is 'potion of acrobatics' +findotn(): modname is 'leather boots' +findotn(): modname is 'bone helmet' +findotn(): modname is 'gauntlets' +findotn(): modname is 'claws' +adding random object with rarity value between 72 - 100 +got 56 possibilities. +random ob: 1 x potion of fruit juice ('potion of fruit juice') +adding rand obj 1 potion of fruit juice to cell 76,15 +findotn(): modname is 'potion of fruit juice' +adding random object with rarity value between 72 - 100 +got 56 possibilities. +random ob: 1 x buckler ('buckler') +adding rand obj 1 +0 buckler to cell 74,16 +findotn(): modname is 'buckler' +finding random lf with rarity val 75-100 + +-> possibility: goblin, rarity=75 +-> possibility: orc, rarity=75 +-> possibility: ork, rarity=75 +-> possibility: slime, rarity=80 +-> possibility: newt, rarity=100 +-> possibility: bat, rarity=90 +-> possibility: giant rat, rarity=90 +-> possibility: wolf, rarity=80 +-> possibility: giant fly, rarity=85 +-> possibility: giant blowfly, rarity=75 +-> possibility: glowbug, rarity=85 +-> possibility: zombie, rarity=75 +got 12 possibilities. +adding rand lf giant rat to cell 11,17 +findotn(): modname is 'claws' +finding random lf with rarity val 75-100 + +-> possibility: goblin, rarity=75 +-> possibility: orc, rarity=75 +-> possibility: ork, rarity=75 +-> possibility: slime, rarity=80 +-> possibility: newt, rarity=100 +-> possibility: bat, rarity=90 +-> possibility: giant rat, rarity=90 +-> possibility: wolf, rarity=80 +-> possibility: giant fly, rarity=85 +-> possibility: giant blowfly, rarity=75 +-> possibility: glowbug, rarity=85 +-> possibility: zombie, rarity=75 +got 12 possibilities. +adding rand lf zombie to cell 46,18 +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +adding random object with rarity value between 72 - 100 +got 56 possibilities. +random ob: 1 x banana ('banana') +adding rand obj 1 banana to cell 49,18 +findotn(): modname is 'banana' +finding random lf with rarity val 75-100 + +-> possibility: goblin, rarity=75 +-> possibility: orc, rarity=75 +-> possibility: ork, rarity=75 +-> possibility: slime, rarity=80 +-> possibility: newt, rarity=100 +-> possibility: bat, rarity=90 +-> possibility: giant rat, rarity=90 +-> possibility: wolf, rarity=80 +-> possibility: giant fly, rarity=85 +-> possibility: giant blowfly, rarity=75 +-> possibility: glowbug, rarity=85 +-> possibility: zombie, rarity=75 +got 12 possibilities. +adding rand lf newt to cell 71,18 +finding random lf with rarity val 75-100 + +-> possibility: goblin, rarity=75 +-> possibility: orc, rarity=75 +-> possibility: ork, rarity=75 +-> possibility: slime, rarity=80 +-> possibility: newt, rarity=100 +-> possibility: bat, rarity=90 +-> possibility: giant rat, rarity=90 +-> possibility: wolf, rarity=80 +-> possibility: giant fly, rarity=85 +-> possibility: giant blowfly, rarity=75 +-> possibility: glowbug, rarity=85 +-> possibility: zombie, rarity=75 +got 12 possibilities. +adding rand lf goblin to cell 75,18 +adding random object with rarity value between 72 - 100 + (must have damtype = piercing) +got 4 possibilities. +random ob: 1 x dagger ('dagger') +findotn(): modname is 'dagger' +findotn(): modname is 'claws' +--> Will add 1 objects to room 0 (of 7) +adding random object with rarity value between 72 - 100 +got 56 possibilities. +random ob: 1 x steak knife ('steak knife') +adding rand obj 1 cursed +0 steak knife to cell 13,9 +findotn(): modname is 'steak knife' +--> Will add 6 objects to room 1 (of 7) +finding random lf with rarity val 75-100 + +-> possibility: goblin, rarity=75 +-> possibility: orc, rarity=75 +-> possibility: ork, rarity=75 +-> possibility: slime, rarity=80 +-> possibility: newt, rarity=100 +-> possibility: bat, rarity=90 +-> possibility: giant rat, rarity=90 +-> possibility: wolf, rarity=80 +-> possibility: giant fly, rarity=85 +-> possibility: giant blowfly, rarity=75 +-> possibility: glowbug, rarity=85 +-> possibility: zombie, rarity=75 +got 12 possibilities. +adding rand lf slime to cell 7,1 +findotn(): modname is 'acidattack' +adding random object with rarity value between 72 - 100 +got 56 possibilities. +random ob: 8 x rubber bullet ('rubber bullets') +adding rand obj 8 rubber bullets to cell 17,2 +findotn(): modname is 'rubber bullets' +findotn(): searchfor without 's' is 'rubber bullet' +finding random lf with rarity val 75-100 + +-> possibility: goblin, rarity=75 +-> possibility: orc, rarity=75 +-> possibility: ork, rarity=75 +-> possibility: slime, rarity=80 +-> possibility: newt, rarity=100 +-> possibility: bat, rarity=90 +-> possibility: giant rat, rarity=90 +-> possibility: wolf, rarity=80 +-> possibility: giant fly, rarity=85 +-> possibility: giant blowfly, rarity=75 +-> possibility: glowbug, rarity=85 +-> possibility: zombie, rarity=75 +got 12 possibilities. +adding rand lf newt to cell 13,1 +finding random lf with rarity val 75-100 + +-> possibility: goblin, rarity=75 +-> possibility: orc, rarity=75 +-> possibility: ork, rarity=75 +-> possibility: slime, rarity=80 +-> possibility: newt, rarity=100 +-> possibility: bat, rarity=90 +-> possibility: giant rat, rarity=90 +-> possibility: wolf, rarity=80 +-> possibility: giant fly, rarity=85 +-> possibility: giant blowfly, rarity=75 +-> possibility: glowbug, rarity=85 +-> possibility: zombie, rarity=75 +got 12 possibilities. +adding rand lf newt to cell 11,1 +adding random object with rarity value between 72 - 100 +got 56 possibilities. +random ob: 1 x stick ('stick') +adding rand obj 1 +0 stick to cell 10,2 +findotn(): modname is 'stick' +adding random object with rarity value between 72 - 100 +got 56 possibilities. +random ob: 1 x stone ('stone') +adding rand obj 1 stone to cell 14,1 +findotn(): modname is 'stone' +--> Will add 4 objects to room 2 (of 7) +adding random object with rarity value between 72 - 100 +got 56 possibilities. +random ob: 1 x scroll of nothing ('scroll of nothing') +adding rand obj 1 scroll of nothing to cell 7,17 +findotn(): modname is 'scroll of nothing' +adding random object with rarity value between 72 - 100 +got 56 possibilities. +random ob: 1 x rapier ('rapier') +adding rand obj 1 +0 rapier to cell 5,16 +findotn(): modname is 'rapier' +adding random object with rarity value between 72 - 100 +got 56 possibilities. +random ob: 1 x helmet ('helmet') +adding rand obj 1 +0 helmet to cell 7,16 +findotn(): modname is 'helmet' +adding random object with rarity value between 72 - 100 +got 56 possibilities. +random ob: 1 x gas mask ('gas mask') +adding rand obj 1 +0 gas mask to cell 4,17 +findotn(): modname is 'gas mask' +--> Will add 4 objects to room 3 (of 7) +adding random object with rarity value between 72 - 100 +got 56 possibilities. +random ob: 1 x potion of fruit juice ('potion of fruit juice') +adding rand obj 1 potion of fruit juice to cell 62,14 +findotn(): modname is 'potion of fruit juice' +finding random lf with rarity val 75-100 + +-> possibility: goblin, rarity=75 +-> possibility: orc, rarity=75 +-> possibility: ork, rarity=75 +-> possibility: slime, rarity=80 +-> possibility: newt, rarity=100 +-> possibility: bat, rarity=90 +-> possibility: giant rat, rarity=90 +-> possibility: wolf, rarity=80 +-> possibility: giant fly, rarity=85 +-> possibility: giant blowfly, rarity=75 +-> possibility: glowbug, rarity=85 +-> possibility: zombie, rarity=75 +got 12 possibilities. +adding rand lf bat to cell 61,15 +findotn(): modname is 'teeth' +adding random object with rarity value between 72 - 100 +got 56 possibilities. +random ob: 1 x football helmet ('football helmet') +adding rand obj 1 cursed +0 football helmet to cell 58,15 +findotn(): modname is 'football helmet' +adding random object with rarity value between 72 - 100 +got 56 possibilities. +random ob: 1 x bone ('bone') +adding rand obj 1 bone to cell 57,15 +findotn(): modname is 'bone' +--> Will add 6 objects to room 4 (of 7) +finding random lf with rarity val 75-100 + +-> possibility: goblin, rarity=75 +-> possibility: orc, rarity=75 +-> possibility: ork, rarity=75 +-> possibility: slime, rarity=80 +-> possibility: newt, rarity=100 +-> possibility: bat, rarity=90 +-> possibility: giant rat, rarity=90 +-> possibility: wolf, rarity=80 +-> possibility: giant fly, rarity=85 +-> possibility: giant blowfly, rarity=75 +-> possibility: glowbug, rarity=85 +-> possibility: zombie, rarity=75 +got 12 possibilities. +adding rand lf giant fly to cell 28,6 +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +adding random object with rarity value between 72 - 100 +got 56 possibilities. +random ob: 1 x short sword ('short sword') +adding rand obj 1 blessed +0 short sword to cell 29,5 +findotn(): modname is 'short sword' +finding random lf with rarity val 75-100 + +-> possibility: goblin, rarity=75 +-> possibility: orc, rarity=75 +-> possibility: ork, rarity=75 +-> possibility: slime, rarity=80 +-> possibility: newt, rarity=100 +-> possibility: bat, rarity=90 +-> possibility: giant rat, rarity=90 +-> possibility: wolf, rarity=80 +-> possibility: giant fly, rarity=85 +-> possibility: giant blowfly, rarity=75 +-> possibility: glowbug, rarity=85 +-> possibility: zombie, rarity=75 +got 12 possibilities. +adding rand lf glowbug to cell 26,6 +findotn(): modname is 'zapper' +finding random lf with rarity val 75-100 + +-> possibility: goblin, rarity=75 +-> possibility: orc, rarity=75 +-> possibility: ork, rarity=75 +-> possibility: slime, rarity=80 +-> possibility: newt, rarity=100 +-> possibility: bat, rarity=90 +-> possibility: giant rat, rarity=90 +-> possibility: wolf, rarity=80 +-> possibility: giant fly, rarity=85 +-> possibility: giant blowfly, rarity=75 +-> possibility: glowbug, rarity=85 +-> possibility: zombie, rarity=75 +got 12 possibilities. +adding rand lf wolf to cell 22,5 +findotn(): modname is 'claws' +adding random object with rarity value between 72 - 100 +got 56 possibilities. +random ob: 1 x helmet ('helmet') +adding rand obj 1 +0 helmet to cell 20,6 +findotn(): modname is 'helmet' +finding random lf with rarity val 75-100 + +-> possibility: goblin, rarity=75 +-> possibility: orc, rarity=75 +-> possibility: ork, rarity=75 +-> possibility: slime, rarity=80 +-> possibility: newt, rarity=100 +-> possibility: bat, rarity=90 +-> possibility: giant rat, rarity=90 +-> possibility: wolf, rarity=80 +-> possibility: giant fly, rarity=85 +-> possibility: giant blowfly, rarity=75 +-> possibility: glowbug, rarity=85 +-> possibility: zombie, rarity=75 +got 12 possibilities. +adding rand lf wolf to cell 25,5 +findotn(): modname is 'teeth' +--> Will add 0 objects to room 5 (of 7) +--> Will add 1 objects to room 6 (of 7) +adding random object with rarity value between 72 - 100 +got 56 possibilities. +random ob: 1 x scimitar ('scimitar') +adding rand obj 1 +0 scimitar to cell 20,12 +findotn(): modname is 'scimitar' Finished adding objects. -DB: '10 gold coins' -> adding 10 x gold coin -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (gold coin). -DB: Looking for stacks... -DB: STACK FOUND (1 x gold coin). Adding 10 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (2 x gold coin). Adding 10 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (3 x gold coin). Adding 10 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (4 x gold coin). Adding 10 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (5 x gold coin). Adding 10 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (6 x gold coin). Adding 10 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (7 x gold coin). Adding 10 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (8 x gold coin). Adding 10 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (9 x gold coin). Adding 10 obs to existing stack. -DB: 'quickblade' -> adding 1 x quickblade -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (quickblade). -DB: 'leather boots' -> adding 1 x pair of leather boots -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (pair of leather boots). -DB: 'leather gloves' -> adding 1 x pair of leather gloves -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (pair of leather gloves). -DB: '3 potions of healing' -> adding 3 x potion of healing -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (potion of healing). -DB: Looking for stacks... -DB: STACK FOUND (1 x potion of healing). Adding 3 obs to existing stack. -DB: Looking for stacks... -DB: STACK FOUND (2 x potion of healing). Adding 3 obs to existing stack. -adding random object of damtype piercing, rarity 4 - -no possible objects like this. trying again with rarity 3 - -got 1 possibilities. -DB: '1 quickblade' -> adding 1 x quickblade -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (quickblade). -DB: 'fists' -> adding 1 x fists -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (fists). -AIMOVE: rat -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -.oO { i do not have a target. } -.oO { default - moving randomly } -lfid 0 (rat) spending 15 time - -AFTER SORT: -- rat (timespent= 15) (sorted=-1) -- player (timespent= 39) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 14) (sorted=-1) -- player (timespent= 38) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 13) (sorted=-1) -- player (timespent= 37) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 12) (sorted=-1) -- player (timespent= 36) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 11) (sorted=-1) -- player (timespent= 35) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 10) (sorted=-1) -- player (timespent= 34) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 9) (sorted=-1) -- player (timespent= 33) (sorted=-1) -AFTER SORT: -- rat (timespent= 8) (sorted=-1) -- player (timespent= 32) (sorted=-1) -AFTER SORT: -- rat (timespent= 7) (sorted=-1) -- player (timespent= 31) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 6) (sorted=-1) -- player (timespent= 30) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- rat (timespent= 5) (sorted=-1) -- player (timespent= 29) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 4) (sorted=-1) -- player (timespent= 28) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 3) (sorted=-1) -- player (timespent= 27) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- rat (timespent= 2) (sorted=-1) -- player (timespent= 26) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 1) (sorted=-1) -- player (timespent= 25) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 24) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 23) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 22) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 21) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 20) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 19) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 18) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 17) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 16) (sorted=-1) -AIMOVE: rat -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -.oO { i do not have a target. } -.oO { default - moving randomly } -lfid 0 (rat) spending 15 time - -AFTER SORT: -- rat (timespent= 15) (sorted=-1) -- player (timespent= 15) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 14) (sorted=-1) -- player (timespent= 14) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 13) (sorted=-1) -- player (timespent= 13) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 12) (sorted=-1) -- player (timespent= 12) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 11) (sorted=-1) -- player (timespent= 11) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 10) (sorted=-1) -- player (timespent= 10) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 9) (sorted=-1) -- player (timespent= 9) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 8) (sorted=-1) -- player (timespent= 8) (sorted=-1) -AFTER SORT: -- rat (timespent= 7) (sorted=-1) -- player (timespent= 7) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 6) (sorted=-1) -- player (timespent= 6) (sorted=-1) -AFTER SORT: -- rat (timespent= 5) (sorted=-1) -- player (timespent= 5) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 4) (sorted=-1) -- player (timespent= 4) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- rat (timespent= 3) (sorted=-1) -- player (timespent= 3) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 2) (sorted=-1) -- player (timespent= 2) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 1) (sorted=-1) -- player (timespent= 1) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 0) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 0) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 0) (sorted=-1) -AIMOVE: rat -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -.oO { i do not have a target. } -.oO { default - moving randomly } -lfid 0 (rat) spending 15 time - -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 15) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 14) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 13) (sorted=-1) -lfid 21 (human) spending 20 time - -AFTER SORT: -- rat (timespent= 12) (sorted=-1) -- player (timespent= 20) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 11) (sorted=-1) -- player (timespent= 19) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 10) (sorted=-1) -- player (timespent= 18) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- rat (timespent= 9) (sorted=-1) -- player (timespent= 17) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- rat (timespent= 8) (sorted=-1) -- player (timespent= 16) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 7) (sorted=-1) -- player (timespent= 15) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 6) (sorted=-1) -- player (timespent= 14) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 5) (sorted=-1) -- player (timespent= 13) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 4) (sorted=-1) -- player (timespent= 12) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 3) (sorted=-1) -- player (timespent= 11) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 2) (sorted=-1) -- player (timespent= 10) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 1) (sorted=-1) -- player (timespent= 9) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 8) (sorted=-1) -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 7) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 6) (sorted=-1) -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 5) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 4) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 3) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 2) (sorted=-1) -AIMOVE: rat -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -.oO { i do not have a target. } -.oO { default - moving randomly } -lfid 0 (rat) spending 15 time - -AFTER SORT: -- player (timespent= 1) (sorted=-1) -- rat (timespent= 15) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 14) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 13) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 12) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 11) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 10) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 9) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 8) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 7) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 6) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 5) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 4) (sorted=-1) -lfid 21 (human) spending 20 time - -AFTER SORT: -- rat (timespent= 3) (sorted=-1) -- player (timespent= 20) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 2) (sorted=-1) -- player (timespent= 19) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 1) (sorted=-1) -- player (timespent= 18) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 17) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 16) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 15) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 14) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 13) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 12) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 11) (sorted=-1) -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 10) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 9) (sorted=-1) -AIMOVE: rat -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -.oO { i do not have a target. } -.oO { default - moving randomly } -lfid 0 (rat) spending 15 time - -AFTER SORT: -- player (timespent= 8) (sorted=-1) -- rat (timespent= 15) (sorted=-1) -AFTER SORT: -- player (timespent= 7) (sorted=-1) -- rat (timespent= 14) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 6) (sorted=-1) -- rat (timespent= 13) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 5) (sorted=-1) -- rat (timespent= 12) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 4) (sorted=-1) -- rat (timespent= 11) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 3) (sorted=-1) -- rat (timespent= 10) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 2) (sorted=-1) -- rat (timespent= 9) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 1) (sorted=-1) -- rat (timespent= 8) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 7) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 6) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 5) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 4) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 3) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 2) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 1) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 0) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 0) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 0) (sorted=-1) -lfid 21 (human) spending 20 time - -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 20) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 19) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 18) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 17) (sorted=-1) -AIMOVE: rat -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -.oO { i do not have a target. } -.oO { default - moving randomly } -lfid 0 (rat) spending 15 time - -AFTER SORT: -- rat (timespent= 15) (sorted=-1) -- player (timespent= 16) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 14) (sorted=-1) -- player (timespent= 15) (sorted=-1) -AFTER SORT: -- rat (timespent= 13) (sorted=-1) -- player (timespent= 14) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 12) (sorted=-1) -- player (timespent= 13) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- rat (timespent= 11) (sorted=-1) -- player (timespent= 12) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 10) (sorted=-1) -- player (timespent= 11) (sorted=-1) -AFTER SORT: -- rat (timespent= 9) (sorted=-1) -- player (timespent= 10) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 8) (sorted=-1) -- player (timespent= 9) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- rat (timespent= 7) (sorted=-1) -- player (timespent= 8) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 6) (sorted=-1) -- player (timespent= 7) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 5) (sorted=-1) -- player (timespent= 6) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- rat (timespent= 4) (sorted=-1) -- player (timespent= 5) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- rat (timespent= 3) (sorted=-1) -- player (timespent= 4) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 2) (sorted=-1) -- player (timespent= 3) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 1) (sorted=-1) -- player (timespent= 2) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 1) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 0) (sorted=-1) -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 0) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 0) (sorted=-1) -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 0) (sorted=-1) -AIMOVE: rat -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -.oO { i do not have a target. } -.oO { default - moving randomly } -lfid 0 (rat) spending 15 time - -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 15) (sorted=-1) -lfid 21 (human) spending 20 time - -AFTER SORT: -- rat (timespent= 14) (sorted=-1) -- player (timespent= 20) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 13) (sorted=-1) -- player (timespent= 19) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 12) (sorted=-1) -- player (timespent= 18) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 11) (sorted=-1) -- player (timespent= 17) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 10) (sorted=-1) -- player (timespent= 16) (sorted=-1) -AFTER SORT: -- rat (timespent= 9) (sorted=-1) -- player (timespent= 15) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 8) (sorted=-1) -- player (timespent= 14) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 7) (sorted=-1) -- player (timespent= 13) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 6) (sorted=-1) -- player (timespent= 12) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 5) (sorted=-1) -- player (timespent= 11) (sorted=-1) -AFTER SORT: -- rat (timespent= 4) (sorted=-1) -- player (timespent= 10) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 3) (sorted=-1) -- player (timespent= 9) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 2) (sorted=-1) -- player (timespent= 8) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 1) (sorted=-1) -- player (timespent= 7) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 6) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 5) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 4) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 3) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 2) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 1) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 0) (sorted=-1) -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 0) (sorted=-1) -AIMOVE: rat -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -.oO { i do not have a target. } -.oO { default - moving randomly } -lfid 0 (rat) spending 15 time - -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 15) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 14) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 13) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 12) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 11) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 10) (sorted=-1) -lfid 21 (human) spending 20 time - -AFTER SORT: -- rat (timespent= 9) (sorted=-1) -- player (timespent= 20) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 8) (sorted=-1) -- player (timespent= 19) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- rat (timespent= 7) (sorted=-1) -- player (timespent= 18) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 6) (sorted=-1) -- player (timespent= 17) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 5) (sorted=-1) -- player (timespent= 16) (sorted=-1) -AFTER SORT: -- rat (timespent= 4) (sorted=-1) -- player (timespent= 15) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 3) (sorted=-1) -- player (timespent= 14) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- rat (timespent= 2) (sorted=-1) -- player (timespent= 13) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 1) (sorted=-1) -- player (timespent= 12) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 11) (sorted=-1) -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 10) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 9) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 8) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 7) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 6) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 5) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 4) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 3) (sorted=-1) -AIMOVE: rat -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -.oO { i do not have a target. } -.oO { default - moving randomly } -lfid 0 (rat) spending 15 time - -AFTER SORT: -- player (timespent= 2) (sorted=-1) -- rat (timespent= 15) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 1) (sorted=-1) -- rat (timespent= 14) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 13) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 12) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 11) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 10) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 9) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 8) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 7) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 6) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 5) (sorted=-1) -lfid 21 (human) spending 20 time - -AFTER SORT: -- rat (timespent= 4) (sorted=-1) -- player (timespent= 20) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 3) (sorted=-1) -- player (timespent= 19) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 2) (sorted=-1) -- player (timespent= 18) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 1) (sorted=-1) -- player (timespent= 17) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 16) (sorted=-1) -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 15) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 14) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 13) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 12) (sorted=-1) -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 11) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 10) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 9) (sorted=-1) -AIMOVE: rat -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -.oO { i do not have a target. } -.oO { default - moving randomly } -lfid 0 (rat) spending 15 time - -AFTER SORT: -- player (timespent= 8) (sorted=-1) -- rat (timespent= 15) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 7) (sorted=-1) -- rat (timespent= 14) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 6) (sorted=-1) -- rat (timespent= 13) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 5) (sorted=-1) -- rat (timespent= 12) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 4) (sorted=-1) -- rat (timespent= 11) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 3) (sorted=-1) -- rat (timespent= 10) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 2) (sorted=-1) -- rat (timespent= 9) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 1) (sorted=-1) -- rat (timespent= 8) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 7) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 6) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 5) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 4) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 3) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 2) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 1) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 0) (sorted=-1) -lfid 21 (human) spending 20 time - -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 20) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 19) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 18) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 17) (sorted=-1) -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 16) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 15) (sorted=-1) -AIMOVE: rat -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -.oO { i do not have a target. } -.oO { default - moving randomly } -lfid 0 (rat) spending 15 time - -AFTER SORT: -- player (timespent= 14) (sorted=-1) -- rat (timespent= 15) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 13) (sorted=-1) -- rat (timespent= 14) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 12) (sorted=-1) -- rat (timespent= 13) (sorted=-1) -AFTER SORT: -- player (timespent= 11) (sorted=-1) -- rat (timespent= 12) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 10) (sorted=-1) -- rat (timespent= 11) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 9) (sorted=-1) -- rat (timespent= 10) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 8) (sorted=-1) -- rat (timespent= 9) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 7) (sorted=-1) -- rat (timespent= 8) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 6) (sorted=-1) -- rat (timespent= 7) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 5) (sorted=-1) -- rat (timespent= 6) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 4) (sorted=-1) -- rat (timespent= 5) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 3) (sorted=-1) -- rat (timespent= 4) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 2) (sorted=-1) -- rat (timespent= 3) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 1) (sorted=-1) -- rat (timespent= 2) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 1) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 0) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 0) (sorted=-1) -lfid 21 (human) spending 20 time - -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 20) (sorted=-1) -AIMOVE: rat -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -.oO { i do not have a target. } -.oO { default - moving randomly } -lfid 0 (rat) spending 15 time - -AFTER SORT: -- rat (timespent= 15) (sorted=-1) -- player (timespent= 19) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 14) (sorted=-1) -- player (timespent= 18) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 13) (sorted=-1) -- player (timespent= 17) (sorted=-1) -AFTER SORT: -- rat (timespent= 12) (sorted=-1) -- player (timespent= 16) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- rat (timespent= 11) (sorted=-1) -- player (timespent= 15) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 10) (sorted=-1) -- player (timespent= 14) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 9) (sorted=-1) -- player (timespent= 13) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 8) (sorted=-1) -- player (timespent= 12) (sorted=-1) -AFTER SORT: -- rat (timespent= 7) (sorted=-1) -- player (timespent= 11) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 6) (sorted=-1) -- player (timespent= 10) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 5) (sorted=-1) -- player (timespent= 9) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 4) (sorted=-1) -- player (timespent= 8) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- rat (timespent= 3) (sorted=-1) -- player (timespent= 7) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 2) (sorted=-1) -- player (timespent= 6) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- rat (timespent= 1) (sorted=-1) -- player (timespent= 5) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 4) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 3) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 2) (sorted=-1) -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 1) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 0) (sorted=-1) -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 0) (sorted=-1) -AIMOVE: rat -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -.oO { i do not have a target. } -.oO { default - moving randomly } -lfid 0 (rat) spending 15 time - -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 15) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 14) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 13) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 12) (sorted=-1) -lfid 21 (human) spending 20 time - -AFTER SORT: -- rat (timespent= 11) (sorted=-1) -- player (timespent= 20) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 10) (sorted=-1) -- player (timespent= 19) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 9) (sorted=-1) -- player (timespent= 18) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 8) (sorted=-1) -- player (timespent= 17) (sorted=-1) -AFTER SORT: -- rat (timespent= 7) (sorted=-1) -- player (timespent= 16) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- rat (timespent= 6) (sorted=-1) -- player (timespent= 15) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 5) (sorted=-1) -- player (timespent= 14) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 4) (sorted=-1) -- player (timespent= 13) (sorted=-1) -AFTER SORT: -- rat (timespent= 3) (sorted=-1) -- player (timespent= 12) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 2) (sorted=-1) -- player (timespent= 11) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- rat (timespent= 1) (sorted=-1) -- player (timespent= 10) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 9) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 8) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 7) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 6) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 5) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 4) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 3) (sorted=-1) -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 2) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 1) (sorted=-1) -AIMOVE: rat -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -.oO { i do not have a target. } -.oO { default - moving randomly } -lfid 0 (rat) spending 15 time - -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 15) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 14) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 13) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 12) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 11) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 10) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 9) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 8) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 7) (sorted=-1) -lfid 21 (human) spending 20 time - -AFTER SORT: -- rat (timespent= 6) (sorted=-1) -- player (timespent= 20) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 5) (sorted=-1) -- player (timespent= 19) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 4) (sorted=-1) -- player (timespent= 18) (sorted=-1) -AFTER SORT: -- rat (timespent= 3) (sorted=-1) -- player (timespent= 17) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 2) (sorted=-1) -- player (timespent= 16) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 1) (sorted=-1) -- player (timespent= 15) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 14) (sorted=-1) -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 13) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 12) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 11) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 10) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 9) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 8) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 7) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 6) (sorted=-1) -AIMOVE: rat -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -.oO { i do not have a target. } -.oO { default - moving randomly } -lfid 0 (rat) spending 15 time - -AFTER SORT: -- player (timespent= 5) (sorted=-1) -- rat (timespent= 15) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 4) (sorted=-1) -- rat (timespent= 14) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 3) (sorted=-1) -- rat (timespent= 13) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 2) (sorted=-1) -- rat (timespent= 12) (sorted=-1) -AFTER SORT: -- player (timespent= 1) (sorted=-1) -- rat (timespent= 11) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 10) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 9) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 8) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 7) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 6) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 5) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 4) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 3) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 2) (sorted=-1) -lfid 21 (human) spending 20 time - -AFTER SORT: -- rat (timespent= 1) (sorted=-1) -- player (timespent= 20) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 19) (sorted=-1) -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 18) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 17) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 16) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 15) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 14) (sorted=-1) -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 13) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 12) (sorted=-1) -AIMOVE: rat -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -.oO { i do not have a target. } -.oO { default - moving randomly } -lfid 0 (rat) spending 15 time - -AFTER SORT: -- player (timespent= 11) (sorted=-1) -- rat (timespent= 15) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 10) (sorted=-1) -- rat (timespent= 14) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 9) (sorted=-1) -- rat (timespent= 13) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 8) (sorted=-1) -- rat (timespent= 12) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 7) (sorted=-1) -- rat (timespent= 11) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 6) (sorted=-1) -- rat (timespent= 10) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 5) (sorted=-1) -- rat (timespent= 9) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 4) (sorted=-1) -- rat (timespent= 8) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 3) (sorted=-1) -- rat (timespent= 7) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 2) (sorted=-1) -- rat (timespent= 6) (sorted=-1) -AFTER SORT: -- player (timespent= 1) (sorted=-1) -- rat (timespent= 5) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 4) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 3) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 2) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 1) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 0) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 0) (sorted=-1) -lfid 21 (human) spending 20 time - -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 20) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 19) (sorted=-1) -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 18) (sorted=-1) -AIMOVE: rat -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -.oO { i do not have a target. } -.oO { default - moving randomly } -lfid 0 (rat) spending 15 time - -AFTER SORT: -- rat (timespent= 15) (sorted=-1) -- player (timespent= 17) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 14) (sorted=-1) -- player (timespent= 16) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 13) (sorted=-1) -- player (timespent= 15) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 12) (sorted=-1) -- player (timespent= 14) (sorted=-1) -AFTER SORT: -- rat (timespent= 11) (sorted=-1) -- player (timespent= 13) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 10) (sorted=-1) -- player (timespent= 12) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 9) (sorted=-1) -- player (timespent= 11) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 8) (sorted=-1) -- player (timespent= 10) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- rat (timespent= 7) (sorted=-1) -- player (timespent= 9) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 6) (sorted=-1) -- player (timespent= 8) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- rat (timespent= 5) (sorted=-1) -- player (timespent= 7) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- rat (timespent= 4) (sorted=-1) -- player (timespent= 6) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 3) (sorted=-1) -- player (timespent= 5) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 2) (sorted=-1) -- player (timespent= 4) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- rat (timespent= 1) (sorted=-1) -- player (timespent= 3) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 2) (sorted=-1) -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 1) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 0) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 0) (sorted=-1) -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 0) (sorted=-1) -AIMOVE: rat -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -.oO { i do not have a target. } -.oO { default - moving randomly } -lfid 0 (rat) spending 15 time - -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 15) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 14) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 13) (sorted=-1) -lfid 21 (human) spending 20 time - -AFTER SORT: -- rat (timespent= 12) (sorted=-1) -- player (timespent= 20) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 11) (sorted=-1) -- player (timespent= 19) (sorted=-1) -AFTER SORT: -- rat (timespent= 10) (sorted=-1) -- player (timespent= 18) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 9) (sorted=-1) -- player (timespent= 17) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 8) (sorted=-1) -- player (timespent= 16) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 7) (sorted=-1) -- player (timespent= 15) (sorted=-1) -AFTER SORT: -- rat (timespent= 6) (sorted=-1) -- player (timespent= 14) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 5) (sorted=-1) -- player (timespent= 13) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 4) (sorted=-1) -- player (timespent= 12) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 3) (sorted=-1) -- player (timespent= 11) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- rat (timespent= 2) (sorted=-1) -- player (timespent= 10) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 1) (sorted=-1) -- player (timespent= 9) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 8) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 7) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 6) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 5) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 4) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 3) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 2) (sorted=-1) -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 1) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 0) (sorted=-1) -AIMOVE: rat -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -.oO { i do not have a target. } -.oO { default - moving randomly } -lfid 0 (rat) spending 15 time - -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 15) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 14) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 13) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 12) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 11) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 10) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 9) (sorted=-1) -lfid 21 (human) spending 20 time - -AFTER SORT: -- rat (timespent= 8) (sorted=-1) -- player (timespent= 20) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 7) (sorted=-1) -- player (timespent= 19) (sorted=-1) -AFTER SORT: -- rat (timespent= 6) (sorted=-1) -- player (timespent= 18) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 5) (sorted=-1) -- player (timespent= 17) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- rat (timespent= 4) (sorted=-1) -- player (timespent= 16) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 3) (sorted=-1) -- player (timespent= 15) (sorted=-1) -AFTER SORT: -- rat (timespent= 2) (sorted=-1) -- player (timespent= 14) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 1) (sorted=-1) -- player (timespent= 13) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 12) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 11) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 10) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 9) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 8) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 7) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 6) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 5) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 4) (sorted=-1) -AIMOVE: rat -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -.oO { i do not have a target. } -.oO { default - moving randomly } -lfid 0 (rat) spending 15 time - -AFTER SORT: -- player (timespent= 3) (sorted=-1) -- rat (timespent= 15) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 2) (sorted=-1) -- rat (timespent= 14) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 1) (sorted=-1) -- rat (timespent= 13) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 12) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 11) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 10) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 9) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 8) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 7) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 6) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 5) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 4) (sorted=-1) -lfid 21 (human) spending 20 time - -AFTER SORT: -- player (timespent= 20) (sorted=-1) -AFTER SORT: -- player (timespent= 19) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 18) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 17) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 16) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 15) (sorted=-1) -AFTER SORT: -- player (timespent= 14) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 13) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 12) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 11) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 10) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 9) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 8) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 7) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 6) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 5) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 4) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 3) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 2) (sorted=-1) -AFTER SORT: -- player (timespent= 1) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -lfid 21 (human) spending 20 time - -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 20) (sorted=-1) -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 19) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 18) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 17) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 16) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 15) (sorted=-1) -AFTER SORT: -- rat (timespent= 0) (sorted=-1) -- player (timespent= 14) (sorted=-1) -AIMOVE: rat -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -.oO { i do not have a target. } -.oO { default - moving randomly } -lfid 0 (rat) spending 15 time - -AFTER SORT: -- player (timespent= 13) (sorted=-1) -- rat (timespent= 15) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 12) (sorted=-1) -- rat (timespent= 14) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 11) (sorted=-1) -- rat (timespent= 13) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 10) (sorted=-1) -- rat (timespent= 12) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 9) (sorted=-1) -- rat (timespent= 11) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 8) (sorted=-1) -- rat (timespent= 10) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 7) (sorted=-1) -- rat (timespent= 9) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 6) (sorted=-1) -- rat (timespent= 8) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 5) (sorted=-1) -- rat (timespent= 7) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 4) (sorted=-1) -- rat (timespent= 6) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 3) (sorted=-1) -- rat (timespent= 5) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 2) (sorted=-1) -- rat (timespent= 4) (sorted=-1) -AFTER SORT: -- player (timespent= 1) (sorted=-1) -- rat (timespent= 3) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 2) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 1) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 0) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 0) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- rat (timespent= 0) (sorted=-1) -lfid 21 (human) spending 20 time - -AFTER SORT: -- player (timespent= 20) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 19) (sorted=-1) -AFTER SORT: -- player (timespent= 18) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 17) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 16) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 15) (sorted=-1) -AFTER SORT: -- player (timespent= 14) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 13) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 12) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 11) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 10) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 9) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 8) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 7) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 6) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 5) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 4) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 3) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 2) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 1) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -lfid 21 (human) spending 20 time - -AFTER SORT: -- player (timespent= 20) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 19) (sorted=-1) -AFTER SORT: -- player (timespent= 18) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 17) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 16) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 15) (sorted=-1) -AFTER SORT: -- player (timespent= 14) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 13) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 12) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 11) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 10) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 9) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 8) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 7) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 6) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 5) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 4) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 3) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 2) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 1) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -lfid 21 (human) spending 20 time - -AFTER SORT: -- player (timespent= 20) (sorted=-1) -AFTER SORT: -- player (timespent= 19) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 18) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 17) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 16) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 15) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 14) (sorted=-1) -AFTER SORT: -- player (timespent= 13) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 12) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 11) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 10) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 9) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 8) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 7) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 6) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 5) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 4) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 3) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 2) (sorted=-1) -AFTER SORT: -- player (timespent= 1) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -lfid 21 (human) spending 20 time - -AFTER SORT: -- player (timespent= 20) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 19) (sorted=-1) -AFTER SORT: -- player (timespent= 18) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 17) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 16) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 15) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 14) (sorted=-1) -AFTER SORT: -- player (timespent= 13) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 12) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 11) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 10) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 9) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 8) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 7) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 6) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 5) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 4) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 3) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 2) (sorted=-1) -AFTER SORT: -- player (timespent= 1) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -lfid 21 (human) spending 20 time - -AFTER SORT: -- player (timespent= 20) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 19) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 18) (sorted=-1) -AFTER SORT: -- player (timespent= 17) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 16) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 15) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 14) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 13) (sorted=-1) -AFTER SORT: -- player (timespent= 12) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 11) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 10) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 9) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 8) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 7) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 6) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 5) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 4) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 3) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 2) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 1) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -lfid 21 (human) spending 20 time - -AFTER SORT: -- player (timespent= 20) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 19) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 18) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 17) (sorted=-1) -AFTER SORT: -- player (timespent= 16) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 15) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 14) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 13) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 12) (sorted=-1) -AFTER SORT: -- player (timespent= 11) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 10) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 9) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 8) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 7) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 6) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 5) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 4) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 3) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 2) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 1) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -lfid 21 (human) spending 20 time - -AFTER SORT: -- player (timespent= 20) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 19) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 18) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 17) (sorted=-1) -AFTER SORT: -- player (timespent= 16) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 15) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 14) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 13) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 12) (sorted=-1) -AFTER SORT: -- player (timespent= 11) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 10) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 9) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 8) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 7) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 6) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 5) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 4) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 3) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 2) (sorted=-1) -AFTER SORT: -- player (timespent= 1) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -lfid 21 (human) spending 20 time - -AFTER SORT: -- player (timespent= 20) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 19) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 18) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 17) (sorted=-1) -AFTER SORT: -- player (timespent= 16) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 15) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 14) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 13) (sorted=-1) -AFTER SORT: -- player (timespent= 12) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 11) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 10) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 9) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 8) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 7) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 6) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 5) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 4) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 3) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 2) (sorted=-1) -AFTER SORT: -- player (timespent= 1) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -lfid 21 (human) spending 20 time - -AFTER SORT: -- player (timespent= 20) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 19) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 18) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 17) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 16) (sorted=-1) -AFTER SORT: -- player (timespent= 15) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 14) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 13) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 12) (sorted=-1) -AFTER SORT: -- player (timespent= 11) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 10) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 9) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 8) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 7) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 6) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 5) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 4) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 3) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 2) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 1) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -lfid 21 (human) spending 20 time - -AFTER SORT: -- player (timespent= 20) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 19) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 18) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 17) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 16) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 15) (sorted=-1) -AFTER SORT: -- player (timespent= 14) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 13) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 12) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 11) (sorted=-1) -AFTER SORT: -- player (timespent= 10) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 9) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 8) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 7) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 6) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 5) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 4) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 3) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 2) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 1) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -lfid 21 (human) spending 20 time - -AFTER SORT: -- player (timespent= 20) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 19) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 18) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 17) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 16) (sorted=-1) -AFTER SORT: -- player (timespent= 15) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 14) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 13) (sorted=-1) -AFTER SORT: -- player (timespent= 12) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 11) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 10) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 9) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 8) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 7) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 6) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 5) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 4) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 3) (sorted=-1) -AFTER SORT: -- player (timespent= 2) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 1) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -lfid 21 (human) spending 20 time - -lfid 21 (human) spending 20 time - -lfid 21 (human) spending 20 time - -lfid 21 (human) spending 20 time - -lfid 21 (human) spending 20 time - -lfid 21 (human) spending 20 time - -lfid 21 (human) spending 20 time - -lfid 21 (human) spending 20 time - -lfid 21 (human) spending 20 time - -lfid 21 (human) spending 20 time - -lfid 21 (human) spending 20 time - -lfid 21 (human) spending 20 time - -lfid 21 (human) spending 20 time - -lfid 21 (human) spending 20 time - -AFTER SORT: -- player (timespent= 280) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 279) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 278) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 277) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 276) (sorted=-1) -AFTER SORT: -- player (timespent= 275) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 274) (sorted=-1) -AFTER SORT: -- player (timespent= 273) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 272) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 271) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 270) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 269) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 268) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 267) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 266) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 265) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 264) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 263) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 262) (sorted=-1) -AFTER SORT: -- player (timespent= 261) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 260) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 259) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 258) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 257) (sorted=-1) -AFTER SORT: -- player (timespent= 256) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 255) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 254) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 253) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 252) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 251) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 250) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 249) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 248) (sorted=-1) -AFTER SORT: -- player (timespent= 247) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 246) (sorted=-1) -AFTER SORT: -- player (timespent= 245) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 244) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 243) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 242) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 241) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 240) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 239) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 238) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 237) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 236) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 235) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 234) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 233) (sorted=-1) -AFTER SORT: -- player (timespent= 232) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 231) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 230) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 229) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 228) (sorted=-1) -AFTER SORT: -- player (timespent= 227) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 226) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 225) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 224) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 223) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 222) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 221) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 220) (sorted=-1) -AFTER SORT: -- player (timespent= 219) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 218) (sorted=-1) -AFTER SORT: -- player (timespent= 217) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 216) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 215) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 214) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 213) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 212) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 211) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 210) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 209) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 208) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 207) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 206) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 205) (sorted=-1) -AFTER SORT: -- player (timespent= 204) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 203) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 202) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 201) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 200) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 199) (sorted=-1) -AFTER SORT: -- player (timespent= 198) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 197) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 196) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 195) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 194) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 193) (sorted=-1) -AFTER SORT: -- player (timespent= 192) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 191) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 190) (sorted=-1) -AFTER SORT: -- player (timespent= 189) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 188) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 187) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 186) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 185) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 184) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 183) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 182) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 181) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 180) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 179) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 178) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 177) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 176) (sorted=-1) -AFTER SORT: -- player (timespent= 175) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 174) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 173) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 172) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 171) (sorted=-1) -AFTER SORT: -- player (timespent= 170) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 169) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 168) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 167) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 166) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 165) (sorted=-1) -AFTER SORT: -- player (timespent= 164) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 163) (sorted=-1) -AFTER SORT: -- player (timespent= 162) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 161) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 160) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 159) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 158) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 157) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 156) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 155) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 154) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 153) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 152) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 151) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 150) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 149) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 148) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 147) (sorted=-1) -AFTER SORT: -- player (timespent= 146) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 145) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 144) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 143) (sorted=-1) -AFTER SORT: -- player (timespent= 142) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 141) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 140) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 139) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 138) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 137) (sorted=-1) -AFTER SORT: -- player (timespent= 136) (sorted=-1) -AFTER SORT: -- player (timespent= 135) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 134) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 133) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 132) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 131) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 130) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 129) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 128) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 127) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 126) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 125) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 124) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 123) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 122) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 121) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 120) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 119) (sorted=-1) -AFTER SORT: -- player (timespent= 118) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 117) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 116) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 115) (sorted=-1) -AFTER SORT: -- player (timespent= 114) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 113) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 112) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 111) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 110) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 109) (sorted=-1) -AFTER SORT: -- player (timespent= 108) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 107) (sorted=-1) -AFTER SORT: -- player (timespent= 106) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 105) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 104) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 103) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 102) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 101) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 100) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 99) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 98) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 97) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 96) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 95) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 94) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 93) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 92) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 91) (sorted=-1) -AFTER SORT: -- player (timespent= 90) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 89) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 88) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 87) (sorted=-1) -AFTER SORT: -- player (timespent= 86) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 85) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 84) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 83) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 82) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 81) (sorted=-1) -AFTER SORT: -- player (timespent= 80) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 79) (sorted=-1) -AFTER SORT: -- player (timespent= 78) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 77) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 76) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 75) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 74) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 73) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 72) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 71) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 70) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 69) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 68) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 67) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 66) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 65) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 64) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 63) (sorted=-1) -AFTER SORT: -- player (timespent= 62) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 61) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 60) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 59) (sorted=-1) -AFTER SORT: -- player (timespent= 58) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 57) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 56) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 55) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 54) (sorted=-1) -AFTER SORT: -- player (timespent= 53) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 52) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 51) (sorted=-1) -AFTER SORT: -- player (timespent= 50) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 49) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 48) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 47) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 46) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 45) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 44) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 43) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 42) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 41) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 40) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 39) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 38) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 37) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 36) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 35) (sorted=-1) -AFTER SORT: -- player (timespent= 34) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 33) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 32) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 31) (sorted=-1) -AFTER SORT: -- player (timespent= 30) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 29) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 28) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 27) (sorted=-1) -AFTER SORT: -- player (timespent= 26) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 25) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 24) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 23) (sorted=-1) -AFTER SORT: -- player (timespent= 22) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 21) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 20) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 19) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 18) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 17) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 16) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 15) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 14) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 13) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 12) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 11) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 10) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 9) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 8) (sorted=-1) -AFTER SORT: -- player (timespent= 7) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 6) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 5) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 4) (sorted=-1) -AFTER SORT: -- player (timespent= 3) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 2) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 1) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -lfid 21 (human) spending 20 time - -AFTER SORT: -- player (timespent= 20) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 19) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 18) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 17) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 16) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 15) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 14) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 13) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 12) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 11) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 10) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 9) (sorted=-1) -AFTER SORT: -- player (timespent= 8) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 7) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 6) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 5) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 4) (sorted=-1) -AFTER SORT: -- player (timespent= 3) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 2) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 1) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -lfid 21 (human) spending 20 time - -AFTER SORT: -- player (timespent= 20) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 19) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 18) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 17) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 16) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 15) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 14) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 13) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 12) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 11) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 10) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 9) (sorted=-1) -AFTER SORT: -- player (timespent= 8) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 7) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 6) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 5) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 4) (sorted=-1) -AFTER SORT: -- player (timespent= 3) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 2) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 1) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -lfid 21 (human) spending 20 time - -AFTER SORT: -- player (timespent= 20) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 19) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 18) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 17) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 16) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 15) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 14) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 13) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 12) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 11) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 10) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 9) (sorted=-1) -AFTER SORT: -- player (timespent= 8) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 7) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 6) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 5) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 4) (sorted=-1) -AFTER SORT: -- player (timespent= 3) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 2) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 1) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -lfid 21 (human) spending 20 time - -AFTER SORT: -- player (timespent= 20) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 19) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 18) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 17) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 16) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 15) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 14) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 13) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 12) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 11) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 10) (sorted=-1) -AFTER SORT: -- player (timespent= 9) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 8) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 7) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 6) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 5) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 4) (sorted=-1) -AFTER SORT: -- player (timespent= 3) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 2) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 1) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -lfid 21 (human) spending 20 time - -AFTER SORT: -- player (timespent= 20) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 19) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 18) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 17) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 16) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 15) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 14) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 13) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 12) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 11) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 10) (sorted=-1) -AFTER SORT: -- player (timespent= 9) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 8) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 7) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 6) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 5) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 4) (sorted=-1) -AFTER SORT: -- player (timespent= 3) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 2) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 1) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -lfid 21 (human) spending 20 time - -AFTER SORT: -- player (timespent= 20) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 19) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 18) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 17) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 16) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 15) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 14) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 13) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 12) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 11) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 10) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 9) (sorted=-1) -AFTER SORT: -- player (timespent= 8) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 7) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 6) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 5) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 4) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 3) (sorted=-1) -AFTER SORT: -- player (timespent= 2) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 1) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -lfid 21 (human) spending 20 time - -AFTER SORT: -- player (timespent= 20) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 19) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 18) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 17) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 16) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 15) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 14) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 13) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 12) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 11) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 10) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 9) (sorted=-1) -AFTER SORT: -- player (timespent= 8) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 7) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 6) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 5) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 4) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 3) (sorted=-1) -AFTER SORT: -- player (timespent= 2) (sorted=-1) -AFTER SORT: -- player (timespent= 1) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -lfid 21 (human) spending 20 time - -AFTER SORT: -- player (timespent= 20) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 19) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 18) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 17) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 16) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 15) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 14) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 13) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 12) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 11) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 10) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 9) (sorted=-1) -AFTER SORT: -- player (timespent= 8) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 7) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 6) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 5) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 4) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 3) (sorted=-1) -AFTER SORT: -- player (timespent= 2) (sorted=-1) -AFTER SORT: -- player (timespent= 1) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -lfid 21 (human) spending 20 time - -AFTER SORT: -- player (timespent= 20) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 19) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 18) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 17) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 16) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 15) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 14) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 13) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 12) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 11) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 10) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 9) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 8) (sorted=-1) -AFTER SORT: -- player (timespent= 7) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 6) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 5) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 4) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 3) (sorted=-1) -AFTER SORT: -- player (timespent= 2) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 1) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -lfid 21 (human) spending 20 time - -AFTER SORT: -- player (timespent= 20) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 19) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 18) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 17) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 16) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 15) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 14) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 13) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 12) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 11) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 10) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 9) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 8) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 7) (sorted=-1) -AFTER SORT: -- player (timespent= 6) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 5) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 4) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 3) (sorted=-1) -AFTER SORT: -- player (timespent= 2) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 1) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -lfid 21 (human) spending 20 time - -AFTER SORT: -- player (timespent= 20) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 19) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 18) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 17) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 16) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 15) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 14) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 13) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 12) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 11) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 10) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 9) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 8) (sorted=-1) -AFTER SORT: -- player (timespent= 7) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 6) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 5) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 4) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 3) (sorted=-1) -AFTER SORT: -- player (timespent= 2) (sorted=-1) -AFTER SORT: -- player (timespent= 1) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -lfid 21 (human) spending 20 time - -AFTER SORT: -- player (timespent= 20) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 19) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 18) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 17) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 16) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 15) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 14) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 13) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 12) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 11) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 10) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 9) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 8) (sorted=-1) -AFTER SORT: -- player (timespent= 7) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 6) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 5) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 4) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 3) (sorted=-1) -AFTER SORT: -- player (timespent= 2) (sorted=-1) -AFTER SORT: -- player (timespent= 1) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -lfid 21 (human) spending 20 time - -AFTER SORT: -- player (timespent= 20) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 19) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 18) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 17) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 16) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 15) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 14) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 13) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 12) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 11) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 10) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 9) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 8) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 7) (sorted=-1) -AFTER SORT: -- player (timespent= 6) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 5) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 4) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 3) (sorted=-1) -AFTER SORT: -- player (timespent= 2) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 1) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -lfid 21 (human) spending 20 time - -AFTER SORT: -- player (timespent= 20) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 19) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 18) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 17) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 16) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 15) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 14) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 13) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 12) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 11) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 10) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 9) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 8) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 7) (sorted=-1) -AFTER SORT: -- player (timespent= 6) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 5) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 4) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 3) (sorted=-1) -AFTER SORT: -- player (timespent= 2) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 1) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -lfid 21 (human) spending 20 time - -AFTER SORT: -- player (timespent= 20) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 19) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 18) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 17) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 16) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 15) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 14) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 13) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 12) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 11) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 10) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 9) (sorted=-1) -AFTER SORT: -- player (timespent= 8) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 7) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 6) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 5) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 4) (sorted=-1) -AFTER SORT: -- player (timespent= 3) (sorted=-1) -AFTER SORT: -- player (timespent= 2) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 1) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -lfid 21 (human) spending 20 time - -AFTER SORT: -- player (timespent= 20) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 19) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 18) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 17) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 16) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 15) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 14) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 13) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 12) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 11) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 10) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 9) (sorted=-1) -AFTER SORT: -- player (timespent= 8) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 7) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 6) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 5) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 4) (sorted=-1) -AFTER SORT: -- player (timespent= 3) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 2) (sorted=-1) -AFTER SORT: -- player (timespent= 1) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -lfid 21 (human) spending 20 time - -AFTER SORT: -- player (timespent= 20) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 19) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 18) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 17) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 16) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 15) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 14) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 13) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 12) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 11) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 10) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 9) (sorted=-1) -AFTER SORT: -- player (timespent= 8) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 7) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 6) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 5) (sorted=-1) -AFTER SORT: -- player (timespent= 4) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 3) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 2) (sorted=-1) -AFTER SORT: -- player (timespent= 1) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -lfid 21 (human) spending 20 time - -AFTER SORT: -- player (timespent= 20) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 19) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 18) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 17) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 16) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 15) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 14) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 13) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 12) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 11) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 10) (sorted=-1) -AFTER SORT: -- player (timespent= 9) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 8) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 7) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 6) (sorted=-1) -AFTER SORT: -- player (timespent= 5) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 4) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 3) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 2) (sorted=-1) -AFTER SORT: -- player (timespent= 1) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -lfid 21 (human) spending 20 time - -AFTER SORT: -- player (timespent= 20) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 19) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 18) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 17) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 16) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 15) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 14) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 13) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 12) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 11) (sorted=-1) -AFTER SORT: -- player (timespent= 10) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 9) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 8) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 7) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 6) (sorted=-1) -AFTER SORT: -- player (timespent= 5) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 4) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 3) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 2) (sorted=-1) -AFTER SORT: -- player (timespent= 1) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -lfid 21 (human) spending 20 time - -AFTER SORT: -- player (timespent= 20) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 19) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 18) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 17) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 16) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 15) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 14) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 13) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 12) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 11) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 10) (sorted=-1) -AFTER SORT: -- player (timespent= 9) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 8) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 7) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 6) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 5) (sorted=-1) -AFTER SORT: -- player (timespent= 4) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 3) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 2) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 1) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -lfid 21 (human) spending 20 time - -AFTER SORT: -- player (timespent= 20) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 19) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 18) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 17) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 16) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 15) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 14) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 13) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 12) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 11) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 10) (sorted=-1) -AFTER SORT: -- player (timespent= 9) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 8) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 7) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 6) (sorted=-1) -AFTER SORT: -- player (timespent= 5) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 4) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 3) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 2) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 1) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -lfid 21 (human) spending 20 time - -AFTER SORT: -- player (timespent= 20) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 19) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 18) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 17) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 16) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 15) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 14) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 13) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 12) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 11) (sorted=-1) -AFTER SORT: -- player (timespent= 10) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 9) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 8) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 7) (sorted=-1) -AFTER SORT: -- player (timespent= 6) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 5) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 4) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 3) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 2) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 1) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -lfid 21 (human) spending 20 time - -AFTER SORT: -- player (timespent= 20) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 19) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 18) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 17) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 16) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 15) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 14) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 13) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 12) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 11) (sorted=-1) -AFTER SORT: -- player (timespent= 10) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 9) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 8) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 7) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 6) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 5) (sorted=-1) -AFTER SORT: -- player (timespent= 4) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 3) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 2) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 1) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -lfid 21 (human) spending 20 time - -AFTER SORT: -- player (timespent= 20) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 19) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 18) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 17) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 16) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 15) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 14) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 13) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 12) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 11) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 10) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 9) (sorted=-1) -AFTER SORT: -- player (timespent= 8) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 7) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 6) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 5) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 4) (sorted=-1) -AFTER SORT: -- player (timespent= 3) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 2) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 1) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -lfid 21 (human) spending 20 time - -AFTER SORT: -- player (timespent= 20) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 19) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 18) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 17) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 16) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 15) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 14) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 13) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 12) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 11) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 10) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 9) (sorted=-1) -AFTER SORT: -- player (timespent= 8) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 7) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 6) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 5) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 4) (sorted=-1) -AFTER SORT: -- player (timespent= 3) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 2) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 1) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -lfid 21 (human) spending 20 time - -AFTER SORT: -- player (timespent= 20) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 19) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 18) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 17) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 16) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 15) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 14) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 13) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 12) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 11) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 10) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 9) (sorted=-1) -AFTER SORT: -- player (timespent= 8) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 7) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 6) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 5) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 4) (sorted=-1) -AFTER SORT: -- player (timespent= 3) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 2) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 1) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -lfid 21 (human) spending 20 time - -AFTER SORT: -- player (timespent= 20) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 19) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 18) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 17) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 16) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 15) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 14) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 13) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 12) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 11) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 10) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 9) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 8) (sorted=-1) -AFTER SORT: -- player (timespent= 7) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 6) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 5) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 4) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 3) (sorted=-1) -AFTER SORT: -- player (timespent= 2) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 1) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -lfid 21 (human) spending 20 time - -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 20) (sorted=-1) -AIMOVE: giant fly -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -.oO { i do not have a target. } -.oO { default - moving randomly } -lfid 19 (giant fly) spending 10 time - -AFTER SORT: -- giant fly (timespent= 10) (sorted=-1) -- player (timespent= 19) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 9) (sorted=-1) -- player (timespent= 18) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 8) (sorted=-1) -- player (timespent= 17) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 7) (sorted=-1) -- player (timespent= 16) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- giant fly (timespent= 6) (sorted=-1) -- player (timespent= 15) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- giant fly (timespent= 5) (sorted=-1) -- player (timespent= 14) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 4) (sorted=-1) -- player (timespent= 13) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 3) (sorted=-1) -- player (timespent= 12) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- giant fly (timespent= 2) (sorted=-1) -- player (timespent= 11) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 1) (sorted=-1) -- player (timespent= 10) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 9) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 8) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 7) (sorted=-1) -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 6) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 5) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 4) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 3) (sorted=-1) -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 2) (sorted=-1) -AIMOVE: giant fly -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -.oO { i do not have a target. } -.oO { default - moving randomly } -lfid 19 (giant fly) spending 10 time - -AFTER SORT: -- player (timespent= 1) (sorted=-1) -- giant fly (timespent= 10) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- giant fly (timespent= 9) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- giant fly (timespent= 8) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- giant fly (timespent= 7) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- giant fly (timespent= 6) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- giant fly (timespent= 5) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- giant fly (timespent= 4) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- giant fly (timespent= 3) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- giant fly (timespent= 2) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- giant fly (timespent= 1) (sorted=-1) -lfid 21 (human) spending 20 time - -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 20) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 19) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 18) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 17) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 16) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 15) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 14) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 13) (sorted=-1) -AIMOVE: giant fly -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -.oO { i do not have a target. } -.oO { default - moving randomly } -lfid 19 (giant fly) spending 10 time - -AFTER SORT: -- giant fly (timespent= 10) (sorted=-1) -- player (timespent= 12) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- giant fly (timespent= 9) (sorted=-1) -- player (timespent= 11) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 8) (sorted=-1) -- player (timespent= 10) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 7) (sorted=-1) -- player (timespent= 9) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 6) (sorted=-1) -- player (timespent= 8) (sorted=-1) -AFTER SORT: -- giant fly (timespent= 5) (sorted=-1) -- player (timespent= 7) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 4) (sorted=-1) -- player (timespent= 6) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 3) (sorted=-1) -- player (timespent= 5) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 2) (sorted=-1) -- player (timespent= 4) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 1) (sorted=-1) -- player (timespent= 3) (sorted=-1) -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 2) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 1) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 0) (sorted=-1) -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 0) (sorted=-1) -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 0) (sorted=-1) -AIMOVE: giant fly -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -.oO { i do not have a target. } -.oO { default - moving randomly } -lfid 19 (giant fly) spending 10 time - -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- giant fly (timespent= 10) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- giant fly (timespent= 9) (sorted=-1) -lfid 21 (human) spending 20 time - -AFTER SORT: -- giant fly (timespent= 8) (sorted=-1) -- human (timespent= 9) (sorted=-1) -- player (timespent= 20) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 7) (sorted=-1) -- human (timespent= 8) (sorted=-1) -- player (timespent= 19) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 6) (sorted=-1) -- human (timespent= 7) (sorted=-1) -- player (timespent= 18) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 5) (sorted=-1) -- human (timespent= 6) (sorted=-1) -- player (timespent= 17) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- giant fly (timespent= 4) (sorted=-1) -- human (timespent= 5) (sorted=-1) -- player (timespent= 16) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 3) (sorted=-1) -- human (timespent= 4) (sorted=-1) -- player (timespent= 15) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- giant fly (timespent= 2) (sorted=-1) -- human (timespent= 3) (sorted=-1) -- player (timespent= 14) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 1) (sorted=-1) -- human (timespent= 2) (sorted=-1) -- player (timespent= 13) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- human (timespent= 1) (sorted=-1) -- player (timespent= 12) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- human (timespent= 0) (sorted=-1) -- player (timespent= 11) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- human (timespent= 0) (sorted=-1) -- player (timespent= 10) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- human (timespent= 0) (sorted=-1) -- player (timespent= 9) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- human (timespent= 0) (sorted=-1) -- player (timespent= 8) (sorted=-1) -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- human (timespent= 0) (sorted=-1) -- player (timespent= 7) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- human (timespent= 0) (sorted=-1) -- player (timespent= 6) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- human (timespent= 0) (sorted=-1) -- player (timespent= 5) (sorted=-1) -AIMOVE: giant fly -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -.oO { i do not have a target. } -.oO { default - moving randomly } -lfid 19 (giant fly) spending 10 time - -AFTER SORT: -- human (timespent= 0) (sorted=-1) -- player (timespent= 4) (sorted=-1) -- giant fly (timespent= 10) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- human (timespent= 0) (sorted=-1) -- player (timespent= 3) (sorted=-1) -- giant fly (timespent= 9) (sorted=-1) -AIMOVE: human -.oO { i do not have a target. } -.oO { default - moving randomly } -lfid 20 (human) spending 20 time - -AFTER SORT: -- player (timespent= 2) (sorted=-1) -- giant fly (timespent= 8) (sorted=-1) -- human (timespent= 20) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 1) (sorted=-1) -- giant fly (timespent= 7) (sorted=-1) -- human (timespent= 19) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- giant fly (timespent= 6) (sorted=-1) -- human (timespent= 18) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- giant fly (timespent= 5) (sorted=-1) -- human (timespent= 17) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- giant fly (timespent= 4) (sorted=-1) -- human (timespent= 16) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- giant fly (timespent= 3) (sorted=-1) -- human (timespent= 15) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- giant fly (timespent= 2) (sorted=-1) -- human (timespent= 14) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- giant fly (timespent= 1) (sorted=-1) -- human (timespent= 13) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- giant fly (timespent= 0) (sorted=-1) -- human (timespent= 12) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- giant fly (timespent= 0) (sorted=-1) -- human (timespent= 11) (sorted=-1) -lfid 21 (human) spending 20 time - -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- human (timespent= 10) (sorted=-1) -- player (timespent= 20) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- human (timespent= 9) (sorted=-1) -- player (timespent= 19) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- human (timespent= 8) (sorted=-1) -- player (timespent= 18) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- human (timespent= 7) (sorted=-1) -- player (timespent= 17) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- human (timespent= 6) (sorted=-1) -- player (timespent= 16) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- human (timespent= 5) (sorted=-1) -- player (timespent= 15) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- human (timespent= 4) (sorted=-1) -- player (timespent= 14) (sorted=-1) -AIMOVE: giant fly -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -.oO { i do not have a target. } -.oO { default - moving randomly } -lfid 19 (giant fly) spending 10 time - -AFTER SORT: -- human (timespent= 3) (sorted=-1) -- giant fly (timespent= 10) (sorted=-1) -- player (timespent= 13) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- human (timespent= 2) (sorted=-1) -- giant fly (timespent= 9) (sorted=-1) -- player (timespent= 12) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- human (timespent= 1) (sorted=-1) -- giant fly (timespent= 8) (sorted=-1) -- player (timespent= 11) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- human (timespent= 0) (sorted=-1) -- giant fly (timespent= 7) (sorted=-1) -- player (timespent= 10) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- human (timespent= 0) (sorted=-1) -- giant fly (timespent= 6) (sorted=-1) -- player (timespent= 9) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- human (timespent= 0) (sorted=-1) -- giant fly (timespent= 5) (sorted=-1) -- player (timespent= 8) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- human (timespent= 0) (sorted=-1) -- giant fly (timespent= 4) (sorted=-1) -- player (timespent= 7) (sorted=-1) -AFTER SORT: -- human (timespent= 0) (sorted=-1) -- giant fly (timespent= 3) (sorted=-1) -- player (timespent= 6) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- human (timespent= 0) (sorted=-1) -- giant fly (timespent= 2) (sorted=-1) -- player (timespent= 5) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- human (timespent= 0) (sorted=-1) -- giant fly (timespent= 1) (sorted=-1) -- player (timespent= 4) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- human (timespent= 0) (sorted=-1) -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 3) (sorted=-1) -AIMOVE: human -.oO { i do not have a target. } -.oO { default - moving randomly } -lfid 20 (human) spending 20 time - -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 2) (sorted=-1) -- human (timespent= 20) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 1) (sorted=-1) -- human (timespent= 19) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 0) (sorted=-1) -- human (timespent= 18) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 0) (sorted=-1) -- human (timespent= 17) (sorted=-1) -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 0) (sorted=-1) -- human (timespent= 16) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 0) (sorted=-1) -- human (timespent= 15) (sorted=-1) -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 0) (sorted=-1) -- human (timespent= 14) (sorted=-1) -AIMOVE: giant fly -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -.oO { i do not have a target. } -.oO { default - moving randomly } -lfid 19 (giant fly) spending 10 time - -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- giant fly (timespent= 10) (sorted=-1) -- human (timespent= 13) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- giant fly (timespent= 9) (sorted=-1) -- human (timespent= 12) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- giant fly (timespent= 8) (sorted=-1) -- human (timespent= 11) (sorted=-1) -lfid 21 (human) spending 20 time - -AFTER SORT: -- giant fly (timespent= 7) (sorted=-1) -- human (timespent= 10) (sorted=-1) -- player (timespent= 20) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 6) (sorted=-1) -- human (timespent= 9) (sorted=-1) -- player (timespent= 19) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 5) (sorted=-1) -- human (timespent= 8) (sorted=-1) -- player (timespent= 18) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 4) (sorted=-1) -- human (timespent= 7) (sorted=-1) -- player (timespent= 17) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 3) (sorted=-1) -- human (timespent= 6) (sorted=-1) -- player (timespent= 16) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- giant fly (timespent= 2) (sorted=-1) -- human (timespent= 5) (sorted=-1) -- player (timespent= 15) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- giant fly (timespent= 1) (sorted=-1) -- human (timespent= 4) (sorted=-1) -- player (timespent= 14) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- human (timespent= 3) (sorted=-1) -- player (timespent= 13) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- human (timespent= 2) (sorted=-1) -- player (timespent= 12) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- human (timespent= 1) (sorted=-1) -- player (timespent= 11) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- human (timespent= 0) (sorted=-1) -- player (timespent= 10) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- human (timespent= 0) (sorted=-1) -- player (timespent= 9) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- human (timespent= 0) (sorted=-1) -- player (timespent= 8) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- human (timespent= 0) (sorted=-1) -- player (timespent= 7) (sorted=-1) -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- human (timespent= 0) (sorted=-1) -- player (timespent= 6) (sorted=-1) -AIMOVE: giant fly -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -.oO { i do not have a target. } -.oO { default - moving randomly } -lfid 19 (giant fly) spending 10 time - -AFTER SORT: -- human (timespent= 0) (sorted=-1) -- player (timespent= 5) (sorted=-1) -- giant fly (timespent= 10) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- human (timespent= 0) (sorted=-1) -- player (timespent= 4) (sorted=-1) -- giant fly (timespent= 9) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- human (timespent= 0) (sorted=-1) -- player (timespent= 3) (sorted=-1) -- giant fly (timespent= 8) (sorted=-1) -AIMOVE: human -.oO { i do not have a target. } -.oO { default - moving randomly } -lfid 20 (human) spending 20 time - -AFTER SORT: -- player (timespent= 2) (sorted=-1) -- giant fly (timespent= 7) (sorted=-1) -- human (timespent= 20) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 1) (sorted=-1) -- giant fly (timespent= 6) (sorted=-1) -- human (timespent= 19) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- giant fly (timespent= 5) (sorted=-1) -- human (timespent= 18) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- giant fly (timespent= 4) (sorted=-1) -- human (timespent= 17) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- giant fly (timespent= 3) (sorted=-1) -- human (timespent= 16) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- giant fly (timespent= 2) (sorted=-1) -- human (timespent= 15) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- giant fly (timespent= 1) (sorted=-1) -- human (timespent= 14) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- giant fly (timespent= 0) (sorted=-1) -- human (timespent= 13) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- giant fly (timespent= 0) (sorted=-1) -- human (timespent= 12) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- giant fly (timespent= 0) (sorted=-1) -- human (timespent= 11) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- giant fly (timespent= 0) (sorted=-1) -- human (timespent= 10) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- giant fly (timespent= 0) (sorted=-1) -- human (timespent= 9) (sorted=-1) -lfid 21 (human) spending 20 time - -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- human (timespent= 8) (sorted=-1) -- player (timespent= 20) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- human (timespent= 7) (sorted=-1) -- player (timespent= 19) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- human (timespent= 6) (sorted=-1) -- player (timespent= 18) (sorted=-1) -AIMOVE: giant fly -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -.oO { i do not have a target. } -.oO { default - moving randomly } -lfid 19 (giant fly) spending 10 time - -AFTER SORT: -- human (timespent= 5) (sorted=-1) -- giant fly (timespent= 10) (sorted=-1) -- player (timespent= 17) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- human (timespent= 4) (sorted=-1) -- giant fly (timespent= 9) (sorted=-1) -- player (timespent= 16) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- human (timespent= 3) (sorted=-1) -- giant fly (timespent= 8) (sorted=-1) -- player (timespent= 15) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- human (timespent= 2) (sorted=-1) -- giant fly (timespent= 7) (sorted=-1) -- player (timespent= 14) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- human (timespent= 1) (sorted=-1) -- giant fly (timespent= 6) (sorted=-1) -- player (timespent= 13) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- human (timespent= 0) (sorted=-1) -- giant fly (timespent= 5) (sorted=-1) -- player (timespent= 12) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- human (timespent= 0) (sorted=-1) -- giant fly (timespent= 4) (sorted=-1) -- player (timespent= 11) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- human (timespent= 0) (sorted=-1) -- giant fly (timespent= 3) (sorted=-1) -- player (timespent= 10) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- human (timespent= 0) (sorted=-1) -- giant fly (timespent= 2) (sorted=-1) -- player (timespent= 9) (sorted=-1) -AFTER SORT: -- human (timespent= 0) (sorted=-1) -- giant fly (timespent= 1) (sorted=-1) -- player (timespent= 8) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- human (timespent= 0) (sorted=-1) -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 7) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- human (timespent= 0) (sorted=-1) -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 6) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- human (timespent= 0) (sorted=-1) -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 5) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- human (timespent= 0) (sorted=-1) -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 4) (sorted=-1) -AIMOVE: human -.oO { i do not have a target. } -.oO { default - moving randomly } -lfid 20 (human) spending 20 time - -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 3) (sorted=-1) -- human (timespent= 20) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 2) (sorted=-1) -- human (timespent= 19) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 1) (sorted=-1) -- human (timespent= 18) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 0) (sorted=-1) -- human (timespent= 17) (sorted=-1) -AIMOVE: giant fly -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -.oO { i do not have a target. } -.oO { default - moving randomly } -lfid 19 (giant fly) spending 10 time - -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- giant fly (timespent= 10) (sorted=-1) -- human (timespent= 16) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- giant fly (timespent= 9) (sorted=-1) -- human (timespent= 15) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- giant fly (timespent= 8) (sorted=-1) -- human (timespent= 14) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- giant fly (timespent= 7) (sorted=-1) -- human (timespent= 13) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- giant fly (timespent= 6) (sorted=-1) -- human (timespent= 12) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- giant fly (timespent= 5) (sorted=-1) -- human (timespent= 11) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- giant fly (timespent= 4) (sorted=-1) -- human (timespent= 10) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- giant fly (timespent= 3) (sorted=-1) -- human (timespent= 9) (sorted=-1) -lfid 21 (human) spending 20 time - -AFTER SORT: -- giant fly (timespent= 2) (sorted=-1) -- human (timespent= 8) (sorted=-1) -- player (timespent= 20) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 1) (sorted=-1) -- human (timespent= 7) (sorted=-1) -- player (timespent= 19) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- human (timespent= 6) (sorted=-1) -- player (timespent= 18) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- human (timespent= 5) (sorted=-1) -- player (timespent= 17) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- human (timespent= 4) (sorted=-1) -- player (timespent= 16) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- human (timespent= 3) (sorted=-1) -- player (timespent= 15) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- human (timespent= 2) (sorted=-1) -- player (timespent= 14) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- human (timespent= 1) (sorted=-1) -- player (timespent= 13) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- human (timespent= 0) (sorted=-1) -- player (timespent= 12) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- human (timespent= 0) (sorted=-1) -- player (timespent= 11) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- human (timespent= 0) (sorted=-1) -- player (timespent= 10) (sorted=-1) -AIMOVE: giant fly -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -.oO { i do not have a target. } -.oO { default - moving randomly } -lfid 19 (giant fly) spending 10 time - -AFTER SORT: -- human (timespent= 0) (sorted=-1) -- player (timespent= 9) (sorted=-1) -- giant fly (timespent= 10) (sorted=-1) -AFTER SORT: -- human (timespent= 0) (sorted=-1) -- player (timespent= 8) (sorted=-1) -- giant fly (timespent= 9) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- human (timespent= 0) (sorted=-1) -- player (timespent= 7) (sorted=-1) -- giant fly (timespent= 8) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- human (timespent= 0) (sorted=-1) -- player (timespent= 6) (sorted=-1) -- giant fly (timespent= 7) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- human (timespent= 0) (sorted=-1) -- player (timespent= 5) (sorted=-1) -- giant fly (timespent= 6) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- human (timespent= 0) (sorted=-1) -- player (timespent= 4) (sorted=-1) -- giant fly (timespent= 5) (sorted=-1) -AIMOVE: human -.oO { i do not have a target. } -.oO { default - moving randomly } -lfid 20 (human) spending 20 time - -AFTER SORT: -- player (timespent= 3) (sorted=-1) -- giant fly (timespent= 4) (sorted=-1) -- human (timespent= 20) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 2) (sorted=-1) -- giant fly (timespent= 3) (sorted=-1) -- human (timespent= 19) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 1) (sorted=-1) -- giant fly (timespent= 2) (sorted=-1) -- human (timespent= 18) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- giant fly (timespent= 1) (sorted=-1) -- human (timespent= 17) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- giant fly (timespent= 0) (sorted=-1) -- human (timespent= 16) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- giant fly (timespent= 0) (sorted=-1) -- human (timespent= 15) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- giant fly (timespent= 0) (sorted=-1) -- human (timespent= 14) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- giant fly (timespent= 0) (sorted=-1) -- human (timespent= 13) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- giant fly (timespent= 0) (sorted=-1) -- human (timespent= 12) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- giant fly (timespent= 0) (sorted=-1) -- human (timespent= 11) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- giant fly (timespent= 0) (sorted=-1) -- human (timespent= 10) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- giant fly (timespent= 0) (sorted=-1) -- human (timespent= 9) (sorted=-1) -lfid 21 (human) spending 20 time - -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- human (timespent= 8) (sorted=-1) -- player (timespent= 20) (sorted=-1) -AIMOVE: giant fly -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -.oO { i do not have a target. } -.oO { default - moving randomly } -lfid 19 (giant fly) spending 10 time - -AFTER SORT: -- human (timespent= 7) (sorted=-1) -- giant fly (timespent= 10) (sorted=-1) -- player (timespent= 19) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- human (timespent= 6) (sorted=-1) -- giant fly (timespent= 9) (sorted=-1) -- player (timespent= 18) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- human (timespent= 5) (sorted=-1) -- giant fly (timespent= 8) (sorted=-1) -- player (timespent= 17) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- human (timespent= 4) (sorted=-1) -- giant fly (timespent= 7) (sorted=-1) -- player (timespent= 16) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- human (timespent= 3) (sorted=-1) -- giant fly (timespent= 6) (sorted=-1) -- player (timespent= 15) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- human (timespent= 2) (sorted=-1) -- giant fly (timespent= 5) (sorted=-1) -- player (timespent= 14) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- human (timespent= 1) (sorted=-1) -- giant fly (timespent= 4) (sorted=-1) -- player (timespent= 13) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- human (timespent= 0) (sorted=-1) -- giant fly (timespent= 3) (sorted=-1) -- player (timespent= 12) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- human (timespent= 0) (sorted=-1) -- giant fly (timespent= 2) (sorted=-1) -- player (timespent= 11) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- human (timespent= 0) (sorted=-1) -- giant fly (timespent= 1) (sorted=-1) -- player (timespent= 10) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- human (timespent= 0) (sorted=-1) -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 9) (sorted=-1) -AFTER SORT: -- human (timespent= 0) (sorted=-1) -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 8) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- human (timespent= 0) (sorted=-1) -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 7) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- human (timespent= 0) (sorted=-1) -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 6) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- human (timespent= 0) (sorted=-1) -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 5) (sorted=-1) -AIMOVE: human -.oO { i do not have a target. } -.oO { default - moving randomly } -lfid 20 (human) spending 20 time - -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 4) (sorted=-1) -- human (timespent= 20) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 3) (sorted=-1) -- human (timespent= 19) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 2) (sorted=-1) -- human (timespent= 18) (sorted=-1) -AIMOVE: giant fly -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -.oO { i do not have a target. } -.oO { default - moving randomly } -lfid 19 (giant fly) spending 10 time - -AFTER SORT: -- player (timespent= 1) (sorted=-1) -- giant fly (timespent= 10) (sorted=-1) -- human (timespent= 17) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- giant fly (timespent= 9) (sorted=-1) -- human (timespent= 16) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- giant fly (timespent= 8) (sorted=-1) -- human (timespent= 15) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- giant fly (timespent= 7) (sorted=-1) -- human (timespent= 14) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- giant fly (timespent= 6) (sorted=-1) -- human (timespent= 13) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- giant fly (timespent= 5) (sorted=-1) -- human (timespent= 12) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- giant fly (timespent= 4) (sorted=-1) -- human (timespent= 11) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- giant fly (timespent= 3) (sorted=-1) -- human (timespent= 10) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- giant fly (timespent= 2) (sorted=-1) -- human (timespent= 9) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- giant fly (timespent= 1) (sorted=-1) -- human (timespent= 8) (sorted=-1) -lfid 21 (human) spending 20 time - -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- human (timespent= 7) (sorted=-1) -- player (timespent= 20) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- human (timespent= 6) (sorted=-1) -- player (timespent= 19) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- human (timespent= 5) (sorted=-1) -- player (timespent= 18) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- human (timespent= 4) (sorted=-1) -- player (timespent= 17) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- human (timespent= 3) (sorted=-1) -- player (timespent= 16) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- human (timespent= 2) (sorted=-1) -- player (timespent= 15) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- human (timespent= 1) (sorted=-1) -- player (timespent= 14) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- human (timespent= 0) (sorted=-1) -- player (timespent= 13) (sorted=-1) -AIMOVE: giant fly -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -.oO { i do not have a target. } -.oO { default - moving randomly } -lfid 19 (giant fly) spending 10 time - -AFTER SORT: -- human (timespent= 0) (sorted=-1) -- giant fly (timespent= 10) (sorted=-1) -- player (timespent= 12) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- human (timespent= 0) (sorted=-1) -- giant fly (timespent= 9) (sorted=-1) -- player (timespent= 11) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- human (timespent= 0) (sorted=-1) -- giant fly (timespent= 8) (sorted=-1) -- player (timespent= 10) (sorted=-1) -AFTER SORT: -- human (timespent= 0) (sorted=-1) -- giant fly (timespent= 7) (sorted=-1) -- player (timespent= 9) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- human (timespent= 0) (sorted=-1) -- giant fly (timespent= 6) (sorted=-1) -- player (timespent= 8) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- human (timespent= 0) (sorted=-1) -- giant fly (timespent= 5) (sorted=-1) -- player (timespent= 7) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- human (timespent= 0) (sorted=-1) -- giant fly (timespent= 4) (sorted=-1) -- player (timespent= 6) (sorted=-1) -AIMOVE: human -.oO { i do not have a target. } -.oO { default - moving randomly } -lfid 20 (human) spending 20 time - -AFTER SORT: -- giant fly (timespent= 3) (sorted=-1) -- player (timespent= 5) (sorted=-1) -- human (timespent= 20) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 2) (sorted=-1) -- player (timespent= 4) (sorted=-1) -- human (timespent= 19) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 1) (sorted=-1) -- player (timespent= 3) (sorted=-1) -- human (timespent= 18) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 2) (sorted=-1) -- human (timespent= 17) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 1) (sorted=-1) -- human (timespent= 16) (sorted=-1) -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 0) (sorted=-1) -- human (timespent= 15) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 0) (sorted=-1) -- human (timespent= 14) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 0) (sorted=-1) -- human (timespent= 13) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 0) (sorted=-1) -- human (timespent= 12) (sorted=-1) -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 0) (sorted=-1) -- human (timespent= 11) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 0) (sorted=-1) -- human (timespent= 10) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 0) (sorted=-1) -- human (timespent= 9) (sorted=-1) -AIMOVE: giant fly -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -.oO { i do not have a target. } -.oO { default - moving randomly } -lfid 19 (giant fly) spending 10 time - -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- human (timespent= 8) (sorted=-1) -- giant fly (timespent= 10) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- human (timespent= 7) (sorted=-1) -- giant fly (timespent= 9) (sorted=-1) -lfid 21 (human) spending 20 time - -AFTER SORT: -- human (timespent= 6) (sorted=-1) -- giant fly (timespent= 8) (sorted=-1) -- player (timespent= 20) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- human (timespent= 5) (sorted=-1) -- giant fly (timespent= 7) (sorted=-1) -- player (timespent= 19) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- human (timespent= 4) (sorted=-1) -- giant fly (timespent= 6) (sorted=-1) -- player (timespent= 18) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- human (timespent= 3) (sorted=-1) -- giant fly (timespent= 5) (sorted=-1) -- player (timespent= 17) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- human (timespent= 2) (sorted=-1) -- giant fly (timespent= 4) (sorted=-1) -- player (timespent= 16) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- human (timespent= 1) (sorted=-1) -- giant fly (timespent= 3) (sorted=-1) -- player (timespent= 15) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- human (timespent= 0) (sorted=-1) -- giant fly (timespent= 2) (sorted=-1) -- player (timespent= 14) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- human (timespent= 0) (sorted=-1) -- giant fly (timespent= 1) (sorted=-1) -- player (timespent= 13) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- human (timespent= 0) (sorted=-1) -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 12) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- human (timespent= 0) (sorted=-1) -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 11) (sorted=-1) -AFTER SORT: -- human (timespent= 0) (sorted=-1) -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 10) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- human (timespent= 0) (sorted=-1) -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 9) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- human (timespent= 0) (sorted=-1) -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 8) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- human (timespent= 0) (sorted=-1) -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 7) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- human (timespent= 0) (sorted=-1) -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 6) (sorted=-1) -AIMOVE: human -.oO { i do not have a target. } -.oO { default - moving randomly } -lfid 20 (human) spending 20 time - -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 5) (sorted=-1) -- human (timespent= 20) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 4) (sorted=-1) -- human (timespent= 19) (sorted=-1) -AIMOVE: giant fly -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -.oO { i do not have a target. } -.oO { default - moving randomly } -lfid 19 (giant fly) spending 10 time - -AFTER SORT: -- player (timespent= 3) (sorted=-1) -- giant fly (timespent= 10) (sorted=-1) -- human (timespent= 18) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 2) (sorted=-1) -- giant fly (timespent= 9) (sorted=-1) -- human (timespent= 17) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 1) (sorted=-1) -- giant fly (timespent= 8) (sorted=-1) -- human (timespent= 16) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- giant fly (timespent= 7) (sorted=-1) -- human (timespent= 15) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- giant fly (timespent= 6) (sorted=-1) -- human (timespent= 14) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- giant fly (timespent= 5) (sorted=-1) -- human (timespent= 13) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- giant fly (timespent= 4) (sorted=-1) -- human (timespent= 12) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- giant fly (timespent= 3) (sorted=-1) -- human (timespent= 11) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- giant fly (timespent= 2) (sorted=-1) -- human (timespent= 10) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- giant fly (timespent= 1) (sorted=-1) -- human (timespent= 9) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- giant fly (timespent= 0) (sorted=-1) -- human (timespent= 8) (sorted=-1) -lfid 21 (human) spending 20 time - -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- human (timespent= 7) (sorted=-1) -- player (timespent= 20) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- human (timespent= 6) (sorted=-1) -- player (timespent= 19) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- human (timespent= 5) (sorted=-1) -- player (timespent= 18) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- human (timespent= 4) (sorted=-1) -- player (timespent= 17) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- human (timespent= 3) (sorted=-1) -- player (timespent= 16) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- human (timespent= 2) (sorted=-1) -- player (timespent= 15) (sorted=-1) -AIMOVE: giant fly -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -.oO { i do not have a target. } -.oO { default - moving randomly } -lfid 19 (giant fly) spending 10 time - -AFTER SORT: -- human (timespent= 1) (sorted=-1) -- giant fly (timespent= 10) (sorted=-1) -- player (timespent= 14) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- human (timespent= 0) (sorted=-1) -- giant fly (timespent= 9) (sorted=-1) -- player (timespent= 13) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- human (timespent= 0) (sorted=-1) -- giant fly (timespent= 8) (sorted=-1) -- player (timespent= 12) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- human (timespent= 0) (sorted=-1) -- giant fly (timespent= 7) (sorted=-1) -- player (timespent= 11) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- human (timespent= 0) (sorted=-1) -- giant fly (timespent= 6) (sorted=-1) -- player (timespent= 10) (sorted=-1) -AFTER SORT: -- human (timespent= 0) (sorted=-1) -- giant fly (timespent= 5) (sorted=-1) -- player (timespent= 9) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- human (timespent= 0) (sorted=-1) -- giant fly (timespent= 4) (sorted=-1) -- player (timespent= 8) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- human (timespent= 0) (sorted=-1) -- giant fly (timespent= 3) (sorted=-1) -- player (timespent= 7) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- human (timespent= 0) (sorted=-1) -- giant fly (timespent= 2) (sorted=-1) -- player (timespent= 6) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- human (timespent= 0) (sorted=-1) -- giant fly (timespent= 1) (sorted=-1) -- player (timespent= 5) (sorted=-1) -AIMOVE: human -.oO { i do not have a target. } -.oO { default - moving randomly } -lfid 20 (human) spending 20 time - -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 4) (sorted=-1) -- human (timespent= 20) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 3) (sorted=-1) -- human (timespent= 19) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 2) (sorted=-1) -- human (timespent= 18) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 1) (sorted=-1) -- human (timespent= 17) (sorted=-1) -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 0) (sorted=-1) -- human (timespent= 16) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 0) (sorted=-1) -- human (timespent= 15) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 0) (sorted=-1) -- human (timespent= 14) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 0) (sorted=-1) -- human (timespent= 13) (sorted=-1) -AIMOVE: giant fly -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -.oO { i do not have a target. } -.oO { default - moving randomly } -lfid 19 (giant fly) spending 10 time - -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- giant fly (timespent= 10) (sorted=-1) -- human (timespent= 12) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- giant fly (timespent= 9) (sorted=-1) -- human (timespent= 11) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- giant fly (timespent= 8) (sorted=-1) -- human (timespent= 10) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- giant fly (timespent= 7) (sorted=-1) -- human (timespent= 9) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- giant fly (timespent= 6) (sorted=-1) -- human (timespent= 8) (sorted=-1) -lfid 21 (human) spending 5 time - -AFTER SORT: -- player (timespent= 5) (sorted=-1) -- giant fly (timespent= 5) (sorted=-1) -- human (timespent= 7) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 4) (sorted=-1) -- giant fly (timespent= 4) (sorted=-1) -- human (timespent= 6) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 3) (sorted=-1) -- giant fly (timespent= 3) (sorted=-1) -- human (timespent= 5) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 2) (sorted=-1) -- giant fly (timespent= 2) (sorted=-1) -- human (timespent= 4) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 1) (sorted=-1) -- giant fly (timespent= 1) (sorted=-1) -- human (timespent= 3) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- giant fly (timespent= 0) (sorted=-1) -- human (timespent= 2) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- giant fly (timespent= 0) (sorted=-1) -- human (timespent= 1) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- giant fly (timespent= 0) (sorted=-1) -- human (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- giant fly (timespent= 0) (sorted=-1) -- human (timespent= 0) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- giant fly (timespent= 0) (sorted=-1) -- human (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- giant fly (timespent= 0) (sorted=-1) -- human (timespent= 0) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- giant fly (timespent= 0) (sorted=-1) -- human (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- giant fly (timespent= 0) (sorted=-1) -- human (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- giant fly (timespent= 0) (sorted=-1) -- human (timespent= 0) (sorted=-1) -lfid 21 (human) spending 5 time - -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- human (timespent= 0) (sorted=-1) -- player (timespent= 5) (sorted=-1) -AIMOVE: giant fly -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -.oO { i do not have a target. } -.oO { default - moving randomly } -lfid 19 (giant fly) spending 10 time - -AFTER SORT: -- human (timespent= 0) (sorted=-1) -- player (timespent= 4) (sorted=-1) -- giant fly (timespent= 10) (sorted=-1) -AIMOVE: human +findotn(): modname is 'fists' +findotn(): modname is 'short sword' +findotn(): modname is 'hand of god' +findotn(): modname is 'block of chocolate' +findotn(): modname is 'vial of ambrosia' +findotn(): modname is 'leather armour' +findotn(): modname is 'leather boots' +findotn(): modname is 'leather gloves' +findotn(): modname is 'graph paper' +findotn(): modname is 'digital watch' +findotn(): modname is 'scroll of create monster' +findotn(): modname is 'ring of invulnerability' +findotn(): modname is 'fists' +**** donextturn for: id 0 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18920 + +**** donextturn for: id 1 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18920 + +**** donextturn for: id 2 ork +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18920 + +**** donextturn for: id 3 orc +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18920 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18920 + +**** donextturn for: id 5 zombie +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18920 + +**** donextturn for: id 6 zombie +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18920 + +**** donextturn for: id 7 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18920 + +**** donextturn for: id 8 goblin +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18920 + +**** donextturn for: id 9 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18920 + +**** donextturn for: id 10 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18920 + +**** donextturn for: id 11 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18920 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18920 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18920 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18920 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18920 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18920 + +**** donextturn for: id 17 wolf +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18920 + +**** donextturn for: id 18 wolf +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18920 + +**** donextturn for: id 19 human +lfid 19 (human) spending 20 time + +firstlftime = 10 + +making firstlf timespent = 0 (currently 10): +cur time is 18930 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18930 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18930 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18930 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18930 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 18935 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18935 + +**** donextturn for: id 17 wolf +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18935 + +**** donextturn for: id 18 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 18940 + +**** donextturn for: id 1 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18940 + +**** donextturn for: id 2 ork +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18940 + +**** donextturn for: id 3 orc +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18940 + +**** donextturn for: id 7 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18940 + +**** donextturn for: id 8 goblin +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18940 + +**** donextturn for: id 10 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18940 + +**** donextturn for: id 11 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18940 + +**** donextturn for: id 19 human +lfid 19 (human) spending 20 time + +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18940 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18940 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18940 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18940 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18940 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 18945 + +**** donextturn for: id 0 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18945 + +**** donextturn for: id 5 zombie +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18945 + +**** donextturn for: id 6 zombie +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18945 + +**** donextturn for: id 9 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 18950 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18950 + +**** donextturn for: id 17 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18950 + +**** donextturn for: id 18 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18950 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18950 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18950 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18950 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18950 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 10 + +making firstlf timespent = 0 (currently 10): +cur time is 18960 + +**** donextturn for: id 1 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18960 + +**** donextturn for: id 2 ork +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18960 + +**** donextturn for: id 3 orc +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18960 + +**** donextturn for: id 7 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18960 + +**** donextturn for: id 8 goblin +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18960 + +**** donextturn for: id 10 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18960 + +**** donextturn for: id 11 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18960 + +**** donextturn for: id 19 human +lfid 19 (human) spending 20 time + +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18960 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18960 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18960 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18960 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18960 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 18965 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18965 + +**** donextturn for: id 17 wolf +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18965 + +**** donextturn for: id 18 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 18970 + +**** donextturn for: id 0 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18970 + +**** donextturn for: id 5 zombie +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18970 + +**** donextturn for: id 6 zombie +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18970 + +**** donextturn for: id 9 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18970 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18970 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18970 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18970 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18970 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 10 + +making firstlf timespent = 0 (currently 10): +cur time is 18980 + +**** donextturn for: id 1 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18980 + +**** donextturn for: id 2 ork +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18980 + +**** donextturn for: id 3 orc +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18980 + +**** donextturn for: id 7 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18980 + +**** donextturn for: id 8 goblin +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18980 + +**** donextturn for: id 10 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18980 + +**** donextturn for: id 11 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18980 + +**** donextturn for: id 19 human +lfid 19 (human) spending 20 time + +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18980 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18980 + +**** donextturn for: id 17 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18980 + +**** donextturn for: id 18 wolf +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18980 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18980 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18980 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18980 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18980 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 10 + +making firstlf timespent = 0 (currently 10): +cur time is 18990 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18990 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18990 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18990 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18990 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 18995 + +**** donextturn for: id 0 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18995 + +**** donextturn for: id 5 zombie +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18995 + +**** donextturn for: id 6 zombie +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18995 + +**** donextturn for: id 9 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18995 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18995 + +**** donextturn for: id 17 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 18995 + +**** donextturn for: id 18 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19000 + +**** donextturn for: id 1 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19000 + +**** donextturn for: id 2 ork +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19000 + +**** donextturn for: id 3 orc +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19000 + +**** donextturn for: id 7 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19000 + +**** donextturn for: id 8 goblin +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19000 + +**** donextturn for: id 10 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19000 + +**** donextturn for: id 11 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19000 + +**** donextturn for: id 19 human +lfid 19 (human) spending 20 time + +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19000 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19000 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19000 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19000 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19000 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 10 + +making firstlf timespent = 0 (currently 10): +cur time is 19010 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19010 + +**** donextturn for: id 17 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19010 + +**** donextturn for: id 18 wolf +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19010 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19010 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19010 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19010 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19010 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 10 + +making firstlf timespent = 0 (currently 10): +cur time is 19020 + +**** donextturn for: id 0 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19020 + +**** donextturn for: id 5 zombie +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19020 + +**** donextturn for: id 6 zombie +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19020 + +**** donextturn for: id 9 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19020 + +**** donextturn for: id 1 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19020 + +**** donextturn for: id 2 ork +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19020 + +**** donextturn for: id 3 orc +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19020 + +**** donextturn for: id 7 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19020 + +**** donextturn for: id 8 goblin +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19020 + +**** donextturn for: id 10 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19020 + +**** donextturn for: id 11 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19020 + +**** donextturn for: id 19 human +lfid 19 (human) spending 20 time + +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19020 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19020 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19020 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19020 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19020 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19025 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19025 + +**** donextturn for: id 17 wolf +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19025 + +**** donextturn for: id 18 wolf +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19030 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19030 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19030 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19030 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19030 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 10 + +making firstlf timespent = 0 (currently 10): +cur time is 19040 + +**** donextturn for: id 1 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19040 + +**** donextturn for: id 2 ork +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19040 + +**** donextturn for: id 3 orc +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19040 + +**** donextturn for: id 7 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19040 + +**** donextturn for: id 8 goblin +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19040 + +**** donextturn for: id 10 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19040 + +**** donextturn for: id 11 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19040 + +**** donextturn for: id 19 human +lfid 19 (human) spending 20 time + +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19040 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19040 + +**** donextturn for: id 17 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19040 + +**** donextturn for: id 18 wolf +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19040 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19040 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19040 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19040 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19040 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19045 + +**** donextturn for: id 0 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19045 + +**** donextturn for: id 5 zombie +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19045 + +**** donextturn for: id 6 zombie +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19045 + +**** donextturn for: id 9 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19050 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19050 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19050 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19050 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19050 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19055 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19055 + +**** donextturn for: id 17 wolf +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19055 + +**** donextturn for: id 18 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19060 + +**** donextturn for: id 1 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19060 + +**** donextturn for: id 2 ork +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19060 + +**** donextturn for: id 3 orc +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19060 + +**** donextturn for: id 7 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19060 + +**** donextturn for: id 8 goblin +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19060 + +**** donextturn for: id 10 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19060 + +**** donextturn for: id 11 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19060 + +**** donextturn for: id 19 human +lfid 19 (human) spending 20 time + +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19060 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19060 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19060 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19060 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19060 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 10 + +making firstlf timespent = 0 (currently 10): +cur time is 19070 + +**** donextturn for: id 0 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19070 + +**** donextturn for: id 5 zombie +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19070 + +**** donextturn for: id 6 zombie +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19070 + +**** donextturn for: id 9 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19070 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19070 + +**** donextturn for: id 17 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19070 + +**** donextturn for: id 18 wolf +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19070 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19070 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19070 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19070 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19070 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 10 + +making firstlf timespent = 0 (currently 10): +cur time is 19080 + +**** donextturn for: id 1 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19080 + +**** donextturn for: id 2 ork +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19080 + +**** donextturn for: id 3 orc +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19080 + +**** donextturn for: id 7 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19080 + +**** donextturn for: id 8 goblin +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19080 + +**** donextturn for: id 10 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19080 + +**** donextturn for: id 11 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19080 + +**** donextturn for: id 19 human +lfid 19 (human) spending 20 time + +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19080 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19080 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19080 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19080 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19080 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19085 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19085 + +**** donextturn for: id 17 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19085 + +**** donextturn for: id 18 wolf +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19090 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19090 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19090 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19090 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19090 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19095 + +**** donextturn for: id 0 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19095 + +**** donextturn for: id 5 zombie +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19095 + +**** donextturn for: id 6 zombie +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19095 + +**** donextturn for: id 9 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19100 + +**** donextturn for: id 1 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19100 + +**** donextturn for: id 2 ork +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19100 + +**** donextturn for: id 3 orc +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19100 + +**** donextturn for: id 7 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19100 + +**** donextturn for: id 8 goblin +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19100 + +**** donextturn for: id 10 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19100 + +**** donextturn for: id 11 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19100 + +**** donextturn for: id 19 human +lfid 19 (human) spending 20 time + +adding rand lf orc to cell 53,7 +findotn(): modname is 'leather armour' +findotn(): modname is 'leather boots' +findotn(): modname is 'gauntlets' +adding random object with rarity value between 72 - 100 + (must have obclass = Potions) +got 6 possibilities. +random ob: 1 x potion of oil ('potion of oil') +findotn(): modname is 'potion of oil' +findotn(): modname is 'claws' +lfid 20 (orc) spending 20 time + +lfid 20 (orc) spending 20 time + +lfid 20 (orc) spending 20 time + +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19100 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19100 + +**** donextturn for: id 17 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19100 + +**** donextturn for: id 18 wolf +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19100 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19100 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19100 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19100 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19100 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 10 + +making firstlf timespent = 0 (currently 10): +cur time is 19110 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19110 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19110 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19110 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19110 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19115 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19115 + +**** donextturn for: id 17 wolf +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19115 + +**** donextturn for: id 18 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19120 + +**** donextturn for: id 0 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19120 + +**** donextturn for: id 5 zombie +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19120 + +**** donextturn for: id 6 zombie +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19120 + +**** donextturn for: id 9 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19120 + +**** donextturn for: id 1 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19120 + +**** donextturn for: id 2 ork +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19120 + +**** donextturn for: id 3 orc +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19120 + +**** donextturn for: id 7 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19120 + +**** donextturn for: id 8 goblin +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19120 + +**** donextturn for: id 10 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19120 + +**** donextturn for: id 11 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19120 + +**** donextturn for: id 19 human +lfid 19 (human) spending 20 time + +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19120 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19120 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19120 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19120 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19120 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 1 + +making firstlf timespent = 0 (currently 1): +cur time is 19121 + +**** donextturn for: id 20 orc +AIMOVE: the orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { looking for covetted objects... } +.oO { no targetcell, so looking for remote objects } +.oO { looking for any ob which i want. } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { i do not have a target or can't move towards it. } +.oO { i am hostile. looking for a target. } +.oO { found a target - lfid 19 (human) ! } +.oO { moving towards my new target } +.oO { trying to attack you } +findotn(): modname is 'claws' +.oO { my weapon is a claws (unarmed) } +lfid 20 (orc) spending 20 time + +findotn(): modname is 'claws' +.oO { my modified chance to hit is 100 % } +.oO { i hit! } +findotn(): modname is 'claws' +rolled dam[0] = 3 +.oO { dealing 3 claw damage } +initial dam[0] = 3 +adjusted for lf to dam[0] = 0 +reduced by armour to dam[0] = 0 +.oO { doattack about to return B_FALSE } +firstlftime = 9 + +making firstlf timespent = 0 (currently 9): +cur time is 19130 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19130 + +**** donextturn for: id 17 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19130 + +**** donextturn for: id 18 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19130 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19130 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19130 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19130 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19130 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 10 + +making firstlf timespent = 0 (currently 10): +cur time is 19140 + +**** donextturn for: id 1 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19140 + +**** donextturn for: id 2 ork +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19140 + +**** donextturn for: id 3 orc +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19140 + +**** donextturn for: id 7 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19140 + +**** donextturn for: id 8 goblin +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19140 + +**** donextturn for: id 10 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19140 + +**** donextturn for: id 11 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19140 + +**** donextturn for: id 19 human +lfid 19 (human) spending 20 time + +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19140 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19140 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19140 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19140 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19140 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 1 + +making firstlf timespent = 0 (currently 1): +cur time is 19141 + +**** donextturn for: id 20 orc +AIMOVE: the orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { looking for covetted objects... } +.oO { no targetcell, so looking for remote objects } .oO { i have a target... } -.oO { my target is lfid 21 (human). } -.oO { i can see my target. will move towards it. } -lfid 20 (human) spending 5 time +.oO { my target is lfid 19 (human). } +.oO { i can see my target (at 55,5). will move towards it. } +lfid 20 (orc) spending 20 time -AFTER SORT: -- player (timespent= 3) (sorted=-1) -- human (timespent= 5) (sorted=-1) -- giant fly (timespent= 9) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 2) (sorted=-1) -- human (timespent= 4) (sorted=-1) -- giant fly (timespent= 8) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 1) (sorted=-1) -- human (timespent= 3) (sorted=-1) -- giant fly (timespent= 7) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- human (timespent= 2) (sorted=-1) -- giant fly (timespent= 6) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- human (timespent= 1) (sorted=-1) -- giant fly (timespent= 5) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- human (timespent= 0) (sorted=-1) -- giant fly (timespent= 4) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- human (timespent= 0) (sorted=-1) -- giant fly (timespent= 3) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- human (timespent= 0) (sorted=-1) -- giant fly (timespent= 2) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- human (timespent= 0) (sorted=-1) -- giant fly (timespent= 1) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- human (timespent= 0) (sorted=-1) -- giant fly (timespent= 0) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- human (timespent= 0) (sorted=-1) -- giant fly (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- human (timespent= 0) (sorted=-1) -- giant fly (timespent= 0) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- human (timespent= 0) (sorted=-1) -- giant fly (timespent= 0) (sorted=-1) -lfid 21 (human) spending 5 time +firstlftime = 4 -AFTER SORT: -- human (timespent= 0) (sorted=-1) -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 5) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- human (timespent= 0) (sorted=-1) -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 4) (sorted=-1) -AIMOVE: human +making firstlf timespent = 0 (currently 4): +cur time is 19145 + +**** donextturn for: id 0 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19145 + +**** donextturn for: id 5 zombie +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19145 + +**** donextturn for: id 6 zombie +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19145 + +**** donextturn for: id 9 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19145 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19145 + +**** donextturn for: id 17 wolf +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19145 + +**** donextturn for: id 18 wolf +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19150 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19150 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19150 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19150 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19150 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 10 + +making firstlf timespent = 0 (currently 10): +cur time is 19160 + +**** donextturn for: id 1 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19160 + +**** donextturn for: id 2 ork +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19160 + +**** donextturn for: id 3 orc +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19160 + +**** donextturn for: id 7 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19160 + +**** donextturn for: id 8 goblin +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19160 + +**** donextturn for: id 10 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19160 + +**** donextturn for: id 11 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19160 + +**** donextturn for: id 19 human +lfid 19 (human) spending 20 time + +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19160 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19160 + +**** donextturn for: id 17 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19160 + +**** donextturn for: id 18 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19160 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19160 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19160 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19160 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19160 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 1 + +making firstlf timespent = 0 (currently 1): +cur time is 19161 + +**** donextturn for: id 20 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +lfid 20 (orc) spending 20 time + +firstlftime = 9 + +making firstlf timespent = 0 (currently 9): +cur time is 19170 + +**** donextturn for: id 0 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19170 + +**** donextturn for: id 5 zombie +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19170 + +**** donextturn for: id 6 zombie +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19170 + +**** donextturn for: id 9 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19170 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19170 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19170 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19170 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19170 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19175 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19175 + +**** donextturn for: id 17 wolf +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19175 + +**** donextturn for: id 18 wolf +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19180 + +**** donextturn for: id 1 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19180 + +**** donextturn for: id 2 ork +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19180 + +**** donextturn for: id 3 orc +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19180 + +**** donextturn for: id 7 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19180 + +**** donextturn for: id 8 goblin +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19180 + +**** donextturn for: id 10 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19180 + +**** donextturn for: id 11 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19180 + +**** donextturn for: id 19 human +lfid 19 (human) spending 20 time + +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19180 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19180 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19180 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19180 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19180 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 1 + +making firstlf timespent = 0 (currently 1): +cur time is 19181 + +**** donextturn for: id 20 orc +AIMOVE: the orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { looking for covetted objects... } +.oO { no targetcell, so looking for remote objects } .oO { i have a target... } -.oO { my target is lfid 21 (human). } -.oO { i can see my target. will move towards it. } -lfid 20 (human) spending 5 time +.oO { my target is lfid 19 (human). } +.oO { i cannot see my target. moving to last known loc 56/5 } +.oO { walking from 55,5 towards f_targetcell (56,5) ... } +lfid 20 (orc) spending 20 time -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 3) (sorted=-1) -- human (timespent= 5) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 2) (sorted=-1) -- human (timespent= 4) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 1) (sorted=-1) -- human (timespent= 3) (sorted=-1) -AIMOVE: giant fly -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -.oO { i do not have a target. } +.oO { successfully walked towards f_targetcell. } +.oO { arrived at f_targetcell. removing. } +firstlftime = 9 + +making firstlf timespent = 0 (currently 9): +cur time is 19190 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19190 + +**** donextturn for: id 17 wolf +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19190 + +**** donextturn for: id 18 wolf +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19190 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19190 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19190 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19190 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19190 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19195 + +**** donextturn for: id 0 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19195 + +**** donextturn for: id 5 zombie +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19195 + +**** donextturn for: id 6 zombie +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19195 + +**** donextturn for: id 9 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19200 + +**** donextturn for: id 1 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19200 + +**** donextturn for: id 2 ork +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19200 + +**** donextturn for: id 3 orc +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19200 + +**** donextturn for: id 7 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19200 + +**** donextturn for: id 8 goblin +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19200 + +**** donextturn for: id 10 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19200 + +**** donextturn for: id 11 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19200 + +**** donextturn for: id 19 human +lfid 19 (human) spending 20 time + +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19200 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19200 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19200 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19200 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19200 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 1 + +making firstlf timespent = 0 (currently 1): +cur time is 19201 + +**** donextturn for: id 20 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +lfid 20 (orc) spending 20 time + +firstlftime = 4 + +making firstlf timespent = 0 (currently 4): +cur time is 19205 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19205 + +**** donextturn for: id 17 wolf +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19205 + +**** donextturn for: id 18 wolf +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19210 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19210 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19210 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19210 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19210 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 10 + +making firstlf timespent = 0 (currently 10): +cur time is 19220 + +**** donextturn for: id 0 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19220 + +**** donextturn for: id 5 zombie +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19220 + +**** donextturn for: id 6 zombie +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19220 + +**** donextturn for: id 9 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19220 + +**** donextturn for: id 1 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19220 + +**** donextturn for: id 2 ork +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19220 + +**** donextturn for: id 3 orc +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19220 + +**** donextturn for: id 7 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19220 + +**** donextturn for: id 8 goblin +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19220 + +**** donextturn for: id 10 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19220 + +**** donextturn for: id 11 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19220 + +**** donextturn for: id 19 human +lfid 19 (human) spending 20 time + +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19220 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19220 + +**** donextturn for: id 17 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19220 + +**** donextturn for: id 18 wolf +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19220 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19220 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19220 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19220 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19220 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 1 + +making firstlf timespent = 0 (currently 1): +cur time is 19221 + +**** donextturn for: id 20 orc +AIMOVE: the orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { looking for covetted objects... } +.oO { no targetcell, so looking for remote objects } +.oO { i have a target... } +.oO { my target is lfid 19 (human). } +.oO { i can see my target (at 57,8). will move towards it. } +lfid 20 (orc) spending 20 time + +firstlftime = 9 + +making firstlf timespent = 0 (currently 9): +cur time is 19230 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19230 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19230 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19230 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19230 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19235 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19235 + +**** donextturn for: id 17 wolf +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19235 + +**** donextturn for: id 18 wolf +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19240 + +**** donextturn for: id 1 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19240 + +**** donextturn for: id 2 ork +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19240 + +**** donextturn for: id 3 orc +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19240 + +**** donextturn for: id 7 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19240 + +**** donextturn for: id 8 goblin +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19240 + +**** donextturn for: id 10 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19240 + +**** donextturn for: id 11 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19240 + +**** donextturn for: id 19 human +lfid 19 (human) spending 20 time + +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19240 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19240 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19240 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19240 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19240 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 1 + +making firstlf timespent = 0 (currently 1): +cur time is 19241 + +**** donextturn for: id 20 orc +AIMOVE: the orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { looking for covetted objects... } +.oO { no targetcell, so looking for remote objects } +.oO { i have a target... } +.oO { my target is lfid 19 (human). } +.oO { i can see my target (at 56,9). will move towards it. } +lfid 20 (orc) spending 20 time + +firstlftime = 4 + +making firstlf timespent = 0 (currently 4): +cur time is 19245 + +**** donextturn for: id 0 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19245 + +**** donextturn for: id 5 zombie +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19245 + +**** donextturn for: id 6 zombie +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19245 + +**** donextturn for: id 9 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19250 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19250 + +**** donextturn for: id 17 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19250 + +**** donextturn for: id 18 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19250 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19250 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19250 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19250 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19250 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 10 + +making firstlf timespent = 0 (currently 10): +cur time is 19260 + +**** donextturn for: id 1 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19260 + +**** donextturn for: id 2 ork +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19260 + +**** donextturn for: id 3 orc +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19260 + +**** donextturn for: id 7 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19260 + +**** donextturn for: id 8 goblin +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19260 + +**** donextturn for: id 10 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19260 + +**** donextturn for: id 11 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19260 + +**** donextturn for: id 19 human +lfid 19 (human) spending 20 time + +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19260 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19260 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19260 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19260 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19260 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 1 + +making firstlf timespent = 0 (currently 1): +cur time is 19261 + +**** donextturn for: id 20 orc +AIMOVE: the orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { looking for covetted objects... } +.oO { no targetcell, so looking for remote objects } +.oO { i have a target... } +.oO { my target is lfid 19 (human). } +.oO { i can see my target (at 55,10). will move towards it. } +lfid 20 (orc) spending 20 time + +firstlftime = 4 + +making firstlf timespent = 0 (currently 4): +cur time is 19265 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19265 + +**** donextturn for: id 17 wolf +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19265 + +**** donextturn for: id 18 wolf +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19270 + +**** donextturn for: id 0 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19270 + +**** donextturn for: id 5 zombie +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19270 + +**** donextturn for: id 6 zombie +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19270 + +**** donextturn for: id 9 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19270 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19270 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19270 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19270 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19270 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 10 + +making firstlf timespent = 0 (currently 10): +cur time is 19280 + +**** donextturn for: id 1 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19280 + +**** donextturn for: id 2 ork +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19280 + +**** donextturn for: id 3 orc +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19280 + +**** donextturn for: id 7 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19280 + +**** donextturn for: id 8 goblin +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19280 + +**** donextturn for: id 10 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19280 + +**** donextturn for: id 11 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19280 + +**** donextturn for: id 19 human +lfid 19 (human) spending 20 time + +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19280 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19280 + +**** donextturn for: id 17 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19280 + +**** donextturn for: id 18 wolf +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19280 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19280 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19280 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19280 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19280 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 1 + +making firstlf timespent = 0 (currently 1): +cur time is 19281 + +**** donextturn for: id 20 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +lfid 20 (orc) spending 20 time + +firstlftime = 9 + +making firstlf timespent = 0 (currently 9): +cur time is 19290 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19290 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19290 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19290 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19290 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19295 + +**** donextturn for: id 0 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19295 + +**** donextturn for: id 5 zombie +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19295 + +**** donextturn for: id 6 zombie +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19295 + +**** donextturn for: id 9 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19295 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19295 + +**** donextturn for: id 17 wolf +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19295 + +**** donextturn for: id 18 wolf +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19300 + +**** donextturn for: id 1 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19300 + +**** donextturn for: id 2 ork +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19300 + +**** donextturn for: id 3 orc +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19300 + +**** donextturn for: id 7 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19300 + +**** donextturn for: id 8 goblin +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19300 + +**** donextturn for: id 10 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19300 + +**** donextturn for: id 11 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19300 + +**** donextturn for: id 19 human +lfid 19 (human) spending 20 time + +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19300 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +lfid 12 (bat) spending 10 time + +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19300 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19300 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19300 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19300 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 1 + +making firstlf timespent = 0 (currently 1): +cur time is 19301 + +**** donextturn for: id 20 orc +AIMOVE: the orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { looking for covetted objects... } +.oO { no targetcell, so looking for remote objects } +.oO { i have a target... } +.oO { my target is lfid 19 (human). } +.oO { i cannot see my target. moving to last known loc 54/10 } +.oO { walking from 55,10 towards f_targetcell (54,10) ... } +lfid 20 (orc) spending 20 time + +.oO { successfully walked towards f_targetcell. } +.oO { arrived at f_targetcell. removing. } +firstlftime = 9 + +making firstlf timespent = 0 (currently 9): +cur time is 19310 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19310 + +**** donextturn for: id 17 wolf +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19310 + +**** donextturn for: id 18 wolf +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19310 + +**** donextturn for: id 12 bat +AIMOVE: the bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { looking for covetted objects... } +.oO { no targetcell, so looking for remote objects } +.oO { looking for any ob which i want. } +.oO { no targetcell, so looking for remote objects } +.oO { i do not have a target or can't move towards it. } .oO { default - moving randomly } -lfid 19 (giant fly) spending 10 time +firstlftime = 0 -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- human (timespent= 2) (sorted=-1) -- giant fly (timespent= 10) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- human (timespent= 1) (sorted=-1) -- giant fly (timespent= 9) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- human (timespent= 0) (sorted=-1) -- giant fly (timespent= 8) (sorted=-1) -DB: 'tiny claws' -> adding 1 x tiny claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny claws). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- human (timespent= 0) (sorted=-1) -- giant fly (timespent= 7) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- human (timespent= 0) (sorted=-1) -- giant fly (timespent= 6) (sorted=-1) -DB: 'small claws' -> adding 1 x small claws -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (small claws). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- human (timespent= 0) (sorted=-1) -- giant fly (timespent= 5) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- human (timespent= 0) (sorted=-1) -- giant fly (timespent= 4) (sorted=-1) -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- human (timespent= 0) (sorted=-1) -- giant fly (timespent= 3) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- human (timespent= 0) (sorted=-1) -- giant fly (timespent= 2) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- player (timespent= 0) (sorted=-1) -- human (timespent= 0) (sorted=-1) -- giant fly (timespent= 1) (sorted=-1) -lfid 21 (human) spending 5 time +firstlf timespent is not greater than 0. no shuffle. +cur time is 19310 -AFTER SORT: -- human (timespent= 0) (sorted=-1) -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 5) (sorted=-1) -DB: 'tiny teeth' -> adding 1 x tiny teeth -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (tiny teeth). -AFTER SORT: -- human (timespent= 0) (sorted=-1) -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 4) (sorted=-1) -AIMOVE: human +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19310 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19310 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19310 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 10 + +making firstlf timespent = 0 (currently 10): +cur time is 19320 + +**** donextturn for: id 0 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19320 + +**** donextturn for: id 5 zombie +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19320 + +**** donextturn for: id 6 zombie +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19320 + +**** donextturn for: id 9 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19320 + +**** donextturn for: id 1 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19320 + +**** donextturn for: id 2 ork +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19320 + +**** donextturn for: id 3 orc +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19320 + +**** donextturn for: id 7 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19320 + +**** donextturn for: id 8 goblin +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19320 + +**** donextturn for: id 10 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19320 + +**** donextturn for: id 11 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19320 + +**** donextturn for: id 19 human +lfid 19 (human) spending 20 time + +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19320 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19320 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19320 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19320 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19320 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 1 + +making firstlf timespent = 0 (currently 1): +cur time is 19321 + +**** donextturn for: id 20 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +lfid 20 (orc) spending 20 time + +firstlftime = 4 + +making firstlf timespent = 0 (currently 4): +cur time is 19325 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19325 + +**** donextturn for: id 17 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19325 + +**** donextturn for: id 18 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19330 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19330 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19330 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19330 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19330 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 10 + +making firstlf timespent = 0 (currently 10): +cur time is 19340 + +**** donextturn for: id 1 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19340 + +**** donextturn for: id 2 ork +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19340 + +**** donextturn for: id 3 orc +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19340 + +**** donextturn for: id 7 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19340 + +**** donextturn for: id 8 goblin +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19340 + +**** donextturn for: id 10 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19340 + +**** donextturn for: id 11 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19340 + +**** donextturn for: id 19 human +lfid 19 (human) spending 20 time + +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19340 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19340 + +**** donextturn for: id 17 wolf +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19340 + +**** donextturn for: id 18 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19340 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19340 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19340 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19340 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19340 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 1 + +making firstlf timespent = 0 (currently 1): +cur time is 19341 + +**** donextturn for: id 20 orc +AIMOVE: the orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { looking for covetted objects... } +.oO { no targetcell, so looking for remote objects } .oO { i have a target... } -.oO { my target is lfid 21 (human). } -.oO { i can see my target. will move towards it. } -lfid 20 (human) spending 5 time +.oO { my target is lfid 19 (human). } +.oO { i can see my target (at 54,12). will move towards it. } +.oO { trying to attack you } +findotn(): modname is 'claws' +.oO { my weapon is a claws (unarmed) } +lfid 20 (orc) spending 20 time -AFTER SORT: -- giant fly (timespent= 0) (sorted=-1) -- player (timespent= 3) (sorted=-1) -- human (timespent= 5) (sorted=-1) -DB: 'human corpse' -> adding 1 x human corpse -DB: Looking for stacks... -DB: No stacks found. -DB: Creating new object (human corpse). +findotn(): modname is 'claws' +.oO { my modified chance to hit is 100 % } +.oO { i hit! } +findotn(): modname is 'claws' +rolled dam[0] = 2 +.oO { dealing 2 claw damage } +initial dam[0] = 2 +adjusted for lf to dam[0] = 0 +reduced by armour to dam[0] = 0 +.oO { doattack about to return B_FALSE } +firstlftime = 4 + +making firstlf timespent = 0 (currently 4): +cur time is 19345 + +**** donextturn for: id 0 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19345 + +**** donextturn for: id 5 zombie +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19345 + +**** donextturn for: id 6 zombie +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19345 + +**** donextturn for: id 9 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19350 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19350 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19350 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19350 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19350 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19355 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19355 + +**** donextturn for: id 17 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19355 + +**** donextturn for: id 18 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19360 + +**** donextturn for: id 1 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19360 + +**** donextturn for: id 2 ork +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19360 + +**** donextturn for: id 3 orc +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19360 + +**** donextturn for: id 7 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19360 + +**** donextturn for: id 8 goblin +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19360 + +**** donextturn for: id 10 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19360 + +**** donextturn for: id 11 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19360 + +**** donextturn for: id 19 human +lfid 19 (human) spending 20 time + +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19360 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19360 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19360 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19360 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19360 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 1 + +making firstlf timespent = 0 (currently 1): +cur time is 19361 + +**** donextturn for: id 20 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +lfid 20 (orc) spending 20 time + +firstlftime = 9 + +making firstlf timespent = 0 (currently 9): +cur time is 19370 + +**** donextturn for: id 0 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19370 + +**** donextturn for: id 5 zombie +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19370 + +**** donextturn for: id 6 zombie +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19370 + +**** donextturn for: id 9 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19370 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19370 + +**** donextturn for: id 17 wolf +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19370 + +**** donextturn for: id 18 wolf +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19370 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19370 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19370 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19370 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19370 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 10 + +making firstlf timespent = 0 (currently 10): +cur time is 19380 + +**** donextturn for: id 1 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19380 + +**** donextturn for: id 2 ork +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19380 + +**** donextturn for: id 3 orc +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19380 + +**** donextturn for: id 7 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19380 + +**** donextturn for: id 8 goblin +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19380 + +**** donextturn for: id 10 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19380 + +**** donextturn for: id 11 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19380 + +**** donextturn for: id 19 human +lfid 19 (human) spending 20 time + +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19380 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19380 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19380 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19380 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19380 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 1 + +making firstlf timespent = 0 (currently 1): +cur time is 19381 + +**** donextturn for: id 20 orc +AIMOVE: the orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { looking for covetted objects... } +.oO { no targetcell, so looking for remote objects } +.oO { i have a target... } +.oO { my target is lfid 19 (human). } +.oO { i can see my target (at 56,12). will move towards it. } +lfid 20 (orc) spending 20 time + +firstlftime = 4 + +making firstlf timespent = 0 (currently 4): +cur time is 19385 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19385 + +**** donextturn for: id 17 wolf +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19385 + +**** donextturn for: id 18 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19390 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19390 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19390 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19390 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19390 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19395 + +**** donextturn for: id 0 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19395 + +**** donextturn for: id 5 zombie +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19395 + +**** donextturn for: id 6 zombie +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19395 + +**** donextturn for: id 9 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19400 + +**** donextturn for: id 1 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19400 + +**** donextturn for: id 2 ork +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19400 + +**** donextturn for: id 3 orc +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19400 + +**** donextturn for: id 7 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19400 + +**** donextturn for: id 8 goblin +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19400 + +**** donextturn for: id 10 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19400 + +**** donextturn for: id 11 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19400 + +**** donextturn for: id 19 human +lfid 19 (human) spending 20 time + +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19400 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19400 + +**** donextturn for: id 17 wolf +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19400 + +**** donextturn for: id 18 wolf +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19400 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19400 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19400 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19400 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19400 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 1 + +making firstlf timespent = 0 (currently 1): +cur time is 19401 + +**** donextturn for: id 20 orc +AIMOVE: the orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { looking for covetted objects... } +.oO { no targetcell, so looking for remote objects } +.oO { i have a target... } +.oO { my target is lfid 19 (human). } +.oO { i can see my target (at 57,12). will move towards it. } +lfid 20 (orc) spending 20 time + +firstlftime = 9 + +making firstlf timespent = 0 (currently 9): +cur time is 19410 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19410 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19410 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19410 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19410 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19415 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19415 + +**** donextturn for: id 17 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19415 + +**** donextturn for: id 18 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19420 + +**** donextturn for: id 0 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19420 + +**** donextturn for: id 5 zombie +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19420 + +**** donextturn for: id 6 zombie +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19420 + +**** donextturn for: id 9 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19420 + +**** donextturn for: id 1 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19420 + +**** donextturn for: id 2 ork +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19420 + +**** donextturn for: id 3 orc +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19420 + +**** donextturn for: id 7 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19420 + +**** donextturn for: id 8 goblin +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19420 + +**** donextturn for: id 10 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19420 + +**** donextturn for: id 11 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19420 + +**** donextturn for: id 19 human +lfid 19 (human) spending 20 time + +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19420 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +lfid 12 (bat) spending 10 time + +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19420 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19420 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19420 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19420 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 1 + +making firstlf timespent = 0 (currently 1): +cur time is 19421 + +**** donextturn for: id 20 orc +AIMOVE: the orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { looking for covetted objects... } +.oO { no targetcell, so looking for remote objects } +.oO { i have a target... } +.oO { my target is lfid 19 (human). } +.oO { i can see my target (at 56,13). will move towards it. } +.oO { trying to attack you } +findotn(): modname is 'claws' +.oO { my weapon is a claws (unarmed) } +lfid 20 (orc) spending 20 time + +findotn(): modname is 'claws' +.oO { my modified chance to hit is 100 % } +.oO { i hit! } +findotn(): modname is 'claws' +rolled dam[0] = 2 +.oO { dealing 2 claw damage } +initial dam[0] = 2 +adjusted for lf to dam[0] = 0 +reduced by armour to dam[0] = 0 +.oO { doattack about to return B_FALSE } +firstlftime = 9 + +making firstlf timespent = 0 (currently 9): +cur time is 19430 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19430 + +**** donextturn for: id 17 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19430 + +**** donextturn for: id 18 wolf +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19430 + +**** donextturn for: id 12 bat +AIMOVE: the bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { looking for covetted objects... } +.oO { no targetcell, so looking for remote objects } +.oO { looking for any ob which i want. } +.oO { no targetcell, so looking for remote objects } +.oO { i do not have a target or can't move towards it. } +.oO { default - moving randomly } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19430 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19430 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19430 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19430 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 10 + +making firstlf timespent = 0 (currently 10): +cur time is 19440 + +**** donextturn for: id 1 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19440 + +**** donextturn for: id 2 ork +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19440 + +**** donextturn for: id 3 orc +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19440 + +**** donextturn for: id 7 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19440 + +**** donextturn for: id 8 goblin +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19440 + +**** donextturn for: id 10 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19440 + +**** donextturn for: id 11 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19440 + +**** donextturn for: id 19 human +lfid 19 (human) spending 20 time + +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19440 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19440 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19440 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19440 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19440 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 1 + +making firstlf timespent = 0 (currently 1): +cur time is 19441 + +**** donextturn for: id 20 orc +AIMOVE: the orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { looking for covetted objects... } +.oO { no targetcell, so looking for remote objects } +.oO { i have a target... } +.oO { my target is lfid 19 (human). } +.oO { i cannot see my target. moving to last known loc 56/13 } +.oO { walking from 56,12 towards f_targetcell (56,13) ... } +lfid 20 (orc) spending 20 time + +.oO { successfully walked towards f_targetcell. } +.oO { arrived at f_targetcell. removing. } +firstlftime = 4 + +making firstlf timespent = 0 (currently 4): +cur time is 19445 + +**** donextturn for: id 0 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19445 + +**** donextturn for: id 5 zombie +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19445 + +**** donextturn for: id 6 zombie +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19445 + +**** donextturn for: id 9 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19445 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19445 + +**** donextturn for: id 17 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19445 + +**** donextturn for: id 18 wolf +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19450 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19450 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19450 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19450 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19450 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 10 + +making firstlf timespent = 0 (currently 10): +cur time is 19460 + +**** donextturn for: id 1 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19460 + +**** donextturn for: id 2 ork +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19460 + +**** donextturn for: id 3 orc +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19460 + +**** donextturn for: id 7 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19460 + +**** donextturn for: id 8 goblin +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19460 + +**** donextturn for: id 10 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19460 + +**** donextturn for: id 11 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19460 + +**** donextturn for: id 19 human +lfid 19 (human) spending 20 time + +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19460 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19460 + +**** donextturn for: id 17 wolf +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19460 + +**** donextturn for: id 18 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19460 + +**** donextturn for: id 12 bat +AIMOVE: the bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { looking for covetted objects... } +.oO { no targetcell, so looking for remote objects } +.oO { looking for any ob which i want. } +.oO { no targetcell, so looking for remote objects } +.oO { i do not have a target or can't move towards it. } +.oO { default - moving randomly } +lfid 12 (bat) spending 10 time + +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19460 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19460 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19460 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19460 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 1 + +making firstlf timespent = 0 (currently 1): +cur time is 19461 + +**** donextturn for: id 20 orc +AIMOVE: the orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { looking for covetted objects... } +.oO { no targetcell, so looking for remote objects } +.oO { looking for any ob which i want. } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { i do not have a target or can't move towards it. } +.oO { i am hostile. looking for a target. } +.oO { found a target - lfid 19 (human) ! } +.oO { moving towards my new target } +.oO { trying to attack you } +findotn(): modname is 'claws' +.oO { my weapon is a claws (unarmed) } +lfid 20 (orc) spending 20 time + +findotn(): modname is 'claws' +.oO { my modified chance to hit is 100 % } +.oO { i hit! } +findotn(): modname is 'claws' +rolled dam[0] = 4 +.oO { dealing 4 claw damage } +initial dam[0] = 4 +adjusted for lf to dam[0] = 0 +reduced by armour to dam[0] = 0 +.oO { doattack about to return B_FALSE } +firstlftime = 9 + +making firstlf timespent = 0 (currently 9): +cur time is 19470 + +**** donextturn for: id 0 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19470 + +**** donextturn for: id 5 zombie +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19470 + +**** donextturn for: id 6 zombie +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19470 + +**** donextturn for: id 9 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19470 + +**** donextturn for: id 12 bat +AIMOVE: the bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { looking for covetted objects... } +.oO { no targetcell, so looking for remote objects } +.oO { looking for any ob which i want. } +.oO { no targetcell, so looking for remote objects } +.oO { i do not have a target or can't move towards it. } +.oO { default - moving randomly } +lfid 12 (bat) spending 10 time + +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19470 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19470 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19470 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19470 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19475 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19475 + +**** donextturn for: id 17 wolf +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19475 + +**** donextturn for: id 18 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19480 + +**** donextturn for: id 1 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19480 + +**** donextturn for: id 2 ork +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19480 + +**** donextturn for: id 3 orc +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19480 + +**** donextturn for: id 7 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19480 + +**** donextturn for: id 8 goblin +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19480 + +**** donextturn for: id 10 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19480 + +**** donextturn for: id 11 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19480 + +**** donextturn for: id 19 human +lfid 19 (human) spending 20 time + +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19480 + +**** donextturn for: id 12 bat +AIMOVE: the bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { looking for covetted objects... } +.oO { no targetcell, so looking for remote objects } +.oO { looking for any ob which i want. } +.oO { no targetcell, so looking for remote objects } +.oO { i do not have a target or can't move towards it. } +.oO { default - moving randomly } +lfid 12 (bat) spending 10 time + +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19480 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19480 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19480 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19480 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 1 + +making firstlf timespent = 0 (currently 1): +cur time is 19481 + +**** donextturn for: id 20 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +lfid 20 (orc) spending 20 time + +firstlftime = 9 + +making firstlf timespent = 0 (currently 9): +cur time is 19490 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19490 + +**** donextturn for: id 17 wolf +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19490 + +**** donextturn for: id 18 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19490 + +**** donextturn for: id 12 bat +AIMOVE: the bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { looking for covetted objects... } +.oO { no targetcell, so looking for remote objects } +.oO { looking for any ob which i want. } +.oO { no targetcell, so looking for remote objects } +.oO { i do not have a target or can't move towards it. } +.oO { default - moving randomly } +lfid 12 (bat) spending 10 time + +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19490 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19490 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19490 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19490 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19495 + +**** donextturn for: id 0 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19495 + +**** donextturn for: id 5 zombie +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19495 + +**** donextturn for: id 6 zombie +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19495 + +**** donextturn for: id 9 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19500 + +**** donextturn for: id 1 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19500 + +**** donextturn for: id 2 ork +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19500 + +**** donextturn for: id 3 orc +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19500 + +**** donextturn for: id 7 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19500 + +**** donextturn for: id 8 goblin +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19500 + +**** donextturn for: id 10 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19500 + +**** donextturn for: id 11 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19500 + +**** donextturn for: id 19 human +lfid 19 (human) spending 20 time + +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19500 + +**** donextturn for: id 12 bat +AIMOVE: the bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { looking for covetted objects... } +.oO { no targetcell, so looking for remote objects } +.oO { looking for any ob which i want. } +.oO { no targetcell, so looking for remote objects } +.oO { i do not have a target or can't move towards it. } +.oO { default - moving randomly } +lfid 12 (bat) spending 10 time + +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19500 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19500 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19500 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19500 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 1 + +making firstlf timespent = 0 (currently 1): +cur time is 19501 + +**** donextturn for: id 20 orc +AIMOVE: the orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { looking for covetted objects... } +.oO { no targetcell, so looking for remote objects } +.oO { i have a target... } +.oO { my target is lfid 19 (human). } +.oO { i can see my target (at 53,14). will move towards it. } +lfid 20 (orc) spending 20 time + +firstlftime = 4 + +making firstlf timespent = 0 (currently 4): +cur time is 19505 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19505 + +**** donextturn for: id 17 wolf +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19505 + +**** donextturn for: id 18 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19510 + +**** donextturn for: id 12 bat +AIMOVE: the bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { looking for covetted objects... } +.oO { no targetcell, so looking for remote objects } +.oO { looking for any ob which i want. } +.oO { no targetcell, so looking for remote objects } +.oO { i do not have a target or can't move towards it. } +.oO { default - moving randomly } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19510 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19510 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19510 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19510 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 10 + +making firstlf timespent = 0 (currently 10): +cur time is 19520 + +**** donextturn for: id 0 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19520 + +**** donextturn for: id 5 zombie +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19520 + +**** donextturn for: id 6 zombie +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19520 + +**** donextturn for: id 9 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19520 + +**** donextturn for: id 1 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19520 + +**** donextturn for: id 2 ork +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19520 + +**** donextturn for: id 3 orc +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19520 + +**** donextturn for: id 7 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19520 + +**** donextturn for: id 8 goblin +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19520 + +**** donextturn for: id 10 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19520 + +**** donextturn for: id 11 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19520 + +**** donextturn for: id 19 human +lfid 19 (human) spending 20 time + +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19520 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19520 + +**** donextturn for: id 17 wolf +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19520 + +**** donextturn for: id 18 wolf +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19520 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +lfid 12 (bat) spending 10 time + +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19520 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19520 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19520 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19520 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 1 + +making firstlf timespent = 0 (currently 1): +cur time is 19521 + +**** donextturn for: id 20 orc +AIMOVE: the orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { looking for covetted objects... } +.oO { no targetcell, so looking for remote objects } +.oO { i have a target... } +.oO { my target is lfid 19 (human). } +.oO { i can see my target (at 52,14). will move towards it. } +lfid 20 (orc) spending 20 time + +firstlftime = 9 + +making firstlf timespent = 0 (currently 9): +cur time is 19530 + +**** donextturn for: id 12 bat +AIMOVE: the bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { looking for covetted objects... } +.oO { no targetcell, so looking for remote objects } +.oO { looking for any ob which i want. } +.oO { no targetcell, so looking for remote objects } +.oO { i do not have a target or can't move towards it. } +.oO { default - moving randomly } +lfid 12 (bat) spending 10 time + +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19530 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19530 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19530 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19530 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19535 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19535 + +**** donextturn for: id 17 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19535 + +**** donextturn for: id 18 wolf +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19540 + +**** donextturn for: id 1 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19540 + +**** donextturn for: id 2 ork +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19540 + +**** donextturn for: id 3 orc +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19540 + +**** donextturn for: id 7 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19540 + +**** donextturn for: id 8 goblin +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19540 + +**** donextturn for: id 10 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19540 + +**** donextturn for: id 11 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19540 + +**** donextturn for: id 19 human +lfid 19 (human) spending 20 time + +findotn(): modname is 'potion of speed' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19540 + +**** donextturn for: id 12 bat +AIMOVE: the bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { looking for covetted objects... } +.oO { no targetcell, so looking for remote objects } +.oO { looking for any ob which i want. } +.oO { no targetcell, so looking for remote objects } +.oO { i do not have a target or can't move towards it. } +.oO { default - moving randomly } +lfid 12 (bat) spending 10 time + +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19540 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19540 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19540 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19540 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 1 + +making firstlf timespent = 0 (currently 1): +cur time is 19541 + +**** donextturn for: id 20 orc +AIMOVE: the orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { looking for covetted objects... } +.oO { no targetcell, so looking for remote objects } +.oO { i have a target... } +.oO { my target is lfid 19 (human). } +.oO { i can see my target (at 52,14). will move towards it. } +.oO { trying to attack you } +findotn(): modname is 'claws' +.oO { my weapon is a claws (unarmed) } +lfid 20 (orc) spending 20 time + +findotn(): modname is 'claws' +.oO { my modified chance to hit is 100 % } +.oO { i hit! } +findotn(): modname is 'claws' +rolled dam[0] = 4 +.oO { dealing 4 claw damage } +initial dam[0] = 4 +adjusted for lf to dam[0] = 0 +reduced by armour to dam[0] = 0 +.oO { doattack about to return B_FALSE } +firstlftime = 4 + +making firstlf timespent = 0 (currently 4): +cur time is 19545 + +**** donextturn for: id 0 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19545 + +**** donextturn for: id 5 zombie +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19545 + +**** donextturn for: id 6 zombie +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19545 + +**** donextturn for: id 9 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19550 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19550 + +**** donextturn for: id 17 wolf +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19550 + +**** donextturn for: id 18 wolf +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19550 + +**** donextturn for: id 12 bat +AIMOVE: the bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { looking for covetted objects... } +.oO { no targetcell, so looking for remote objects } +.oO { looking for any ob which i want. } +.oO { no targetcell, so looking for remote objects } +.oO { i do not have a target or can't move towards it. } +.oO { default - moving randomly } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19550 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19550 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19550 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19550 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 10 + +making firstlf timespent = 0 (currently 10): +cur time is 19560 + +**** donextturn for: id 1 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19560 + +**** donextturn for: id 2 ork +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19560 + +**** donextturn for: id 3 orc +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19560 + +**** donextturn for: id 7 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19560 + +**** donextturn for: id 8 goblin +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19560 + +**** donextturn for: id 10 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19560 + +**** donextturn for: id 11 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19560 + +**** donextturn for: id 19 human +lfid 19 (human) spending 15 time + +findotn(): modname is 'empty flask' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19560 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +lfid 12 (bat) spending 10 time + +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19560 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19560 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19560 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19560 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 1 + +making firstlf timespent = 0 (currently 1): +cur time is 19561 + +**** donextturn for: id 20 orc +AIMOVE: the orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { looking for covetted objects... } +.oO { no targetcell, so looking for remote objects } +.oO { i have a target... } +.oO { my target is lfid 19 (human). } +.oO { i can see my target (at 52,14). will move towards it. } +.oO { trying to attack you } +findotn(): modname is 'claws' +.oO { my weapon is a claws (unarmed) } +lfid 20 (orc) spending 20 time + +findotn(): modname is 'claws' +.oO { my modified chance to hit is 100 % } +.oO { i hit! } +findotn(): modname is 'claws' +rolled dam[0] = 1 +.oO { dealing 1 claw damage } +initial dam[0] = 1 +adjusted for lf to dam[0] = 0 +reduced by armour to dam[0] = 0 +.oO { doattack about to return B_FALSE } +firstlftime = 4 + +making firstlf timespent = 0 (currently 4): +cur time is 19565 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19565 + +**** donextturn for: id 17 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19565 + +**** donextturn for: id 18 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19570 + +**** donextturn for: id 0 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19570 + +**** donextturn for: id 5 zombie +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19570 + +**** donextturn for: id 6 zombie +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19570 + +**** donextturn for: id 9 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19570 + +**** donextturn for: id 12 bat +AIMOVE: the bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { looking for covetted objects... } +.oO { no targetcell, so looking for remote objects } +.oO { looking for any ob which i want. } +.oO { no targetcell, so looking for remote objects } +.oO { i do not have a target or can't move towards it. } +.oO { default - moving randomly } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19570 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19570 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19570 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19570 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19575 + +**** donextturn for: id 19 human +lfid 19 (human) spending 15 time + +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19580 + +**** donextturn for: id 1 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19580 + +**** donextturn for: id 2 ork +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19580 + +**** donextturn for: id 3 orc +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19580 + +**** donextturn for: id 7 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19580 + +**** donextturn for: id 8 goblin +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19580 + +**** donextturn for: id 10 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19580 + +**** donextturn for: id 11 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19580 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19580 + +**** donextturn for: id 17 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19580 + +**** donextturn for: id 18 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19580 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19580 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19580 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19580 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19580 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 1 + +making firstlf timespent = 0 (currently 1): +cur time is 19581 + +**** donextturn for: id 20 orc +AIMOVE: the orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { looking for covetted objects... } +.oO { no targetcell, so looking for remote objects } +.oO { i have a target... } +.oO { my target is lfid 19 (human). } +.oO { i can see my target (at 51,14). will move towards it. } +lfid 20 (orc) spending 20 time + +firstlftime = 9 + +making firstlf timespent = 0 (currently 9): +cur time is 19590 + +**** donextturn for: id 19 human +lfid 19 (human) spending 15 time + +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19590 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19590 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19590 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19590 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19590 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19595 + +**** donextturn for: id 0 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19595 + +**** donextturn for: id 5 zombie +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19595 + +**** donextturn for: id 6 zombie +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19595 + +**** donextturn for: id 9 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19595 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19595 + +**** donextturn for: id 17 wolf +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19595 + +**** donextturn for: id 18 wolf +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19600 + +**** donextturn for: id 1 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19600 + +**** donextturn for: id 2 ork +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19600 + +**** donextturn for: id 3 orc +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19600 + +**** donextturn for: id 7 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19600 + +**** donextturn for: id 8 goblin +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19600 + +**** donextturn for: id 10 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19600 + +**** donextturn for: id 11 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19600 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19600 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19600 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19600 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19600 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 1 + +making firstlf timespent = 0 (currently 1): +cur time is 19601 + +**** donextturn for: id 20 orc +AIMOVE: the orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { looking for covetted objects... } +.oO { no targetcell, so looking for remote objects } +.oO { i have a target... } +.oO { my target is lfid 19 (human). } +.oO { i can see my target (at 50,14). will move towards it. } +lfid 20 (orc) spending 20 time + +firstlftime = 4 + +making firstlf timespent = 0 (currently 4): +cur time is 19605 + +**** donextturn for: id 19 human +lfid 19 (human) spending 15 time + +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19610 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19610 + +**** donextturn for: id 17 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19610 + +**** donextturn for: id 18 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19610 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19610 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19610 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19610 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19610 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 10 + +making firstlf timespent = 0 (currently 10): +cur time is 19620 + +**** donextturn for: id 0 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19620 + +**** donextturn for: id 5 zombie +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19620 + +**** donextturn for: id 6 zombie +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19620 + +**** donextturn for: id 9 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19620 + +**** donextturn for: id 1 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19620 + +**** donextturn for: id 2 ork +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19620 + +**** donextturn for: id 3 orc +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19620 + +**** donextturn for: id 7 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19620 + +**** donextturn for: id 8 goblin +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19620 + +**** donextturn for: id 10 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19620 + +**** donextturn for: id 11 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19620 + +**** donextturn for: id 19 human +lfid 19 (human) spending 15 time + +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19620 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19620 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19620 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19620 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19620 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 1 + +making firstlf timespent = 0 (currently 1): +cur time is 19621 + +**** donextturn for: id 20 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +firstlftime = 4 + +making firstlf timespent = 0 (currently 4): +cur time is 19625 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19625 + +**** donextturn for: id 17 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19625 + +**** donextturn for: id 18 wolf +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19630 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19630 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19630 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19630 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19630 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19635 + +**** donextturn for: id 19 human +lfid 19 (human) spending 15 time + +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19640 + +**** donextturn for: id 1 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19640 + +**** donextturn for: id 2 ork +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19640 + +**** donextturn for: id 3 orc +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19640 + +**** donextturn for: id 7 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19640 + +**** donextturn for: id 8 goblin +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19640 + +**** donextturn for: id 10 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19640 + +**** donextturn for: id 11 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19640 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19640 + +**** donextturn for: id 17 wolf +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19640 + +**** donextturn for: id 18 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19640 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19640 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19640 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19640 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19640 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 1 + +making firstlf timespent = 0 (currently 1): +cur time is 19641 + +**** donextturn for: id 20 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +lfid 20 (orc) spending 20 time + +firstlftime = 4 + +making firstlf timespent = 0 (currently 4): +cur time is 19645 + +**** donextturn for: id 0 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19645 + +**** donextturn for: id 5 zombie +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19645 + +**** donextturn for: id 6 zombie +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19645 + +**** donextturn for: id 9 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19650 + +**** donextturn for: id 19 human +lfid 19 (human) spending 15 time + +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19650 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19650 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19650 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19650 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19650 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19655 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19655 + +**** donextturn for: id 17 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19655 + +**** donextturn for: id 18 wolf +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19660 + +**** donextturn for: id 1 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19660 + +**** donextturn for: id 2 ork +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19660 + +**** donextturn for: id 3 orc +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19660 + +**** donextturn for: id 7 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19660 + +**** donextturn for: id 8 goblin +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19660 + +**** donextturn for: id 10 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19660 + +**** donextturn for: id 11 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19660 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19660 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19660 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19660 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19660 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 1 + +making firstlf timespent = 0 (currently 1): +cur time is 19661 + +**** donextturn for: id 20 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 4 + +making firstlf timespent = 0 (currently 4): +cur time is 19665 + +**** donextturn for: id 19 human +lfid 19 (human) spending 15 time + +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19670 + +**** donextturn for: id 0 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19670 + +**** donextturn for: id 5 zombie +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19670 + +**** donextturn for: id 6 zombie +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19670 + +**** donextturn for: id 9 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19670 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19670 + +**** donextturn for: id 17 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19670 + +**** donextturn for: id 18 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19670 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19670 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19670 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19670 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19670 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 10 + +making firstlf timespent = 0 (currently 10): +cur time is 19680 + +**** donextturn for: id 1 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19680 + +**** donextturn for: id 2 ork +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19680 + +**** donextturn for: id 3 orc +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19680 + +**** donextturn for: id 7 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19680 + +**** donextturn for: id 8 goblin +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19680 + +**** donextturn for: id 10 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19680 + +**** donextturn for: id 11 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19680 + +**** donextturn for: id 19 human +lfid 19 (human) spending 15 time + +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19680 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19680 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19680 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19680 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19680 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 1 + +making firstlf timespent = 0 (currently 1): +cur time is 19681 + +**** donextturn for: id 20 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 4 + +making firstlf timespent = 0 (currently 4): +cur time is 19685 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19685 + +**** donextturn for: id 17 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19685 + +**** donextturn for: id 18 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19690 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19690 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19690 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19690 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19690 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19695 + +**** donextturn for: id 0 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19695 + +**** donextturn for: id 5 zombie +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19695 + +**** donextturn for: id 6 zombie +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19695 + +**** donextturn for: id 9 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19695 + +**** donextturn for: id 19 human +lfid 19 (human) spending 15 time + +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19700 + +**** donextturn for: id 1 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19700 + +**** donextturn for: id 2 ork +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19700 + +**** donextturn for: id 3 orc +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19700 + +**** donextturn for: id 7 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19700 + +**** donextturn for: id 8 goblin +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19700 + +**** donextturn for: id 10 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19700 + +**** donextturn for: id 11 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19700 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19700 + +**** donextturn for: id 17 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19700 + +**** donextturn for: id 18 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19700 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19700 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19700 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19700 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19700 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 1 + +making firstlf timespent = 0 (currently 1): +cur time is 19701 + +**** donextturn for: id 20 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 9 + +making firstlf timespent = 0 (currently 9): +cur time is 19710 + +**** donextturn for: id 19 human +lfid 19 (human) spending 15 time + +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19710 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19710 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19710 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19710 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19710 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19715 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19715 + +**** donextturn for: id 17 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19715 + +**** donextturn for: id 18 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19720 + +**** donextturn for: id 0 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19720 + +**** donextturn for: id 5 zombie +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19720 + +**** donextturn for: id 6 zombie +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19720 + +**** donextturn for: id 9 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19720 + +**** donextturn for: id 1 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19720 + +**** donextturn for: id 2 ork +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19720 + +**** donextturn for: id 3 orc +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19720 + +**** donextturn for: id 7 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19720 + +**** donextturn for: id 8 goblin +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19720 + +**** donextturn for: id 10 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19720 + +**** donextturn for: id 11 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19720 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19720 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19720 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19720 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19720 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 1 + +making firstlf timespent = 0 (currently 1): +cur time is 19721 + +**** donextturn for: id 20 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 4 + +making firstlf timespent = 0 (currently 4): +cur time is 19725 + +**** donextturn for: id 19 human +lfid 19 (human) spending 15 time + +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19730 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19730 + +**** donextturn for: id 17 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19730 + +**** donextturn for: id 18 wolf +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19730 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19730 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19730 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19730 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19730 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 10 + +making firstlf timespent = 0 (currently 10): +cur time is 19740 + +**** donextturn for: id 1 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19740 + +**** donextturn for: id 2 ork +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19740 + +**** donextturn for: id 3 orc +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19740 + +**** donextturn for: id 7 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19740 + +**** donextturn for: id 8 goblin +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19740 + +**** donextturn for: id 10 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19740 + +**** donextturn for: id 11 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19740 + +**** donextturn for: id 19 human +lfid 19 (human) spending 15 time + +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19740 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19740 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19740 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19740 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19740 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 1 + +making firstlf timespent = 0 (currently 1): +cur time is 19741 + +**** donextturn for: id 20 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 4 + +making firstlf timespent = 0 (currently 4): +cur time is 19745 + +**** donextturn for: id 0 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19745 + +**** donextturn for: id 5 zombie +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19745 + +**** donextturn for: id 6 zombie +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19745 + +**** donextturn for: id 9 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19745 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19745 + +**** donextturn for: id 17 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19745 + +**** donextturn for: id 18 wolf +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19750 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19750 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19750 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19750 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19750 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19755 + +**** donextturn for: id 19 human +lfid 19 (human) spending 15 time + +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19760 + +**** donextturn for: id 1 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19760 + +**** donextturn for: id 2 ork +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19760 + +**** donextturn for: id 3 orc +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19760 + +**** donextturn for: id 7 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19760 + +**** donextturn for: id 8 goblin +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19760 + +**** donextturn for: id 10 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19760 + +**** donextturn for: id 11 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19760 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19760 + +**** donextturn for: id 17 wolf +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19760 + +**** donextturn for: id 18 wolf +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19760 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19760 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19760 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19760 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19760 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 1 + +making firstlf timespent = 0 (currently 1): +cur time is 19761 + +**** donextturn for: id 20 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 9 + +making firstlf timespent = 0 (currently 9): +cur time is 19770 + +**** donextturn for: id 0 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19770 + +**** donextturn for: id 5 zombie +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19770 + +**** donextturn for: id 6 zombie +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19770 + +**** donextturn for: id 9 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19770 + +**** donextturn for: id 19 human +lfid 19 (human) spending 15 time + +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19770 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19770 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19770 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19770 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19770 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19775 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19775 + +**** donextturn for: id 17 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19775 + +**** donextturn for: id 18 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19780 + +**** donextturn for: id 1 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19780 + +**** donextturn for: id 2 ork +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19780 + +**** donextturn for: id 3 orc +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19780 + +**** donextturn for: id 7 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19780 + +**** donextturn for: id 8 goblin +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19780 + +**** donextturn for: id 10 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19780 + +**** donextturn for: id 11 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19780 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19780 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19780 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19780 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19780 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 1 + +making firstlf timespent = 0 (currently 1): +cur time is 19781 + +**** donextturn for: id 20 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 4 + +making firstlf timespent = 0 (currently 4): +cur time is 19785 + +**** donextturn for: id 19 human +lfid 19 (human) spending 15 time + +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19790 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19790 + +**** donextturn for: id 17 wolf +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19790 + +**** donextturn for: id 18 wolf +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19790 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19790 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19790 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19790 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19790 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19795 + +**** donextturn for: id 0 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19795 + +**** donextturn for: id 5 zombie +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19795 + +**** donextturn for: id 6 zombie +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19795 + +**** donextturn for: id 9 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19800 + +**** donextturn for: id 1 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19800 + +**** donextturn for: id 2 ork +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19800 + +**** donextturn for: id 3 orc +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19800 + +**** donextturn for: id 7 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19800 + +**** donextturn for: id 8 goblin +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19800 + +**** donextturn for: id 10 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19800 + +**** donextturn for: id 11 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19800 + +**** donextturn for: id 19 human +lfid 19 (human) spending 15 time + +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19800 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19800 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19800 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19800 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19800 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 1 + +making firstlf timespent = 0 (currently 1): +cur time is 19801 + +**** donextturn for: id 20 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 4 + +making firstlf timespent = 0 (currently 4): +cur time is 19805 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19805 + +**** donextturn for: id 17 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19805 + +**** donextturn for: id 18 wolf +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19810 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19810 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19810 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19810 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19810 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19815 + +**** donextturn for: id 19 human +lfid 19 (human) spending 15 time + +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19820 + +**** donextturn for: id 0 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19820 + +**** donextturn for: id 5 zombie +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19820 + +**** donextturn for: id 6 zombie +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19820 + +**** donextturn for: id 9 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19820 + +**** donextturn for: id 1 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19820 + +**** donextturn for: id 2 ork +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19820 + +**** donextturn for: id 3 orc +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19820 + +**** donextturn for: id 7 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19820 + +**** donextturn for: id 8 goblin +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19820 + +**** donextturn for: id 10 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19820 + +**** donextturn for: id 11 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19820 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19820 + +**** donextturn for: id 17 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19820 + +**** donextturn for: id 18 wolf +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19820 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19820 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19820 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19820 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19820 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 1 + +making firstlf timespent = 0 (currently 1): +cur time is 19821 + +**** donextturn for: id 20 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 9 + +making firstlf timespent = 0 (currently 9): +cur time is 19830 + +**** donextturn for: id 19 human +lfid 19 (human) spending 20 time + +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19830 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19830 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19830 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19830 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19830 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19835 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19835 + +**** donextturn for: id 17 wolf +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19835 + +**** donextturn for: id 18 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19840 + +**** donextturn for: id 1 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19840 + +**** donextturn for: id 2 ork +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19840 + +**** donextturn for: id 3 orc +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19840 + +**** donextturn for: id 7 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19840 + +**** donextturn for: id 8 goblin +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19840 + +**** donextturn for: id 10 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19840 + +**** donextturn for: id 11 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19840 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19840 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19840 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19840 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19840 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 1 + +making firstlf timespent = 0 (currently 1): +cur time is 19841 + +**** donextturn for: id 20 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 4 + +making firstlf timespent = 0 (currently 4): +cur time is 19845 + +**** donextturn for: id 0 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19845 + +**** donextturn for: id 5 zombie +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19845 + +**** donextturn for: id 6 zombie +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19845 + +**** donextturn for: id 9 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19850 + +**** donextturn for: id 19 human +lfid 19 (human) spending 20 time + +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19850 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19850 + +**** donextturn for: id 17 wolf +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19850 + +**** donextturn for: id 18 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19850 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19850 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19850 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19850 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19850 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 10 + +making firstlf timespent = 0 (currently 10): +cur time is 19860 + +**** donextturn for: id 1 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19860 + +**** donextturn for: id 2 ork +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19860 + +**** donextturn for: id 3 orc +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19860 + +**** donextturn for: id 7 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19860 + +**** donextturn for: id 8 goblin +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19860 + +**** donextturn for: id 10 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19860 + +**** donextturn for: id 11 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19860 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19860 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19860 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19860 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19860 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 1 + +making firstlf timespent = 0 (currently 1): +cur time is 19861 + +**** donextturn for: id 20 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 4 + +making firstlf timespent = 0 (currently 4): +cur time is 19865 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19865 + +**** donextturn for: id 17 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19865 + +**** donextturn for: id 18 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19870 + +**** donextturn for: id 0 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19870 + +**** donextturn for: id 5 zombie +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19870 + +**** donextturn for: id 6 zombie +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19870 + +**** donextturn for: id 9 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19870 + +**** donextturn for: id 19 human +lfid 19 (human) spending 20 time + +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19870 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19870 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19870 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19870 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19870 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 10 + +making firstlf timespent = 0 (currently 10): +cur time is 19880 + +**** donextturn for: id 1 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19880 + +**** donextturn for: id 2 ork +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19880 + +**** donextturn for: id 3 orc +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19880 + +**** donextturn for: id 7 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19880 + +**** donextturn for: id 8 goblin +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19880 + +**** donextturn for: id 10 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19880 + +**** donextturn for: id 11 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19880 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19880 + +**** donextturn for: id 17 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19880 + +**** donextturn for: id 18 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19880 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19880 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19880 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19880 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19880 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 1 + +making firstlf timespent = 0 (currently 1): +cur time is 19881 + +**** donextturn for: id 20 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 9 + +making firstlf timespent = 0 (currently 9): +cur time is 19890 + +**** donextturn for: id 19 human +lfid 19 (human) spending 20 time + +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19890 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19890 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19890 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19890 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19890 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19895 + +**** donextturn for: id 0 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19895 + +**** donextturn for: id 5 zombie +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19895 + +**** donextturn for: id 6 zombie +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19895 + +**** donextturn for: id 9 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19895 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19895 + +**** donextturn for: id 17 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19895 + +**** donextturn for: id 18 wolf +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19900 + +**** donextturn for: id 1 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19900 + +**** donextturn for: id 2 ork +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19900 + +**** donextturn for: id 3 orc +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19900 + +**** donextturn for: id 7 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19900 + +**** donextturn for: id 8 goblin +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19900 + +**** donextturn for: id 10 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19900 + +**** donextturn for: id 11 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19900 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19900 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19900 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19900 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19900 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 1 + +making firstlf timespent = 0 (currently 1): +cur time is 19901 + +**** donextturn for: id 20 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 9 + +making firstlf timespent = 0 (currently 9): +cur time is 19910 + +**** donextturn for: id 19 human +lfid 19 (human) spending 20 time + +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19910 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19910 + +**** donextturn for: id 17 wolf +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19910 + +**** donextturn for: id 18 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19910 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19910 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19910 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19910 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19910 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 10 + +making firstlf timespent = 0 (currently 10): +cur time is 19920 + +**** donextturn for: id 0 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19920 + +**** donextturn for: id 5 zombie +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19920 + +**** donextturn for: id 6 zombie +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19920 + +**** donextturn for: id 9 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19920 + +**** donextturn for: id 1 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19920 + +**** donextturn for: id 2 ork +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19920 + +**** donextturn for: id 3 orc +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19920 + +**** donextturn for: id 7 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19920 + +**** donextturn for: id 8 goblin +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19920 + +**** donextturn for: id 10 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19920 + +**** donextturn for: id 11 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19920 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19920 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19920 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19920 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19920 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 1 + +making firstlf timespent = 0 (currently 1): +cur time is 19921 + +**** donextturn for: id 20 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 4 + +making firstlf timespent = 0 (currently 4): +cur time is 19925 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19925 + +**** donextturn for: id 17 wolf +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19925 + +**** donextturn for: id 18 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19930 + +**** donextturn for: id 19 human +lfid 19 (human) spending 20 time + +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19930 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19930 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19930 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19930 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19930 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 10 + +making firstlf timespent = 0 (currently 10): +cur time is 19940 + +**** donextturn for: id 1 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19940 + +**** donextturn for: id 2 ork +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19940 + +**** donextturn for: id 3 orc +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19940 + +**** donextturn for: id 7 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19940 + +**** donextturn for: id 8 goblin +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19940 + +**** donextturn for: id 10 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19940 + +**** donextturn for: id 11 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19940 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19940 + +**** donextturn for: id 17 wolf +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19940 + +**** donextturn for: id 18 wolf +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19940 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19940 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19940 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19940 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19940 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 1 + +making firstlf timespent = 0 (currently 1): +cur time is 19941 + +**** donextturn for: id 20 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 4 + +making firstlf timespent = 0 (currently 4): +cur time is 19945 + +**** donextturn for: id 0 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19945 + +**** donextturn for: id 5 zombie +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19945 + +**** donextturn for: id 6 zombie +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19945 + +**** donextturn for: id 9 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19950 + +**** donextturn for: id 19 human +lfid 19 (human) spending 20 time + +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19950 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19950 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19950 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19950 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19950 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19955 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19955 + +**** donextturn for: id 17 wolf +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19955 + +**** donextturn for: id 18 wolf +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19960 + +**** donextturn for: id 1 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19960 + +**** donextturn for: id 2 ork +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19960 + +**** donextturn for: id 3 orc +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19960 + +**** donextturn for: id 7 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19960 + +**** donextturn for: id 8 goblin +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19960 + +**** donextturn for: id 10 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19960 + +**** donextturn for: id 11 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19960 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19960 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19960 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19960 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19960 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 1 + +making firstlf timespent = 0 (currently 1): +cur time is 19961 + +**** donextturn for: id 20 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 9 + +making firstlf timespent = 0 (currently 9): +cur time is 19970 + +**** donextturn for: id 0 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19970 + +**** donextturn for: id 5 zombie +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19970 + +**** donextturn for: id 6 zombie +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19970 + +**** donextturn for: id 9 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19970 + +**** donextturn for: id 19 human +lfid 19 (human) spending 20 time + +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19970 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19970 + +**** donextturn for: id 17 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19970 + +**** donextturn for: id 18 wolf +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19970 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19970 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19970 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19970 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19970 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 10 + +making firstlf timespent = 0 (currently 10): +cur time is 19980 + +**** donextturn for: id 1 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19980 + +**** donextturn for: id 2 ork +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19980 + +**** donextturn for: id 3 orc +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19980 + +**** donextturn for: id 7 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19980 + +**** donextturn for: id 8 goblin +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19980 + +**** donextturn for: id 10 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19980 + +**** donextturn for: id 11 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19980 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19980 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19980 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19980 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19980 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 1 + +making firstlf timespent = 0 (currently 1): +cur time is 19981 + +**** donextturn for: id 20 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 4 + +making firstlf timespent = 0 (currently 4): +cur time is 19985 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19985 + +**** donextturn for: id 17 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19985 + +**** donextturn for: id 18 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19990 + +**** donextturn for: id 19 human +lfid 19 (human) spending 20 time + +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19990 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19990 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19990 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19990 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19990 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 19995 + +**** donextturn for: id 0 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19995 + +**** donextturn for: id 5 zombie +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19995 + +**** donextturn for: id 6 zombie +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 19995 + +**** donextturn for: id 9 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 20000 + +**** donextturn for: id 1 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20000 + +**** donextturn for: id 2 ork +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20000 + +**** donextturn for: id 3 orc +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20000 + +**** donextturn for: id 7 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20000 + +**** donextturn for: id 8 goblin +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20000 + +**** donextturn for: id 10 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20000 + +**** donextturn for: id 11 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20000 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20000 + +**** donextturn for: id 17 wolf +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20000 + +**** donextturn for: id 18 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20000 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20000 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20000 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20000 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20000 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 1 + +making firstlf timespent = 0 (currently 1): +cur time is 20001 + +**** donextturn for: id 20 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +lfid 20 (orc) spending 20 time + +firstlftime = 9 + +making firstlf timespent = 0 (currently 9): +cur time is 20010 + +**** donextturn for: id 19 human +lfid 19 (human) spending 20 time + +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20010 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20010 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20010 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20010 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20010 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 20015 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20015 + +**** donextturn for: id 17 wolf +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20015 + +**** donextturn for: id 18 wolf +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 20020 + +**** donextturn for: id 0 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20020 + +**** donextturn for: id 5 zombie +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20020 + +**** donextturn for: id 6 zombie +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20020 + +**** donextturn for: id 9 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20020 + +**** donextturn for: id 1 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20020 + +**** donextturn for: id 2 ork +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20020 + +**** donextturn for: id 3 orc +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20020 + +**** donextturn for: id 7 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20020 + +**** donextturn for: id 8 goblin +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20020 + +**** donextturn for: id 10 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20020 + +**** donextturn for: id 11 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20020 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20020 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20020 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20020 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20020 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 1 + +making firstlf timespent = 0 (currently 1): +cur time is 20021 + +**** donextturn for: id 20 orc +AIMOVE: the orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { looking for covetted objects... } +.oO { no targetcell, so looking for remote objects } +.oO { looking for any ob which i want. } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { i do not have a target or can't move towards it. } +.oO { i am hostile. looking for a target. } +.oO { found a target - lfid 19 (human) ! } +.oO { moving towards my new target } +lfid 20 (orc) spending 20 time + +firstlftime = 9 + +making firstlf timespent = 0 (currently 9): +cur time is 20030 + +**** donextturn for: id 19 human +lfid 19 (human) spending 20 time + +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20030 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20030 + +**** donextturn for: id 17 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20030 + +**** donextturn for: id 18 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20030 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20030 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20030 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20030 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20030 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 10 + +making firstlf timespent = 0 (currently 10): +cur time is 20040 + +**** donextturn for: id 1 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20040 + +**** donextturn for: id 2 ork +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20040 + +**** donextturn for: id 3 orc +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20040 + +**** donextturn for: id 7 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20040 + +**** donextturn for: id 8 goblin +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20040 + +**** donextturn for: id 10 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20040 + +**** donextturn for: id 11 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20040 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20040 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20040 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20040 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20040 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 1 + +making firstlf timespent = 0 (currently 1): +cur time is 20041 + +**** donextturn for: id 20 orc +AIMOVE: the orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { looking for covetted objects... } +.oO { no targetcell, so looking for remote objects } +.oO { i have a target... } +.oO { my target is lfid 19 (human). } +.oO { i can see my target (at 57,18). will move towards it. } +lfid 20 (orc) spending 20 time + +firstlftime = 4 + +making firstlf timespent = 0 (currently 4): +cur time is 20045 + +**** donextturn for: id 0 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20045 + +**** donextturn for: id 5 zombie +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20045 + +**** donextturn for: id 6 zombie +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20045 + +**** donextturn for: id 9 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20045 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20045 + +**** donextturn for: id 17 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20045 + +**** donextturn for: id 18 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 20050 + +**** donextturn for: id 19 human +lfid 19 (human) spending 20 time + +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20050 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20050 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20050 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20050 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20050 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 10 + +making firstlf timespent = 0 (currently 10): +cur time is 20060 + +**** donextturn for: id 1 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20060 + +**** donextturn for: id 2 ork +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20060 + +**** donextturn for: id 3 orc +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20060 + +**** donextturn for: id 7 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20060 + +**** donextturn for: id 8 goblin +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20060 + +**** donextturn for: id 10 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20060 + +**** donextturn for: id 11 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20060 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20060 + +**** donextturn for: id 17 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20060 + +**** donextturn for: id 18 wolf +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20060 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20060 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20060 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20060 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20060 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 1 + +making firstlf timespent = 0 (currently 1): +cur time is 20061 + +**** donextturn for: id 20 orc +AIMOVE: the orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { looking for covetted objects... } +.oO { no targetcell, so looking for remote objects } +.oO { i have a target... } +.oO { my target is lfid 19 (human). } +.oO { i can see my target (at 57,18). will move towards it. } +lfid 20 (orc) spending 20 time + +firstlftime = 9 + +making firstlf timespent = 0 (currently 9): +cur time is 20070 + +**** donextturn for: id 0 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20070 + +**** donextturn for: id 5 zombie +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20070 + +**** donextturn for: id 6 zombie +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20070 + +**** donextturn for: id 9 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20070 + +**** donextturn for: id 19 human +lfid 19 (human) spending 20 time + +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20070 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20070 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20070 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20070 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20070 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 20075 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20075 + +**** donextturn for: id 17 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20075 + +**** donextturn for: id 18 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 20080 + +**** donextturn for: id 1 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20080 + +**** donextturn for: id 2 ork +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20080 + +**** donextturn for: id 3 orc +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20080 + +**** donextturn for: id 7 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20080 + +**** donextturn for: id 8 goblin +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20080 + +**** donextturn for: id 10 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20080 + +**** donextturn for: id 11 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20080 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20080 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20080 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20080 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20080 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 1 + +making firstlf timespent = 0 (currently 1): +cur time is 20081 + +**** donextturn for: id 20 orc +AIMOVE: the orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { looking for covetted objects... } +.oO { no targetcell, so looking for remote objects } +.oO { i have a target... } +.oO { my target is lfid 19 (human). } +.oO { i can see my target (at 57,18). will move towards it. } +lfid 20 (orc) spending 20 time + +firstlftime = 9 + +making firstlf timespent = 0 (currently 9): +cur time is 20090 + +**** donextturn for: id 19 human +lfid 19 (human) spending 20 time + +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20090 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20090 + +**** donextturn for: id 17 wolf +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20090 + +**** donextturn for: id 18 wolf +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20090 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20090 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20090 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20090 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20090 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 20095 + +**** donextturn for: id 0 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20095 + +**** donextturn for: id 5 zombie +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20095 + +**** donextturn for: id 6 zombie +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20095 + +**** donextturn for: id 9 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 20100 + +**** donextturn for: id 1 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20100 + +**** donextturn for: id 2 ork +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20100 + +**** donextturn for: id 3 orc +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20100 + +**** donextturn for: id 7 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20100 + +**** donextturn for: id 8 goblin +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20100 + +**** donextturn for: id 10 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20100 + +**** donextturn for: id 11 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20100 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20100 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20100 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20100 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20100 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 1 + +making firstlf timespent = 0 (currently 1): +cur time is 20101 + +**** donextturn for: id 20 orc +AIMOVE: the orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { looking for covetted objects... } +.oO { no targetcell, so looking for remote objects } +.oO { i have a target... } +.oO { my target is lfid 19 (human). } +.oO { i can see my target (at 57,18). will move towards it. } +lfid 20 (orc) spending 20 time + +firstlftime = 4 + +making firstlf timespent = 0 (currently 4): +cur time is 20105 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20105 + +**** donextturn for: id 17 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20105 + +**** donextturn for: id 18 wolf +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 20110 + +**** donextturn for: id 19 human +lfid 19 (human) spending 20 time + +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20110 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20110 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20110 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20110 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20110 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 10 + +making firstlf timespent = 0 (currently 10): +cur time is 20120 + +**** donextturn for: id 0 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20120 + +**** donextturn for: id 5 zombie +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20120 + +**** donextturn for: id 6 zombie +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20120 + +**** donextturn for: id 9 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20120 + +**** donextturn for: id 1 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20120 + +**** donextturn for: id 2 ork +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20120 + +**** donextturn for: id 3 orc +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20120 + +**** donextturn for: id 7 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20120 + +**** donextturn for: id 8 goblin +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20120 + +**** donextturn for: id 10 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20120 + +**** donextturn for: id 11 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20120 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20120 + +**** donextturn for: id 17 wolf +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20120 + +**** donextturn for: id 18 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20120 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20120 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20120 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20120 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20120 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 1 + +making firstlf timespent = 0 (currently 1): +cur time is 20121 + +**** donextturn for: id 20 orc +AIMOVE: the orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { looking for covetted objects... } +.oO { no targetcell, so looking for remote objects } +.oO { i have a target... } +.oO { my target is lfid 19 (human). } +.oO { i can see my target (at 57,18). will move towards it. } +lfid 20 (orc) spending 20 time + +firstlftime = 9 + +making firstlf timespent = 0 (currently 9): +cur time is 20130 + +**** donextturn for: id 19 human +lfid 19 (human) spending 20 time + +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20130 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20130 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20130 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20130 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20130 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 20135 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20135 + +**** donextturn for: id 17 wolf +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20135 + +**** donextturn for: id 18 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 20140 + +**** donextturn for: id 1 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20140 + +**** donextturn for: id 2 ork +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20140 + +**** donextturn for: id 3 orc +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20140 + +**** donextturn for: id 7 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20140 + +**** donextturn for: id 8 goblin +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20140 + +**** donextturn for: id 10 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20140 + +**** donextturn for: id 11 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20140 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20140 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20140 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20140 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20140 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 1 + +making firstlf timespent = 0 (currently 1): +cur time is 20141 + +**** donextturn for: id 20 orc +AIMOVE: the orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { looking for covetted objects... } +.oO { no targetcell, so looking for remote objects } +.oO { i have a target... } +.oO { my target is lfid 19 (human). } +.oO { i can see my target (at 57,18). will move towards it. } +lfid 20 (orc) spending 20 time + +firstlftime = 4 + +making firstlf timespent = 0 (currently 4): +cur time is 20145 + +**** donextturn for: id 0 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20145 + +**** donextturn for: id 5 zombie +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20145 + +**** donextturn for: id 6 zombie +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20145 + +**** donextturn for: id 9 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 20150 + +**** donextturn for: id 19 human +findotn(): modname is 'fists' +lfid 19 (human) spending 20 time + +findotn(): modname is 'fists' +findotn(): modname is 'fists' +rolled dam[0] = 2 +initial dam[0] = 2 +adjusted for lf to dam[0] = 2 +reduced by armour to dam[0] = 1 +findotn(): modname is 'blood stain' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20150 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20150 + +**** donextturn for: id 17 wolf +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20150 + +**** donextturn for: id 18 wolf +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20150 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20150 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20150 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20150 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20150 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 10 + +making firstlf timespent = 0 (currently 10): +cur time is 20160 + +**** donextturn for: id 1 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20160 + +**** donextturn for: id 2 ork +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20160 + +**** donextturn for: id 3 orc +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20160 + +**** donextturn for: id 7 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20160 + +**** donextturn for: id 8 goblin +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20160 + +**** donextturn for: id 10 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20160 + +**** donextturn for: id 11 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20160 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20160 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20160 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20160 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20160 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 1 + +making firstlf timespent = 0 (currently 1): +cur time is 20161 + +**** donextturn for: id 20 orc +AIMOVE: the orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { looking for covetted objects... } +.oO { no targetcell, so looking for remote objects } +.oO { i have a target... } +.oO { my target is lfid 19 (human). } +.oO { i can see my target (at 57,18). will move towards it. } +.oO { trying to attack you } +findotn(): modname is 'claws' +.oO { my weapon is a claws (unarmed) } +lfid 20 (orc) spending 20 time + +findotn(): modname is 'claws' +.oO { my modified chance to hit is 100 % } +.oO { i hit! } +findotn(): modname is 'claws' +rolled dam[0] = 1 +.oO { dealing 1 claw damage } +initial dam[0] = 1 +adjusted for lf to dam[0] = 0 +reduced by armour to dam[0] = 0 +findotn(): modname is 'blood stain' +.oO { doattack about to return B_FALSE } +firstlftime = 4 + +making firstlf timespent = 0 (currently 4): +cur time is 20165 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20165 + +**** donextturn for: id 17 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20165 + +**** donextturn for: id 18 wolf +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 20170 + +**** donextturn for: id 0 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20170 + +**** donextturn for: id 5 zombie +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20170 + +**** donextturn for: id 6 zombie +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20170 + +**** donextturn for: id 9 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20170 + +**** donextturn for: id 19 human +findotn(): modname is 'fists' +lfid 19 (human) spending 20 time + +findotn(): modname is 'fists' +findotn(): modname is 'fists' +rolled dam[0] = 2 +initial dam[0] = 2 +adjusted for lf to dam[0] = 2 +reduced by armour to dam[0] = 1 +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20170 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20170 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20170 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20170 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20170 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 10 + +making firstlf timespent = 0 (currently 10): +cur time is 20180 + +**** donextturn for: id 1 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20180 + +**** donextturn for: id 2 ork +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20180 + +**** donextturn for: id 3 orc +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20180 + +**** donextturn for: id 7 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20180 + +**** donextturn for: id 8 goblin +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20180 + +**** donextturn for: id 10 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20180 + +**** donextturn for: id 11 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20180 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20180 + +**** donextturn for: id 17 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20180 + +**** donextturn for: id 18 wolf +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20180 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20180 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20180 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20180 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20180 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 1 + +making firstlf timespent = 0 (currently 1): +cur time is 20181 + +**** donextturn for: id 20 orc +AIMOVE: the orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { looking for covetted objects... } +.oO { no targetcell, so looking for remote objects } +.oO { i have a target... } +.oO { my target is lfid 19 (human). } +.oO { i can see my target (at 57,18). will move towards it. } +.oO { trying to attack you } +findotn(): modname is 'claws' +.oO { my weapon is a claws (unarmed) } +lfid 20 (orc) spending 20 time + +findotn(): modname is 'claws' +.oO { my modified chance to hit is 100 % } +.oO { i hit! } +findotn(): modname is 'claws' +rolled dam[0] = 1 +.oO { dealing 1 claw damage } +initial dam[0] = 1 +adjusted for lf to dam[0] = 0 +reduced by armour to dam[0] = 0 +.oO { doattack about to return B_FALSE } +firstlftime = 9 + +making firstlf timespent = 0 (currently 9): +cur time is 20190 + +**** donextturn for: id 19 human +findotn(): modname is 'fists' +lfid 19 (human) spending 20 time + +findotn(): modname is 'fists' +findotn(): modname is 'fists' +rolled dam[0] = 2 +initial dam[0] = 2 +adjusted for lf to dam[0] = 2 +reduced by armour to dam[0] = 1 +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20190 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20190 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20190 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20190 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20190 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 20195 + +**** donextturn for: id 0 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20195 + +**** donextturn for: id 5 zombie +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20195 + +**** donextturn for: id 6 zombie +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20195 + +**** donextturn for: id 9 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20195 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20195 + +**** donextturn for: id 17 wolf +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20195 + +**** donextturn for: id 18 wolf +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 20200 + +**** donextturn for: id 1 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20200 + +**** donextturn for: id 2 ork +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20200 + +**** donextturn for: id 3 orc +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20200 + +**** donextturn for: id 7 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20200 + +**** donextturn for: id 8 goblin +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20200 + +**** donextturn for: id 10 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20200 + +**** donextturn for: id 11 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20200 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20200 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20200 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20200 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20200 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 1 + +making firstlf timespent = 0 (currently 1): +cur time is 20201 + +**** donextturn for: id 20 orc +AIMOVE: the orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { looking for covetted objects... } +.oO { no targetcell, so looking for remote objects } +.oO { i have a target... } +.oO { my target is lfid 19 (human). } +.oO { i can see my target (at 57,18). will move towards it. } +.oO { trying to attack you } +findotn(): modname is 'claws' +.oO { my weapon is a claws (unarmed) } +lfid 20 (orc) spending 20 time + +findotn(): modname is 'claws' +.oO { my modified chance to hit is 100 % } +.oO { i hit! } +findotn(): modname is 'claws' +rolled dam[0] = 4 +.oO { dealing 4 claw damage } +initial dam[0] = 4 +adjusted for lf to dam[0] = 0 +reduced by armour to dam[0] = 0 +.oO { doattack about to return B_FALSE } +firstlftime = 9 + +making firstlf timespent = 0 (currently 9): +cur time is 20210 + +**** donextturn for: id 19 human +findotn(): modname is 'fists' +lfid 19 (human) spending 20 time + +findotn(): modname is 'fists' +findotn(): modname is 'fists' +rolled dam[0] = 1 +initial dam[0] = 1 +adjusted for lf to dam[0] = 1 +reduced by armour to dam[0] = 0 +findotn(): modname is 'blood stain' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20210 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20210 + +**** donextturn for: id 17 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20210 + +**** donextturn for: id 18 wolf +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20210 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20210 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20210 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20210 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20210 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 10 + +making firstlf timespent = 0 (currently 10): +cur time is 20220 + +**** donextturn for: id 0 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20220 + +**** donextturn for: id 5 zombie +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20220 + +**** donextturn for: id 6 zombie +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20220 + +**** donextturn for: id 9 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20220 + +**** donextturn for: id 1 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20220 + +**** donextturn for: id 2 ork +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20220 + +**** donextturn for: id 3 orc +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20220 + +**** donextturn for: id 7 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20220 + +**** donextturn for: id 8 goblin +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20220 + +**** donextturn for: id 10 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20220 + +**** donextturn for: id 11 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20220 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20220 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20220 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20220 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20220 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 1 + +making firstlf timespent = 0 (currently 1): +cur time is 20221 + +**** donextturn for: id 20 orc +AIMOVE: the orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { looking for covetted objects... } +.oO { no targetcell, so looking for remote objects } +.oO { i have a target... } +.oO { my target is lfid 19 (human). } +.oO { i can see my target (at 57,18). will move towards it. } +.oO { trying to attack you } +findotn(): modname is 'claws' +.oO { my weapon is a claws (unarmed) } +lfid 20 (orc) spending 20 time + +findotn(): modname is 'claws' +.oO { my modified chance to hit is 100 % } +.oO { i hit! } +findotn(): modname is 'claws' +rolled dam[0] = 3 +.oO { dealing 3 claw damage } +initial dam[0] = 3 +adjusted for lf to dam[0] = 0 +reduced by armour to dam[0] = 0 +findotn(): modname is 'blood stain' +.oO { doattack about to return B_FALSE } +firstlftime = 4 + +making firstlf timespent = 0 (currently 4): +cur time is 20225 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20225 + +**** donextturn for: id 17 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20225 + +**** donextturn for: id 18 wolf +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 20230 + +**** donextturn for: id 19 human +findotn(): modname is 'fists' +lfid 19 (human) spending 20 time + +findotn(): modname is 'fists' +findotn(): modname is 'fists' +rolled dam[0] = 2 +initial dam[0] = 2 +adjusted for lf to dam[0] = 2 +reduced by armour to dam[0] = 1 +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20230 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20230 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20230 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20230 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20230 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 10 + +making firstlf timespent = 0 (currently 10): +cur time is 20240 + +**** donextturn for: id 1 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20240 + +**** donextturn for: id 2 ork +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20240 + +**** donextturn for: id 3 orc +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20240 + +**** donextturn for: id 7 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20240 + +**** donextturn for: id 8 goblin +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20240 + +**** donextturn for: id 10 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20240 + +**** donextturn for: id 11 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20240 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20240 + +**** donextturn for: id 17 wolf +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20240 + +**** donextturn for: id 18 wolf +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20240 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20240 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20240 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20240 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20240 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 1 + +making firstlf timespent = 0 (currently 1): +cur time is 20241 + +**** donextturn for: id 20 orc +AIMOVE: the orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { looking for covetted objects... } +.oO { no targetcell, so looking for remote objects } +.oO { i have a target... } +.oO { my target is lfid 19 (human). } +.oO { i can see my target (at 57,18). will move towards it. } +.oO { trying to attack you } +findotn(): modname is 'claws' +.oO { my weapon is a claws (unarmed) } +lfid 20 (orc) spending 20 time + +findotn(): modname is 'claws' +.oO { my modified chance to hit is 100 % } +.oO { i hit! } +findotn(): modname is 'claws' +rolled dam[0] = 2 +.oO { dealing 2 claw damage } +initial dam[0] = 2 +adjusted for lf to dam[0] = 0 +reduced by armour to dam[0] = 0 +.oO { doattack about to return B_FALSE } +firstlftime = 4 + +making firstlf timespent = 0 (currently 4): +cur time is 20245 + +**** donextturn for: id 0 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20245 + +**** donextturn for: id 5 zombie +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20245 + +**** donextturn for: id 6 zombie +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20245 + +**** donextturn for: id 9 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 20250 + +**** donextturn for: id 19 human +findotn(): modname is 'fists' +lfid 19 (human) spending 20 time + +findotn(): modname is 'fists' +findotn(): modname is 'fists' +rolled dam[0] = 2 +initial dam[0] = 2 +adjusted for lf to dam[0] = 2 +reduced by armour to dam[0] = 1 +findotn(): modname is 'blood stain' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20250 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20250 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20250 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20250 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20250 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 20255 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20255 + +**** donextturn for: id 17 wolf +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20255 + +**** donextturn for: id 18 wolf +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 20260 + +**** donextturn for: id 1 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20260 + +**** donextturn for: id 2 ork +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20260 + +**** donextturn for: id 3 orc +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20260 + +**** donextturn for: id 7 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20260 + +**** donextturn for: id 8 goblin +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20260 + +**** donextturn for: id 10 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20260 + +**** donextturn for: id 11 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20260 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20260 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20260 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20260 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20260 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 1 + +making firstlf timespent = 0 (currently 1): +cur time is 20261 + +**** donextturn for: id 20 orc +AIMOVE: the orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { looking for covetted objects... } +.oO { no targetcell, so looking for remote objects } +.oO { i have a target... } +.oO { my target is lfid 19 (human). } +.oO { i can see my target (at 57,18). will move towards it. } +.oO { trying to attack you } +findotn(): modname is 'claws' +.oO { my weapon is a claws (unarmed) } +lfid 20 (orc) spending 20 time + +findotn(): modname is 'claws' +.oO { my modified chance to hit is 100 % } +.oO { i hit! } +findotn(): modname is 'claws' +rolled dam[0] = 4 +.oO { dealing 4 claw damage } +initial dam[0] = 4 +adjusted for lf to dam[0] = 0 +reduced by armour to dam[0] = 0 +.oO { doattack about to return B_FALSE } +firstlftime = 9 + +making firstlf timespent = 0 (currently 9): +cur time is 20270 + +**** donextturn for: id 0 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20270 + +**** donextturn for: id 5 zombie +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20270 + +**** donextturn for: id 6 zombie +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20270 + +**** donextturn for: id 9 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20270 + +**** donextturn for: id 19 human +findotn(): modname is 'fists' +lfid 19 (human) spending 20 time + +findotn(): modname is 'fists' +findotn(): modname is 'fists' +rolled dam[0] = 2 +initial dam[0] = 2 +adjusted for lf to dam[0] = 2 +reduced by armour to dam[0] = 1 +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20270 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20270 + +**** donextturn for: id 17 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20270 + +**** donextturn for: id 18 wolf +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20270 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20270 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20270 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20270 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20270 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 10 + +making firstlf timespent = 0 (currently 10): +cur time is 20280 + +**** donextturn for: id 1 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20280 + +**** donextturn for: id 2 ork +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20280 + +**** donextturn for: id 3 orc +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20280 + +**** donextturn for: id 7 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20280 + +**** donextturn for: id 8 goblin +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20280 + +**** donextturn for: id 10 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20280 + +**** donextturn for: id 11 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20280 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20280 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20280 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20280 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20280 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 1 + +making firstlf timespent = 0 (currently 1): +cur time is 20281 + +**** donextturn for: id 20 orc +AIMOVE: the orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { looking for covetted objects... } +.oO { no targetcell, so looking for remote objects } +.oO { i have a target... } +.oO { my target is lfid 19 (human). } +.oO { i can see my target (at 57,18). will move towards it. } +.oO { trying to attack you } +findotn(): modname is 'claws' +.oO { my weapon is a claws (unarmed) } +lfid 20 (orc) spending 20 time + +findotn(): modname is 'claws' +.oO { my modified chance to hit is 100 % } +.oO { i hit! } +findotn(): modname is 'claws' +rolled dam[0] = 2 +.oO { dealing 2 claw damage } +initial dam[0] = 2 +adjusted for lf to dam[0] = 0 +reduced by armour to dam[0] = 0 +.oO { doattack about to return B_FALSE } +firstlftime = 4 + +making firstlf timespent = 0 (currently 4): +cur time is 20285 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20285 + +**** donextturn for: id 17 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20285 + +**** donextturn for: id 18 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 20290 + +**** donextturn for: id 19 human +findotn(): modname is 'fists' +lfid 19 (human) spending 20 time + +findotn(): modname is 'fists' +findotn(): modname is 'fists' +rolled dam[0] = 2 +initial dam[0] = 2 +adjusted for lf to dam[0] = 2 +reduced by armour to dam[0] = 1 +DB: moveob() - moving -9875 x leather armour +DB: moveob() - no stack to join +DB: dropping ALL - relinking object to new pile +DB: moveob() - moving -9875 x pair of leather boots +DB: moveob() - no stack to join +DB: dropping ALL - relinking object to new pile +DB: moveob() - moving -9875 x pair of gauntlets +DB: moveob() - no stack to join +DB: dropping ALL - relinking object to new pile +DB: moveob() - moving -9875 x potion of oil +DB: moveob() - no stack to join +DB: dropping ALL - relinking object to new pile +findotn(): modname is 'orc corpse' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20290 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20290 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20290 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20290 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20290 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 20295 + +**** donextturn for: id 0 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20295 + +**** donextturn for: id 5 zombie +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20295 + +**** donextturn for: id 6 zombie +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20295 + +**** donextturn for: id 9 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 20300 + +**** donextturn for: id 1 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20300 + +**** donextturn for: id 2 ork +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20300 + +**** donextturn for: id 3 orc +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20300 + +**** donextturn for: id 7 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20300 + +**** donextturn for: id 8 goblin +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20300 + +**** donextturn for: id 10 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20300 + +**** donextturn for: id 11 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20300 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20300 + +**** donextturn for: id 17 wolf +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20300 + +**** donextturn for: id 18 wolf +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20300 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20300 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20300 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20300 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20300 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 10 + +making firstlf timespent = 0 (currently 10): +cur time is 20310 + +**** donextturn for: id 19 human +lfid 19 (human) spending 20 time + +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20310 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20310 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20310 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20310 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20310 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 20315 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20315 + +**** donextturn for: id 17 wolf +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20315 + +**** donextturn for: id 18 wolf +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 20320 + +**** donextturn for: id 0 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20320 + +**** donextturn for: id 5 zombie +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20320 + +**** donextturn for: id 6 zombie +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20320 + +**** donextturn for: id 9 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20320 + +**** donextturn for: id 1 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20320 + +**** donextturn for: id 2 ork +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20320 + +**** donextturn for: id 3 orc +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20320 + +**** donextturn for: id 7 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20320 + +**** donextturn for: id 8 goblin +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20320 + +**** donextturn for: id 10 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20320 + +**** donextturn for: id 11 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20320 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20320 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20320 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20320 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20320 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 10 + +making firstlf timespent = 0 (currently 10): +cur time is 20330 + +**** donextturn for: id 19 human +lfid 19 (human) spending 20 time + +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20330 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20330 + +**** donextturn for: id 17 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20330 + +**** donextturn for: id 18 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20330 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20330 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20330 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20330 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20330 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 10 + +making firstlf timespent = 0 (currently 10): +cur time is 20340 + +**** donextturn for: id 1 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20340 + +**** donextturn for: id 2 ork +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20340 + +**** donextturn for: id 3 orc +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20340 + +**** donextturn for: id 7 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20340 + +**** donextturn for: id 8 goblin +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20340 + +**** donextturn for: id 10 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20340 + +**** donextturn for: id 11 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20340 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20340 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20340 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20340 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20340 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 20345 + +**** donextturn for: id 0 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20345 + +**** donextturn for: id 5 zombie +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20345 + +**** donextturn for: id 6 zombie +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20345 + +**** donextturn for: id 9 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20345 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20345 + +**** donextturn for: id 17 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20345 + +**** donextturn for: id 18 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 20350 + +**** donextturn for: id 19 human +lfid 19 (human) spending 20 time + +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20350 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20350 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20350 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20350 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20350 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 10 + +making firstlf timespent = 0 (currently 10): +cur time is 20360 + +**** donextturn for: id 1 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20360 + +**** donextturn for: id 2 ork +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20360 + +**** donextturn for: id 3 orc +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20360 + +**** donextturn for: id 7 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20360 + +**** donextturn for: id 8 goblin +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20360 + +**** donextturn for: id 10 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20360 + +**** donextturn for: id 11 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20360 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20360 + +**** donextturn for: id 17 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20360 + +**** donextturn for: id 18 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20360 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20360 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20360 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20360 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20360 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 10 + +making firstlf timespent = 0 (currently 10): +cur time is 20370 + +**** donextturn for: id 0 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20370 + +**** donextturn for: id 5 zombie +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20370 + +**** donextturn for: id 6 zombie +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20370 + +**** donextturn for: id 9 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20370 + +**** donextturn for: id 19 human +lfid 19 (human) spending 20 time + +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20370 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20370 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20370 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20370 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20370 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 20375 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20375 + +**** donextturn for: id 17 wolf +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20375 + +**** donextturn for: id 18 wolf +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 20380 + +**** donextturn for: id 1 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20380 + +**** donextturn for: id 2 ork +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20380 + +**** donextturn for: id 3 orc +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20380 + +**** donextturn for: id 7 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20380 + +**** donextturn for: id 8 goblin +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20380 + +**** donextturn for: id 10 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20380 + +**** donextturn for: id 11 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20380 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20380 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20380 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20380 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20380 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 10 + +making firstlf timespent = 0 (currently 10): +cur time is 20390 + +**** donextturn for: id 19 human +lfid 19 (human) spending 20 time + +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20390 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20390 + +**** donextturn for: id 17 wolf +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20390 + +**** donextturn for: id 18 wolf +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20390 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20390 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20390 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20390 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20390 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 20395 + +**** donextturn for: id 0 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20395 + +**** donextturn for: id 5 zombie +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20395 + +**** donextturn for: id 6 zombie +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20395 + +**** donextturn for: id 9 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 20400 + +**** donextturn for: id 1 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20400 + +**** donextturn for: id 2 ork +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20400 + +**** donextturn for: id 3 orc +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20400 + +**** donextturn for: id 7 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20400 + +**** donextturn for: id 8 goblin +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20400 + +**** donextturn for: id 10 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20400 + +**** donextturn for: id 11 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20400 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20400 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20400 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20400 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20400 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 20405 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20405 + +**** donextturn for: id 17 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20405 + +**** donextturn for: id 18 wolf +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 20410 + +**** donextturn for: id 19 human +lfid 19 (human) spending 20 time + +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20410 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20410 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20410 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20410 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20410 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 10 + +making firstlf timespent = 0 (currently 10): +cur time is 20420 + +**** donextturn for: id 0 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20420 + +**** donextturn for: id 5 zombie +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20420 + +**** donextturn for: id 6 zombie +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20420 + +**** donextturn for: id 9 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20420 + +**** donextturn for: id 1 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20420 + +**** donextturn for: id 2 ork +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20420 + +**** donextturn for: id 3 orc +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20420 + +**** donextturn for: id 7 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20420 + +**** donextturn for: id 8 goblin +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20420 + +**** donextturn for: id 10 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20420 + +**** donextturn for: id 11 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20420 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20420 + +**** donextturn for: id 17 wolf +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20420 + +**** donextturn for: id 18 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20420 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20420 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20420 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20420 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20420 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 10 + +making firstlf timespent = 0 (currently 10): +cur time is 20430 + +**** donextturn for: id 19 human +lfid 19 (human) spending 20 time + +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20430 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20430 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20430 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20430 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20430 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 20435 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20435 + +**** donextturn for: id 17 wolf +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20435 + +**** donextturn for: id 18 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 20440 + +**** donextturn for: id 1 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20440 + +**** donextturn for: id 2 ork +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20440 + +**** donextturn for: id 3 orc +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20440 + +**** donextturn for: id 7 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20440 + +**** donextturn for: id 8 goblin +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20440 + +**** donextturn for: id 10 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20440 + +**** donextturn for: id 11 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20440 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20440 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20440 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20440 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20440 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 20445 + +**** donextturn for: id 0 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20445 + +**** donextturn for: id 5 zombie +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20445 + +**** donextturn for: id 6 zombie +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20445 + +**** donextturn for: id 9 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 20450 + +**** donextturn for: id 19 human +lfid 19 (human) spending 20 time + +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20450 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20450 + +**** donextturn for: id 17 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20450 + +**** donextturn for: id 18 wolf +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20450 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20450 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20450 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20450 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20450 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 10 + +making firstlf timespent = 0 (currently 10): +cur time is 20460 + +**** donextturn for: id 1 orc +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +findotn(): modname is 'claws' +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20460 + +**** donextturn for: id 2 ork +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20460 + +**** donextturn for: id 3 orc +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20460 + +**** donextturn for: id 7 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20460 + +**** donextturn for: id 8 goblin +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20460 + +**** donextturn for: id 10 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20460 + +**** donextturn for: id 11 newt +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20460 + +**** donextturn for: id 12 bat +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20460 + +**** donextturn for: id 13 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20460 + +**** donextturn for: id 14 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20460 + +**** donextturn for: id 15 giant fly +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20460 + +**** donextturn for: id 16 glowbug +findotn(): modname is 'zapper' +findotn(): modname is 'zapper' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 20465 + +**** donextturn for: id 4 giant rat +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20465 + +**** donextturn for: id 17 wolf +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20465 + +**** donextturn for: id 18 wolf +findotn(): modname is 'claws' +findotn(): modname is 'claws' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 5 + +making firstlf timespent = 0 (currently 5): +cur time is 20470 + +**** donextturn for: id 0 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20470 + +**** donextturn for: id 5 zombie +findotn(): modname is 'claws' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20470 + +**** donextturn for: id 6 zombie +findotn(): modname is 'teeth' +findotn(): modname is 'teeth' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20470 + +**** donextturn for: id 9 slime +findotn(): modname is 'acidattack' +findotn(): modname is 'acidattack' +.oO { no targetcell, so looking for remote objects } +.oO { no targetcell, so looking for remote objects } +firstlftime = 0 + +firstlf timespent is not greater than 0. no shuffle. +cur time is 20470 + +**** donextturn for: id 19 human diff --git a/map.c b/map.c index 7e5af91..371a081 100644 --- a/map.c +++ b/map.c @@ -4,15 +4,21 @@ #include #include #include "defs.h" +#include "flag.h" +#include "io.h" +#include "move.h" #include "nexus.h" #include "lf.h" #include "map.h" #include "objects.h" +#include "text.h" extern map_t *firstmap,*lastmap; extern int viewx,viewy,vieww,viewh; extern lifeform_t *player; +extern enum OBCLASS sortorder[]; + cell_t *addcell(map_t *m, int x, int y) { cell_t *cell; m->cell[(y*m->w)+x] = malloc(sizeof(cell_t)); @@ -25,6 +31,9 @@ cell_t *addcell(map_t *m, int x, int y) { cell->obpile = addobpile(NOOWNER, cell); cell->lf = NULL; cell->roomid = -1; + cell->lit = B_FALSE; + cell->writing = NULL; + return cell; } map_t *addmap(void) { @@ -56,35 +65,216 @@ map_t *addmap(void) { // props a->id = id; a->lf = NULL; - a->nextlfid = 0; for (i = 0; i < MAXDIR_ORTH; i++) { a->nextmap[i] = -1; } return a; } -void addrandomthing(cell_t *c) { - char buf[BUFLEN]; - int level; + +lifeform_t *addmonster(cell_t *c, enum RACE raceid) { + lifeform_t *lf = NULL; race_t *r; + // ie. don't create mosnters on closed doors! + if (!cellwalkable(NULL, c, NULL)) { + return NULL; + } + + if ((raceid == R_NONE) || (raceid == R_RANDOM)) { + r = getrandomrace(c->map); + } else { + r = findrace(raceid); + } + assert(r); + + dblog("adding rand lf %s to cell %d,%d",r->name,c->x,c->y); + + if (r) { + //lf = addlf(c, r->id, getrandommonlevel(c->map->depth)); + lf = addlf(c, r->id, 1); + if (lf) { + int amt; + flag_t *f; + // appears in groups? + f = hasflag(lf->flags, F_NUMAPPEAR); + if (f) { + amt = rnd(f->val[0], f->val[1]); + } else { + amt = 1; + } + if (amt > 1) { + cell_t *adjcell; + amt--; // we've already added one + adjcell = c; + for ( ; amt > 0; amt--) { + // add more in adjacent cells + adjcell = getrandomadjcell(adjcell, WE_NOTSOLID); + if (!adjcell) break; + + //lf = addlf(adjcell, r->id, getrandommonlevel(adjcell->map->depth)); + lf = addlf(adjcell, r->id, 1); + if (!lf) break; + } + } + } + } + return lf; +} + +void addrandomob(cell_t *c) { + char buf[BUFLEN]; + + if (c->type->solid) { + return; + } + + if (getrandomob(c->map, buf)) { + dblog("adding rand obj %s to cell %d,%d",buf,c->x,c->y); + addob(c->obpile, buf); + } +} + +void addrandomthing(cell_t *c) { // if there's already someone there, // then add an object. if (c->lf || (rnd(1,2) == 1)) { // object - if (getrandomob(c->map, buf)) { - dblog("adding %s to cell %d,%d",buf,c->x,c->y); - addob(c->obpile, buf); - } + addrandomob(c); } else { - r = getrandomlf(c->map, &level); - if (r) { - dblog("adding %s to cell %d,%d",buf,c->x,c->y); - addlf(c, r->id, level); - } + // monster + addmonster(c, R_RANDOM); } } +int cellhaslos(cell_t *c1, cell_t *dest) { + int deltax, deltay; + int numpixels; + int d; + int dinc1,dinc2,xinc1,xinc2,yinc1,yinc2; + int xinc,yinc,dinc; + int i; + int x1,y1; + int x; + int y; + //int wentuphill = B_FALSE; + //int origheight; + //int shopwall; + int x2,y2; + map_t *map; + + if (!dest) return B_FALSE; + + // let the player see when dead, otherwise the screen wil + // go black when "You die" appears. + map = c1->map; + + + x1 = c1->x; + y1 = c1->y; + x2 = dest->x; + y2 = dest->y; + + + + deltax = (x2 - x1); + if (deltax < 0) deltax = -deltax; + deltay = (y2 - y1); + if (deltay < 0) deltay = -deltay; + + // can always see your own cell + if ((deltax == 0) && (deltay == 0)) { + //if (viewer->controller == C_HUMAN) wreck->mazelev[z].maze[y2*MAZEW+x2].known = B_PERM; + return B_TRUE; + } + + if (deltax >= deltay) { + numpixels = deltax + 1; + d = (deltay*2) - deltax; + dinc1 = deltay << 1; + dinc2 = (deltay-deltax) << 1; + xinc1 = 1; + xinc2 = 1; + yinc1 = 0; + yinc2 = 1; + } else { + numpixels = deltay + 1; + d = (deltax*2) - deltay; + dinc1 = deltax << 1; + dinc2 = (deltax - deltay) << 1; + xinc1 = 0; + xinc2 = 1; + yinc1 = 1; + yinc2 = 1; + } + + if (x1 > x2) { + xinc1 = - xinc1; + xinc2 = - xinc2; + } + if (y1 > y2) { + yinc1 = - yinc1; + yinc2 = - yinc2; + } + + x = x1; y = y1; + + for (i = 0; i < numpixels ; i++) { + cell_t *cell; + + // don't need to move out of the last one + if ((x == x2) && (y == y2)) { + break; + } + + if (d < 0) { + xinc = xinc1; + yinc = yinc1; + dinc = dinc1; + } else { + xinc = xinc2; + yinc = yinc2; + dinc = dinc2; + } + + + // you can always see your own cell + if (i != 0) { + // solid cells stop los - but if you are standing on a solid + // cell you can still see out. + cell = getcellat(map, x, y); + if (!cell->type->transparent) { + return B_FALSE; + } + + /* + // check for smoke + if ((x != x1) || (y != y1)) { // if not in first cell + if (hasopaqueobject(viewer, x,y,z) && (getheight(x,y,z) >= origheight)) { + if (!hasproplf(viewer, P_SEEINSMOKE)) { + return B_FALSE; + } + } + } + */ + + // check for objects which block view + if (hasobwithflag(cell->obpile, F_BLOCKSVIEW)) { + return B_FALSE; + } + + } + + // move to next cell + d += dinc; + x += xinc; + y += yinc; + } + + // made it to the target cell! + return B_TRUE; +} + cell_t *getcellat(map_t *map, int x, int y) { if (!isonmap(map, x, y)) return NULL; return map->cell[y*map->w + x]; @@ -98,6 +288,87 @@ int getcelldist(cell_t *src, cell_t *dst) { return (int)sqrt(xd*xd + yd*yd); } +int getcelldistorth(cell_t *src, cell_t *dst) { // add x/y + return abs(dst->x - src->x) + abs(dst->y - src->y); +} + +enum CELLTYPE getemptycelltype(enum HABITAT hab) { + switch (hab) { + case H_DUNGEON: + return CT_CORRIDOR; + default: + break; + } + return CT_CORRIDOR; +} + +object_t *gettopobject(cell_t *where) { + object_t *o; + int c; + // draw highest object in sort order + c = 0; + while (sortorder[c] != OC_NULL) { + // check each object against this ob class + // count backwards so more recently dropped objects + // appear first. + for (o = where->obpile->last ; o ; o = o->prev) { + if (o->type->obclass->id == sortorder[c]) { + return o; + } + } + c++; + } + return NULL; +} + +void calclight(map_t *map) { + int x,y; + cell_t *c; + for (y = 0; y < map->h; y++) { + for (x = 0; x < map->w; x++) { + c = getcellat(map, x,y); + if (c && (c->lit != B_PERM)) c->lit = B_FALSE; + } + } + for (y = 0; y < map->h; y++) { + for (x = 0; x < map->w; x++) { + c = getcellat(map, x,y); + if (c) { + int radius; + object_t *o; + // lit based on depth + if (map->depth <= 5) { + c->lit = B_PERM; + } + // has lightproducing lf? (ie.hasflag f_produceslight) + if (c->lf) { + if (lfhasflag(c->lf, F_PRODUCESLIGHT)) { + sumflags(c->lf->flags, F_PRODUCESLIGHT, &radius, NULL, NULL); + + makelitradius(c, radius, B_TEMP); + } + // objects in hands or on body... + for (o = c->lf->pack->first ; o ; o = o->next) { + if (obproduceslight(o) && isequipped(o)) { + sumflags(o->flags, F_PRODUCESLIGHT, &radius, NULL, NULL); + + makelitradius(c, radius, B_TEMP); + } + } + } + // has light-producing object on ground? + for (o = c->obpile->first ; o ; o = o->next) { + if (obproduceslight(o)) { + sumflags(o->flags, F_PRODUCESLIGHT, &radius, NULL, NULL); + makelitradius(c, radius, B_TEMP); + } + } + + } + } + } +} + int calcroompos(map_t *map, int w, int h, int *bx, int *by) { int x,y; int bestx = -1, besty = -1; @@ -159,6 +430,19 @@ int calcroompos(map_t *map, int w, int h, int *bx, int *by) { return B_FALSE; } +int countadjcellswithflag(cell_t *cell, enum FLAG fid) { + int d; + int count = 0; + cell_t *newcell; + for (d = D_N; d < MAXDIR_ORTH; d++) { + newcell = getcellindir(cell, d); + if (newcell && hasobwithflag(cell->obpile, fid)) { + count++; + } + } + return count; +} + int countadjcellsoftype(cell_t *cell, int id) { int d; int count = 0; @@ -193,11 +477,10 @@ int countcellexits(cell_t *cell) { looppct = percentage change of turning dead-end into loop maxrooms = max # of rooms */ -void createmap(map_t *map, int habitat) { - lifeform_t *lf; +void createmap(map_t *map, int depth, int habitat, map_t *parentmap, objecttype_t *returnstairtype) { char buf[BUFLEN]; int wantrooms = B_TRUE; - int x,y,newx,newy; + int x,y; int d; int i; int done,unused; @@ -212,9 +495,10 @@ void createmap(map_t *map, int habitat) { int maxroomh = MAX_ROOMH; int bestx,besty; int w,h; - int startdir,forcex,forcey,ntries; - cell_t *cell; - //object_t *o; + objecttype_t *ot; + //int startdir,forcex,forcey,ntries; + cell_t *cell, *c; + object_t *o; // parameters int turnpct = DEF_TURNPCT; @@ -225,7 +509,9 @@ void createmap(map_t *map, int habitat) { int moved = 0; - int db = B_TRUE; + enum CELLTYPE emptycell; + + //int db = B_TRUE; sprintf(buf, "Map %d",map->id); map->name = strdup(buf); @@ -238,8 +524,13 @@ void createmap(map_t *map, int habitat) { map->w = MAX_MAPW; map->h = MAX_MAPH; + // map depth? + map->depth = depth; + // rememebr seed + //map->seed = 11734; map->seed = rand() % 65535; + srand(map->seed); // fill entire maze with walls for (y = 0; y < map->h; y++) { @@ -248,9 +539,14 @@ void createmap(map_t *map, int habitat) { } } + + // what kind of cells will 'empty' ones be? + emptycell = getemptycelltype(map->habitat); + // pick initial random spot cell = getrandomcell(map); - setcelltype(cell, CT_CORRIDOR); + + setcelltype(cell, emptycell); cell->visited = B_TRUE; //if (db) printf("- Starting (%d,%d)\n",cell->x, cell->y); @@ -279,7 +575,7 @@ void createmap(map_t *map, int habitat) { // pick new EMPTY random spot cell = getrandomcell(map); - while (cell->type->solid) { + while (!isempty(cell)) { cell = getrandomcell(map); } //if (db) printf("--- Couldn't find a valid direction. Jumped to (%d,%d).\n",cell->x, cell->y); @@ -298,7 +594,7 @@ void createmap(map_t *map, int habitat) { moved++; // blank it - setcelltype(cell,CT_CORRIDOR); + setcelltype(cell,emptycell); cell->visited = B_TRUE; // mark surrounding cells as visited for (d = DC_N; d < MAXDIR_COMPASS; d++) { @@ -399,7 +695,7 @@ void createmap(map_t *map, int habitat) { connected = B_TRUE; } else { // blank adjacent cell - setcelltype(newcell, CT_CORRIDOR); + setcelltype(newcell, emptycell); newcell->visited = B_TRUE; } cell = newcell; @@ -454,6 +750,29 @@ void createmap(map_t *map, int habitat) { } + // add return staircase to previous map + c = NULL; + while (!c || !isempty(c) || countobs(c->obpile)) { + c = getrandomroomcell(map, ANYROOM); + } + + o = addob(c->obpile, returnstairtype->name); + if (parentmap) { + addflag(o->flags, F_MAPLINK, parentmap->id, NA, NA, NULL); + } + + // add staircase continuing on (normally this will be down) + if ((map->depth >= MAXDEPTH) && (returnstairtype->id == OT_STAIRSUP)) { + // no need for a down staircase on the last level! + } else { + c = NULL; + while (!c || !isempty(c) || countobs(c->obpile)) { + c = getrandomroomcell(map, ANYROOM); + } + ot = getoppositestairs(returnstairtype); + addob(c->obpile, ot->name); + } + /* void around map // N @@ -627,9 +946,8 @@ void createmap(map_t *map, int habitat) { for (y = 0; y < map->h; y++) { for (x = 0; x < map->w; x++) { cell_t *c; - int obchance; c = getcellat(map, x, y); - if (c && !c->type->solid) { + if (c && isempty(c)) { if (rnd(1,100) <= getobchance(map->habitat)) { addrandomthing(c); } @@ -641,7 +959,6 @@ void createmap(map_t *map, int habitat) { // add pillars & objects & monsters to rooms for (i = 0; i < numrooms; i++) { int numobsmin,numobsmax,numobs,n; - int x,y; int maxpillars; //dblog("Adding obs to room %d/%d",i+1,numrooms); @@ -657,7 +974,7 @@ void createmap(map_t *map, int habitat) { cell_t *c; c = getrandomroomcell(map, i); - if (c && !c->type->solid && !countobs(c->obpile)) { + if (c && isempty(c) && !countobs(c->obpile)) { setcelltype(cell, CT_WALL); } } @@ -671,7 +988,7 @@ void createmap(map_t *map, int habitat) { } else { */ numobsmin = 0; - numobsmax = MAXOF(roomw[i],roomh[i]); + numobsmax = MAXOF(roomw[i],roomh[i]) / 2; //} @@ -689,7 +1006,7 @@ void createmap(map_t *map, int habitat) { while (!done) { c = getrandomroomcell(map, i); // if nothing there - if (c && !countobs(c->obpile)) { + if (c && isempty(c) && !countobs(c->obpile)) { /* if (roomspecial[i]) { if (getrand(1,4) == 1) { // less chance of monster @@ -901,8 +1218,7 @@ void createroom(map_t *map, int minx, int miny, int w, int h, int roomid) { if (newcell && !newcell->type->solid) { int doorcount; - doorcount = countadjcellsoftype(cell, CT_DOOROPEN) + - countadjcellsoftype(cell, CT_DOORCLOSED); + doorcount = countadjcellswithflag(cell, F_DOOR); if (doorcount == 0) { if ((countcellexits(newcell) == 1) && @@ -934,9 +1250,8 @@ void createroom(map_t *map, int minx, int miny, int w, int h, int roomid) { if (newcell && !newcell->type->solid) { int doorcount; - doorcount = countadjcellsoftype(cell, CT_DOOROPEN) + - countadjcellsoftype(cell, CT_DOORCLOSED); - + doorcount = countadjcellswithflag(cell, F_DOOR); + if (doorcount == 0) { if ((countcellexits(newcell) == 1) && (iswallindir(newcell,D_E)) && @@ -966,8 +1281,7 @@ void createroom(map_t *map, int minx, int miny, int w, int h, int roomid) { newcell = getcellindir(cell, D_W); if (newcell && !newcell->type->solid) { int doorcount; - doorcount = countadjcellsoftype(cell, CT_DOOROPEN) + - countadjcellsoftype(cell, CT_DOORCLOSED); + doorcount = countadjcellswithflag(cell, F_DOOR); if (doorcount == 0) { if ((countcellexits(newcell) == 1) && (iswallindir(newcell,D_N)) && @@ -997,8 +1311,7 @@ void createroom(map_t *map, int minx, int miny, int w, int h, int roomid) { newcell = getcellindir(cell, D_E); if (newcell && !newcell->type->solid) { int doorcount; - doorcount = countadjcellsoftype(cell, CT_DOOROPEN) + - countadjcellsoftype(cell, CT_DOORCLOSED); + doorcount = countadjcellswithflag(cell, F_DOOR); if (doorcount == 0) { if ((countcellexits(newcell) == 1) && (iswallindir(newcell,D_N)) && @@ -1072,6 +1385,7 @@ int dirtoy(int dt, int dir) { return 0; } } + return 0; } @@ -1088,6 +1402,54 @@ printf("dump of map '%s' (%d x %d):\n",map->name, map->w, map->h); } } +void explodecells(cell_t *c, int dam, int killwalls, object_t *o, int range, int wantannounce) { + int x,y; + animradial(c, range, '}'); + + if (haslos(player, c)) { + if (wantannounce) { + msg("You see %s explosion!", (range > 0) ? "a huge" : "an"); + } + } else { + youhear(c, "an explosion!"); + } + + for (y = c->y - range ; y <= c->y + range ; y++) { + for (x = c->x - range ; x <= c->x + range ; x++) { + cell_t *cc; + cc = getcellat(c->map, x,y); + if (cc && (getcelldist(c, cc) <= range)) { + explodesinglecell(cc, dam, killwalls, o); + } + } + } +} + +void explodesinglecell(cell_t *c, int dam, int killwalls, object_t *o) { + char obname[BUFLEN]; + + if (c->lf) { + char buf[BUFLEN]; + if (o) { + getobname(o, obname, 1); + sprintf(buf, "an exploding %s",strchr(obname, ' ')+1); + } else { + sprintf(buf, "an explosion"); + } + losehp(c->lf, dam, DT_EXPLOSIVE, NULL, buf); + } + damageallobs(o, c->obpile, dam, DT_EXPLOSIVE); + + if (killwalls) { + if (c->type->solid) { + // make it empty! + setcelltype(c, getemptycelltype(c->map->habitat)); + // add some rubble + addob(c->obpile, "10-50 stones"); + } + } +} + map_t *findmap(int mid) { map_t *m; for (m = firstmap ; m ; m = m->next) { @@ -1096,6 +1458,29 @@ map_t *findmap(int mid) { return NULL; } +map_t *findmapofdepth(int depth) { + map_t *m; + for (m = firstmap ; m ; m = m->next) { + if (m->depth == depth) return m; + } + return NULL; +} + +// find the cell in 'map' which contains object oid +cell_t *findobinmap(map_t *m, enum OBCLASS oid) { + cell_t *c; + int x,y; + for (y = 0; y < m->h; y++) { + for (x = 0; x < m->w; x++) { + c = getcellat(m, x, y); + if (hasob(c->obpile, oid)) { + return c; + } + } + } + return NULL; +} + void forgetcells(map_t *map, int amt) { int amtleft; //int totcells; @@ -1155,6 +1540,8 @@ cell_t *getcellindir(cell_t *cell, int dir) { case DC_NW: dt = DT_COMPASS; break; + default: + return NULL; } newx = cell->x + dirtox(dt, dir); newy = cell->y + dirtoy(dt, dir); @@ -1181,8 +1568,6 @@ int getnewdigdir(cell_t *cell, int lastdir, int turnpct, int *moved) { } while (!foundvaliddir) { // keep going until we get a valid direction - int newx,newy; - if (numtries >= MAXDIR_ORTH) { // no valid dirs return D_NONE; // (pick a new random spot and refresh tried dirs and current dir) } @@ -1225,6 +1610,10 @@ int getnewdigdir(cell_t *cell, int lastdir, int turnpct, int *moved) { newcell1 = getcellindir(newcell,D_N); newcell2 = getcellindir(newcell,D_S); break; + default: // should never happen + newcell1 = NULL; + newcell2 = NULL; + break; } } else { newcell1 = NULL; @@ -1275,6 +1664,37 @@ int getobchance(int habitat) { return 0; } +cell_t *getrandomadjcell(cell_t *c, int wantempty) { + int dir; + int ntries = 0; + cell_t *new; + dir = getrandomdir(DT_COMPASS); + while (ntries < 8) { + new = getcellindir(c, dir); + if (new) { + if (wantempty == WE_EMPTY) { + // make sure it's empty + if (isempty(new)) { + return new; + } + } else if (wantempty == WE_NOTSOLID) { + if (cellwalkable(NULL, new, NULL)) { + return new; + } + } else { + // always ok + return new; + } + } + // not found yet... + dir++; + if (dir > DC_NW) dir = DC_N; + ntries++; + } + + return NULL; +} + cell_t *getrandomcell(map_t *map) { int x,y; cell_t *cell; @@ -1317,9 +1737,20 @@ cell_t *getrandomroomcell(map_t *map, int roomid) { for (x = 0; x < map->w; x++) { c = getcellat(map, x, y); // is this cell in the correct room and not a wall? - if (c && !c->type->solid && (c->roomid == roomid)) { - poss[npossible] = c; - npossible++; + if (c && isempty(c)) { + int ok = B_FALSE; + if (c->roomid == roomid) { + ok = B_TRUE; + } else if (roomid == ANYROOM) { + if (c->roomid != -1) { + ok = B_TRUE; + } + } + + if (ok) { + poss[npossible] = c; + npossible++; + } } } } @@ -1333,6 +1764,143 @@ cell_t *getrandomroomcell(map_t *map, int roomid) { return c; } +lifeform_t *haslf(cell_t *c) { + if (c->lf && !isdead(c->lf)) { + return c->lf; + } + return NULL; +} + +int hasobject(cell_t *c) { + if (c->obpile->first) { + return B_TRUE; + } + return B_FALSE; +} + +int isadjacent(cell_t *src, cell_t *dst) { + if (getcelldist(src, dst) == 1) { + return B_TRUE; + } + return B_FALSE; +} + +int isdiggable(cell_t *c) { + switch (c->type->id) { + case CT_WALL: return B_TRUE; + case CT_ROOMWALL: return B_TRUE; + } + return B_FALSE; +} + +// if isopen provided, returns whether or not the door is opened +int isdoor(object_t *o, int *isopen) { + int isdoor = B_FALSE; + if (hasflag(o->flags, F_DOOR)) { + isdoor = B_TRUE; + } else { + isdoor = B_FALSE; + } + + if (isdoor) { + if (isopen) { + if (hasflag(o->flags, F_OPEN)) { + *isopen = B_TRUE; + } else { + *isopen = B_FALSE; + } + } + } + return isdoor; +} + +int isempty(cell_t *c) { + if (!c) return B_FALSE; + if (c->type->solid) return B_FALSE; + if (c->lf) return B_FALSE; + if (!cellwalkable(NULL, c, NULL)) return B_FALSE; + return B_TRUE; +} + +//returns TT_ based on what you can scan there +int isinscanrange(cell_t *c, void **thing, char *desc, char *glyph) { + flag_t *f; + // handle scanner + f = lfhasflag(player, F_DETECTLIFE); + if (f) { + if (c->lf) { + if (getcelldistorth(player->cell, c) <= f->val[0]) { + *thing = c->lf; + if (desc) { + char *p; + p = getsizetext(getlfsize(c->lf)); + sprintf(desc, "%s %s monster", isvowel(*p) ? "an" : "a", p); + } + if (glyph) { + // select glyph based on size + switch(getlfsize(c->lf)) { + case SZ_ENORMOUS: + *glyph = '6'; + break; + case SZ_HUGE: + *glyph = '5'; + break; + case SZ_LARGE: + *glyph = '4'; + break; + case SZ_HUMAN: + *glyph = '3'; + break; + case SZ_MEDIUM: + *glyph = '2'; + break; + case SZ_SMALL: + *glyph = '1'; + break; + case SZ_MINI: + case SZ_TINY: + default: + *glyph = '0'; + break; + } + } + return TT_MONSTER; + } + } + } + f = lfhasflag(player, F_DETECTMETAL); + if (f) { + if (getcelldistorth(player->cell, c) <= f->val[0]) { + if (c->lf && ismetal(c->lf->race->material->id) ) { + *thing = c->lf; + if (glyph) *glyph = '*'; + if (desc) sprintf(desc, "something metallic"); + return TT_MONSTER; + } else { + object_t *o; + for (o = c->obpile->first ; o ; o = o->next) { + if (ismetal(o->material->id)) { + *thing = o; + if (glyph) *glyph = '*'; + if (desc) sprintf(desc, "something metallic"); + return TT_OBJECT; + } + } + } + } + } + + return B_FALSE; +} + +int islit(cell_t *c) { + if (c->lit) { + return B_TRUE; + } + return B_FALSE; +} + + int isloopdirok(cell_t *cell, int dir) { int dirok = B_FALSE; cell_t *newcell; @@ -1393,12 +1961,47 @@ int iswallindir(cell_t *cell, int dir) { } void makedoor(cell_t *cell) { - setcelltype(cell, CT_DOORCLOSED); + object_t *o; + setcelltype(cell, getemptycelltype(cell->map->habitat)); + o = addob(cell->obpile, "wooden door"); + if (o && (rnd(1,2) == 1)) { + opendoor(NULL, o); + } else { + // door is closed - lock it? + if (rnd(1,3) == 1) { + addflag(o->flags, F_LOCKED, B_TRUE, NA, NA, NULL); + } + } +} + + +void makelit(cell_t *c, int how) { + if (how == B_FALSE) { + c->lit = how; + } else if (c->lit != B_PERM) { // don't override permenant light with temp light! + c->lit = how; + } +} + +void makelitradius(cell_t *c, int radius, int how) { + int x,y; + cell_t *c2; + + if (radius <= 0) return; + + for (y = c->y - radius ; y <= c->y + radius; y++) { + for (x = c->x - radius ; x <= c->x + radius; x++) { + c2 = getcellat(c->map, x, y); + if (c2 && (getcelldistorth(c, c2) <= radius)) { + if (cellhaslos(c,c2)) { + makelit(c2, how); + } + } + } + } } void setcelltype(cell_t *cell, int id) { - int i; - assert(cell); cell->type = findcelltype(id); assert(cell->type); @@ -1409,15 +2012,27 @@ void setcelltype(cell_t *cell, int id) { void updateknowncells(void) { int x,y; map_t *map; + object_t *wep; + int seenundead = B_FALSE; + map = player->cell->map; + wep = getweapon(player); for (y = viewy; y < viewy + viewh; y++) { for (x = viewx; x < viewx + vieww; x++) { cell_t *cell; cell = getcellat(map, x, y); - if (cell && !cell->known && haslos(player, cell)) { - cell->known = B_TRUE; + if (cell) { + //if ((player->cell == cell) || haslos(player, cell)) { + if (haslos(player, cell)) { + if (!cell->known) { + cell->known = B_TRUE; + } + if (cell->lf && lfhasflag(cell->lf, F_UNDEAD)) { + seenundead = B_TRUE; + } + } } } } diff --git a/map.h b/map.h index 81ba784..66babbd 100644 --- a/map.h +++ b/map.h @@ -2,30 +2,53 @@ cell_t *addcell(map_t *map, int x, int y); map_t *addmap(void); +lifeform_t *addmonster(cell_t *c, enum RACE raceid); +void addrandomob(cell_t *c); void addrandomthing(cell_t *c); +int cellhaslos(cell_t *c1, cell_t *dest); cell_t *getcellat(map_t *map, int x, int y); int getcelldist(cell_t *src, cell_t *dst); +int getcelldistorth(cell_t *src, cell_t *dst); +enum CELLTYPE getemptycelltype(enum HABITAT hab); +object_t *gettopobject(cell_t *where); +void calclight(map_t *map); int calcroompos(map_t *map, int w, int h, int *bx, int *by); int countadjcellsoftype(cell_t *cell, int id); +int countadjcellswithflag(cell_t *cell, enum FLAG fid); int countcellexits(cell_t *cell); -void createmap(map_t *map, int habitat); +void createmap(map_t *map, int depth, int habitat, map_t *parentmap, objecttype_t *returnstairtype); void createroom(map_t *map, int minx, int miny, int w, int h, int roomid); int dirtox(int dt, int dir); int dirtoy(int dt, int dir); void dumpmap(map_t *map); +void explodesinglecell(cell_t *c, int dam, int killwalls, object_t *o); +void explodecells(cell_t *c, int dam, int killwalls, object_t *o, int range, int wantannounce); map_t *findmap(int mid); +map_t *findmapofdepth(int depth); +cell_t *findobinmap(map_t *m, enum OBCLASS oid); void forgetcells(map_t *map, int amt); cell_t *getcellindir(cell_t *cell, int dir); int getnewdigdir(cell_t *cell, int lastdir, int turnpct, int *moved); int getobchance(int habitat); +cell_t *getrandomadjcell(cell_t *c, int wantempty); cell_t *getrandomcell(map_t *map); cell_t *getrandomcelloftype(map_t *map, int id); int getrandomdir(int dirtype); cell_t *getrandomroomcell(map_t *map, int roomid); +lifeform_t *haslf(cell_t *c); +int hasobject(cell_t *c); +int isadjacent(cell_t *src, cell_t *dst); +int isdiggable(cell_t *c); +int isdoor(object_t *o, int *isopen); +int isempty(cell_t *c); +int isinscanrange(cell_t *c, void **thing, char *desc, char *glyph); +int islit(cell_t *c); int isloopdirok(cell_t *cell, int dir); int isnewcellok(cell_t *cell, char *err); int isonmap(map_t *map, int x, int y); int iswallindir(cell_t *cell, int dir); void makedoor(cell_t *cell); +void makelit(cell_t *c, int how); +void makelitradius(cell_t *c, int radius, int how); void setcelltype(cell_t *cell, int id); void updateknowncells(void); diff --git a/move.c b/move.c index 9401226..6d3ae4f 100644 --- a/move.c +++ b/move.c @@ -1,32 +1,97 @@ +#include #include +#include #include #include "attack.h" #include "defs.h" +#include "flag.h" +#include "io.h" #include "lf.h" #include "map.h" +#include "move.h" +#include "nexus.h" #include "objects.h" #include "text.h" extern lifeform_t *player; +extern int statdirty; + +extern enum ERROR reason; +extern void *rdata; + +int canandwillmove(lifeform_t *lf, int dir, enum ERROR *error) { + if (isplayer(lf)) { + if (canmove(lf, dir, error)) { + return B_TRUE; + } + } else { + if (canmove(lf, dir, error) && willmove(lf, dir, error)) { + return B_TRUE; + } + } + return B_FALSE; +} + int canmove(lifeform_t *lf, int dir, enum ERROR *error) { cell_t *cell; + // default + if (error) { + *error = E_OK; + rdata = NULL; + } + + if (lfhasflag(lf, F_GRAVBOOSTED)) { + if (error) *error = E_GRAVBOOSTED; + return B_FALSE; + } + + // TODO: check if we are burdened, paralyzed, etc cell = getcellindir(lf->cell, dir); - + return cellwalkable(lf, cell, error); +} + + +int cellwalkable(lifeform_t *lf, cell_t *cell, enum ERROR *error) { + object_t *o; + // default + if (error) { + *error = E_OK; + rdata = NULL; + } if (!cell || cell->type->solid) { if (error) *error = E_WALLINWAY; return B_FALSE; } - if (cell->lf) { + + for (o = cell->obpile->first ; o ; o = o->next) { + if (hasflag(o->flags, F_IMPASSABLE)) { + if (lf) { + if ((lf->race->material->id != MT_GAS) && + (lf->race->material->id != MT_SLIME)) { + rdata = o; + if (error) *error = E_OBINWAY; + return B_FALSE; + } + } else { + rdata = o; + if (error) *error = E_OBINWAY; + return B_FALSE; + } + } + } + + if (cell->lf && (cell->lf != lf)) { if (error) *error = E_LFINWAY; return B_FALSE; } - return B_TRUE; } + + void dorandommove(lifeform_t *lf, int badmovesok) { int dir; int tries = 0; @@ -36,64 +101,190 @@ void dorandommove(lifeform_t *lf, int badmovesok) { // find a valid direction dir = getrandomdir(DT_COMPASS); - moveok = canmove(lf, dir, &why); + moveok = canandwillmove(lf, dir, &why); + if (!moveok && badmovesok) { switch (why) { + // actually okay to move into someone case E_WALLINWAY: case E_LFINWAY: moveok = B_TRUE; break; + default: + break; } } while (!moveok) { // try next direction... if (++dir > DC_NW) dir = DC_N; if (++tries >= MAXDIR_COMPASS) { - dowait(lf); + rest(lf, B_TRUE); return; } // check this direction... - moveok = canmove(lf, dir, &why); + moveok = canandwillmove(lf, dir, &why); if (!moveok && badmovesok) { switch (why) { case E_WALLINWAY: case E_LFINWAY: moveok = B_TRUE; break; + default: + break; } } } trymove(lf, dir); } -int dowait(lifeform_t *lf) { - taketime(lf, SPEED_WAIT); - if (lf->controller == C_PLAYER) { - // clear msg bar - clearmsg(); + +int getdiraway(cell_t *src, cell_t *dst, int wantcheck) { + int d; + cell_t *c; + int maxdist=-1,bestdir=D_NONE; + + for (d = DC_N; d <= DC_NW; d++) { + int thisdist = -1; + int ok = B_FALSE; + c = getcellindir(src, d); + if (!c) continue; + + if (c == dst) { + // destination is the thing we're fleeing from! + thisdist = -1; + } else { + if (wantcheck) { + if (src->lf && canandwillmove(src->lf, d, NULL)) { + ok = B_TRUE; + } else if (!src->lf) { + ok = B_TRUE; + } + } else { + if (src->lf && cellwalkable(src->lf, c, NULL)) { + ok = B_TRUE; + } else if (!src->lf) { + ok = B_TRUE; + } + } + if (ok) { + thisdist = getcelldist(c, dst); + } else { + thisdist = -1; + } + + if (thisdist > maxdist) { + maxdist = thisdist; + bestdir = d; + } + } } - return B_FALSE; + + // TODO: handle ties + + return bestdir; } -void movelf(lifeform_t *lf, cell_t *newcell) { + +int getdirtowards(cell_t *src, cell_t *dst, int wantcheck) { + int d; + cell_t *c; + int mindist=9999,bestdir=D_NONE; + + for (d = DC_N; d <= DC_NW; d++) { + int ok = B_FALSE; + c = getcellindir(src, d); + if (!c) continue; + if (c == dst) { + // destination is adjacent! + bestdir = d; + break; + } + + if (wantcheck) { + if (src->lf && canandwillmove(src->lf, d, NULL)) { + ok = B_TRUE; + } else if (!src->lf) { + ok = B_TRUE; + } + } else { + if (src->lf && cellwalkable(src->lf, c, NULL)) { + ok = B_TRUE; + } else if (!src->lf) { + ok = B_TRUE; + } + } + if (ok) { + int thisdist; + thisdist = getcelldist(c, dst); + if (thisdist < mindist) { + mindist = thisdist; + bestdir = d; + } + } + } + + // TODO: handle ties + + return bestdir; +} + + +int moveawayfrom(lifeform_t *lf, cell_t *dst) { + int dir; + int rv = B_TRUE; + // move towards them + dir = getdiraway(lf->cell, dst, B_TRUE); + if (dir != D_NONE) { + rv = trymove(lf, dir); + } + return rv; +} + + + + +// returns TRUE if something happened +int movelf(lifeform_t *lf, cell_t *newcell) { object_t *o,*nexto; char obname[BUFLEN],lfname[BUFLEN],buf[BUFLEN]; + lifeform_t *l; + int didmsg = B_FALSE; + flag_t *f; + // update current cell lf->cell->lf = NULL; + // if required, relink lifeform to new map + if (newcell->map != lf->cell->map) { + if (isplayer(lf)) { + statdirty = B_TRUE; + } + relinklf(lf, newcell->map); + } + // update lifeform lf->cell = newcell; + // nothing should be in new cell.. + assert(!newcell->lf); + // update new cell newcell->lf = lf; + if (isbleeding(lf)) { + if (rnd(1,2) == 1) { + bleed(lf); + } + } + // check ground objects - if (!hasflag(lf->flags, F_FLYING)) { + if (!lfhasflag(lf, F_FLYING)) { for (o = newcell->obpile->first ; o ; o = nexto ) { nexto = o->next; - if (hasflag(o->flags, F_SHARP)) { + f = hasflag(o->flags, F_SHARP); + if (f) { object_t *boots; // has boots on? boots = getequippedob(lf->pack, BP_FEET); @@ -106,16 +297,18 @@ void movelf(lifeform_t *lf, cell_t *newcell) { // we want 'xx steps on some pieces of broken glass' // not 'xx steps on 5 pieces of broken glass' newname = makeplural(obname); - strrep(newname, "a ", "some "); + newname = strrep(newname, "a ", "some ", NULL); strcpy(obname, newname); free(newname); } if (lf->controller == C_PLAYER) { msg("You crush %s underfoot.",obname); + didmsg = B_TRUE; } else if (haslos(player, newcell)) { getlfname(lf, lfname); capitalise(lfname); msg("%s crushes %s.",lfname, obname); + didmsg = B_TRUE; } // kill object removeob(o, o->amt); @@ -124,13 +317,15 @@ void movelf(lifeform_t *lf, cell_t *newcell) { getobname(o, obname, 1); if (lf->controller == C_PLAYER) { msg("Ow - you step on %s!",obname); + didmsg = B_TRUE; } else if (haslos(player, newcell)) { getlfname(lf, lfname); capitalise(lfname); msg("%s steps on %s!",lfname, obname); + didmsg = B_TRUE; } sprintf(buf, "stepping on %s", obname); - losehp(lf, rnd(1,2), DT_SLASH, NULL, buf); + losehp(lf, rnd(f->val[0],f->val[1]), DT_SLASH, NULL, buf); } } } // end foreach object in cell @@ -138,100 +333,474 @@ void movelf(lifeform_t *lf, cell_t *newcell) { // update where player knows // (but without a map you will then slowly forget it) - if (lf->controller == C_PLAYER) { + if (isplayer(lf)) { updateknowncells(); + } + + // does anyone else see you? + for (l = newcell->map->lf ; l ; l = l->next) { + if (l != lf) { + if (haslos(l, newcell)) { + interrupt(lf); + } + } } + return didmsg; } // basically this is a warpper for 'movelf' which // does other game things like telling the player // what is here. int moveto(lifeform_t *lf, cell_t *newcell) { + char lfname[BUFLEN]; + int didmsg; + + getlfname(lf, lfname); // actually do the move - movelf(lf, newcell); + didmsg = movelf(lf, newcell); // tell player about things - if (!isdead(lf) && (lf->controller == C_PLAYER)) { - int numobs; - char buf[BUFLEN]; - numobs = countobs(newcell->obpile); - if (numobs == 1) { - getobname(newcell->obpile->first, buf, newcell->obpile->first->amt); - msg("You see %s here.", buf); - } else if ((numobs > 1) && (numobs <= 3)) { - msg("You see a few objects here."); - } else if ((numobs > 3) && (numobs <= 6)) { - msg("You see some objects here."); - } else if (numobs > 6) { - msg("You see many objects here."); - } else { - // just clear the message buffer - clearmsg(); - } - } -} - -int opendoor(lifeform_t *lf, cell_t *cell) { - char buf[BUFLEN]; - if (cell->type->id == CT_DOORCLOSED) { - // open it - setcelltype(cell, CT_DOOROPEN); - if (lf->controller == C_PLAYER) { - msg("You open a door."); - } else { - // TODO: only announce if player can see it - if (haslos(player, cell)) { - getlfname(lf, buf); - capitalise(buf); - msg("%s opens a door.",buf); + if (!isdead(lf)) { + // some lifeforms can go through things + if (lf->race->material->id == MT_GAS) { + object_t *o; + char obname[BUFLEN]; + for (o = newcell->obpile->first ; o ; o = o->next) { + if (hasflag(o->flags, F_IMPASSABLE)) { + getobname(o, obname, o->amt); + if (isplayer(lf)) { + msg("You seep around %s.", obname); + } else if (haslos(player, newcell)) { + msg("%s seeps around %s.", lfname, obname); + } + } + } + } else if (lf->race->material->id == MT_SLIME) { + object_t *o; + char obname[BUFLEN]; + for (o = newcell->obpile->first ; o ; o = o->next) { + if (hasflag(o->flags, F_IMPASSABLE)) { + getobname(o, obname, o->amt); + if (isplayer(lf)) { + msg("You seep under %s.", obname); + } else if (haslos(player, newcell)) { + msg("%s seeps under %s.", lfname, obname); + } + } } } - taketime(lf, getmovespeed(lf)); + + // see objects on ground + if (isplayer(lf)) { + int numobs; + numobs = countobs(newcell->obpile); + if ((numobs == 0) && !newcell->writing) { + // just clear the message buffer + if (!didmsg) clearmsg(); + } else { // tell player what is here + dolook(newcell); + } + } + } + return B_FALSE; +} + +int movetowards(lifeform_t *lf, cell_t *dst) { + int dir; + int rv = B_TRUE; + // move towards them + dir = getdirtowards(lf->cell, dst, B_TRUE); + if (dir != D_NONE) { + rv = trymove(lf, dir); + } + return rv; +} + +int opendoorat(lifeform_t *lf, cell_t *c) { + object_t *o; + int rv; + o = hasobwithflag(c->obpile, F_DOOR); + if (o) { + rv = opendoor(lf, o); } else { + rv = B_TRUE; + } + return rv; +} + +int opendoor(lifeform_t *lf, object_t *o) { + cell_t *doorcell; + char buf[BUFLEN]; + char obname[BUFLEN]; + flag_t *f; + + doorcell = o->pile->where; + assert(doorcell); + + + getobname(o, obname, 1); + + if (!isdoor(o, NULL)) { return B_TRUE; } + if (lf && lfhasflagval(lf, F_NOBODYPART, BP_HANDS, NA, NA, NULL)) { + if (isplayer(lf)) { + msg("You have no hands with which to open the door!"); + } + return B_TRUE; + } + + f = hasflag(o->flags, F_OPEN); + if (f) { + if (lf && isplayer(lf)) { + msg("It is already open!"); + } + return B_TRUE; + } else { + // locked? + if (hasflag(o->flags, F_LOCKED)) { + if (lf && isplayer(lf)) { + msg("The door is locked."); + } + return B_TRUE; + } else { + // open it + addflag(o->flags, F_OPEN, B_TRUE, NA, NA, NULL); + + f = hasflag(o->flags, F_IMPASSABLE); + if (f) killflag(f); + f = hasflag(o->flags, F_BLOCKSVIEW); + if (f) killflag(f); + + if (lf) { + if (lf->controller == C_PLAYER) { + msg("You open %s.",obname); + } else { + if (haslos(player, lf->cell) && isadjacent(lf->cell, doorcell)) { + getlfname(lf, buf); + capitalise(buf); + msg("%s opens %s.",buf, obname); + } else if (haslos(player, doorcell)) { + capitalise(obname); + msg("%s opens.",obname); + } + } + taketime(lf, getmovespeed(lf)); + + touch(lf, o); + } + } + } + + return B_FALSE; +} + +int closedoorat(lifeform_t *lf, cell_t *c) { + object_t *o; + int rv; + o = hasobwithflag(c->obpile, F_DOOR); + if (o) { + rv = closedoor(lf, o); + } else { + rv = B_TRUE; + } + return rv; +} + +int closedoor(lifeform_t *lf, object_t *o) { + cell_t *cell; + char buf[BUFLEN]; + char obname[BUFLEN]; + flag_t *f; + + getobname(o, obname, 1); + + if (!isdoor(o, NULL)) { + if (isplayer(lf)) { + msg("There is nothing to close there!"); + } + return B_TRUE; + } + + if (lf && lfhasflagval(lf, F_NOBODYPART, BP_HANDS, NA, NA, NULL)) { + if (isplayer(lf)) { + msg("You have no hands with which to close the door!"); + } + return B_TRUE; + } + + f = hasflag(o->flags, F_OPEN); + if (!f) { + if (lf && (lf->controller == C_PLAYER)) { + msg("It is already closed!"); + } + return B_TRUE; + } else { + // close it + killflag(f); + addflag(o->flags, F_IMPASSABLE, B_TRUE, NA, NA, NULL); + addflag(o->flags, F_BLOCKSVIEW, B_TRUE, NA, NA, NULL); + + if (lf) { + if (lf->controller == C_PLAYER) { + msg("You close %s.", obname); + } else { + if (haslos(player, lf->cell) && isadjacent(lf->cell, cell)) { + getlfname(lf, buf); + capitalise(buf); + msg("%s closes %s.",buf, obname); + } else if (haslos(player, cell)) { + capitalise(obname); + msg("%s closes.",obname); + } + } + taketime(lf, getmovespeed(lf)); + touch(lf, o); + } + } + return B_FALSE; } int tryrun(lifeform_t *lf, int dir) { - // continue moving until we fail - while (canmove(lf, dir, NULL)) { - trymove(lf,dir); + if (!trymove(lf, dir)) { + addflag(lf->flags, F_RUNNING, dir, NA, NA, NULL); } + return B_FALSE; } -int trymove(lifeform_t *lf, int dir) { - cell_t *cell; - enum ERROR errcode; - char buf[BUFLEN], buf2[BUFLEN]; +// try to pull lifeform towards cell c (or next to it) +int pullnextto(lifeform_t *lf, cell_t *c) { + int dir; + cell_t *dst = NULL; - cell = getcellindir(lf->cell, dir); - if (canmove(lf, dir, &errcode)) { - moveto(lf, cell); - taketime(lf, getmovespeed(lf)); - } else { - switch (errcode) { - case E_WALLINWAY: - // is it a door in the way? - if (cell->type->id == CT_DOORCLOSED) { - // try to open it - opendoor(lf, cell); - } else { - if (lf->controller == C_PLAYER) { - msg("Ouch! You walk into a wall."); - } - } - break; - case E_LFINWAY: - // attack! - doattack(lf, cell->lf); - break; + dst = c; + + while (dst->lf) { + dir = getdirtowards(dst, lf->cell, B_FALSE); + if (dir == D_NONE) { + return B_TRUE; + } else { + dst = getcellindir(dst, dir); + if (dst == lf->cell) { + return B_TRUE; + } } + } + + // is the path clear? + if (!dst || !haslof(lf, dst)) { return B_TRUE; } + if (isplayer(lf) || haslos(player, lf->cell)) { + char buf[BUFLEN]; + getlfname(lf, buf); + msg("%s %s pulled %s!", buf, isplayer(lf) ? "are" : "is", + lfhasflag(lf, F_FLYING) ? "through the air" : + "along the ground"); + } + movelf(lf, dst); + return B_FALSE; +} + +// teleport somewhere, along with puffs of smoke etc +int teleportto(lifeform_t *lf, cell_t *c) { + char buf[BUFLEN]; + if (!isplayer(lf) && haslos(player, lf->cell)) { + getlfname(lf, buf); + msg("%s disappears in a puff of smoke!", buf); + } + addob(lf->cell->obpile, "puff of smoke"); + movelf(lf, c); + addob(lf->cell->obpile, "cloud of smoke"); + if (isplayer(lf)) { + msg("Suddenly, your surroundings appear different!"); + } else if (haslos(player, lf->cell)) { + getlfname(lf, buf); + msg("%s appears in a cloud of smoke!", buf); + } + // show any objects here, just like if we moved. + // BUT don't let dolook() clear the msg bar if there are + // no objects here. + if (isplayer(lf) && countobs(lf->cell->obpile)) { + dolook(lf->cell); + } return B_FALSE; } +int trymove(lifeform_t *lf, int dir) { + cell_t *cell; + enum ERROR errcode; + char buf[BUFLEN]; + + cell = getcellindir(lf->cell, dir); + if (canandwillmove(lf, dir, &errcode)) { + reason = E_OK; + moveto(lf, cell); + taketime(lf, getmovespeed(lf)); + } else { + object_t *inway; + int door, dooropen; + reason = errcode; + switch (errcode) { + case E_WALLINWAY: + if (isplayer(lf)) { + msg("Ouch! You %s into a wall.", getmoveverb(lf)); + } else if (haslos(player, lf->cell)) { + getlfname(lf, buf); + msg("%s %ss into a wall.", buf, getmoveverb(lf)); + } + if (isblind(lf)) { + if (isplayer(lf)) { + // only take damage if we didn't know about this + if (!cell->known) { + sprintf(buf, "%sing into a wall", getmoveverb(lf)); + losehp(lf, 1, DT_BASH, NULL, buf); + cell->known = B_TRUE; + taketime(lf, getmovespeed(lf)); + } + } else { + sprintf(buf, "%sing into a wall", getmoveverb(lf)); + losehp(lf, 1, DT_BASH, NULL, buf); + taketime(lf, getmovespeed(lf)); + } + } + break; + case E_OBINWAY: + inway = (object_t *)rdata; + door = isdoor(inway, &dooropen); + if (door && !dooropen) { + if (isblind(lf)) { + // run into it + if (isplayer(lf)) { + if (cell->known) { + // try to open it + opendoor(lf, inway); + } else { + msg("Ouch! You %s into a door.", getmoveverb(lf)); + cell->known = B_TRUE; + sprintf(buf, "%sing into a door", getmoveverb(lf)); + losehp(lf, 1, DT_BASH, NULL, buf); + taketime(lf, getmovespeed(lf)); + } + } else { + if (haslos(player, lf->cell)) { + getlfname(lf, buf); + msg("%s %ss into a wall.", buf, getmoveverb(lf)); + } + sprintf(buf, "%sing into a door", getmoveverb(lf)); + losehp(lf, 1, DT_BASH, NULL, buf); + taketime(lf, getmovespeed(lf)); + } + } else { + // try to open it + opendoor(lf, inway); + } + } else { + // can we push this? + if (ispushable(inway)) { + if (canpush(lf, inway, dir)) { + // push it! + push(lf, inway, dir); + } else { + if (lf->controller == C_PLAYER) { + char obname[BUFLEN]; + getobname(inway, obname, 1); + switch (reason) { + case E_TOOHEAVY: + msg("The %s is too heavy to move.",strchr(obname, ' ')+1); + break; + case E_INSUBSTANTIAL: + msg("You cannot push %s without a physical body!",strchr(obname, ' ')+1); + break; + default: + msg("The %s won't move for some reason.",strchr(obname, ' ')+1); + break; + } + } + } + } else { // object is in the way + if (lf->controller == C_PLAYER) { + char obname[BUFLEN]; + getobname(inway, obname, 1); + msg("There is %s in your way.",obname); + } + } + } + break; + case E_LFINWAY: + // attack! + return attacklf(lf, cell->lf); + break; + case E_GRAVBOOSTED: + if (isplayer(lf)) { + msg("You try to move but are unable to lift your feet!"); + taketime(lf, getmovespeed(lf)); + } + break; + default: + break; + } + if (reason == E_OK) { + return B_FALSE; + } else { + return B_TRUE; + } + } + return B_FALSE; +} + + +int willmove(lifeform_t *lf, int dir, enum ERROR *error) { + cell_t *cell; + object_t *o; + enum IQBRACKET iq; + + // default + if (error) { + *error = E_OK; + rdata = NULL; + } + + cell = getcellindir(lf->cell, dir); + // check for cursed objects + animals + for (o = cell->obpile->first ; o ; o = o->next) { + if (!isplayer(lf)) { + if (o->blessed == B_CURSED) { + if (lfhasflag(lf, F_ANIMAL)) { + if (!lfhasflag(lf, F_FLYING)) { + return B_FALSE; + } + } + } + } + } + + // check for dangerous objects + iq = getiqname(getattr(lf, A_IQ), NULL); + if (iq >= IQ_AVERAGE) { + flag_t *f; + object_t *o; + for (o = cell->obpile->first ; o ; o = o->next) { + // don't walk on sharp objects without boots + if (hasflag(o->flags, F_SHARP)) { + if (!getequippedob(lf->pack, BP_FEET)) { + return B_FALSE; + } + } + f = hasflag(o->flags, F_WALKDAM); + if (f) { + // are we immune to this? + if (!lfhasflagval(lf, F_DTIMMUNE, f->val[1], NA, NA, NULL)) { + return B_FALSE; + } + } + } + } + + return B_TRUE; +} + diff --git a/move.h b/move.h index 2d6f366..5affd94 100644 --- a/move.h +++ b/move.h @@ -1,8 +1,21 @@ #include "defs.h" +int canandwillmove(lifeform_t *lf, int dir, enum ERROR *error); int canmove(lifeform_t *lf, int dir, enum ERROR *error); +int cellwalkable(lifeform_t *lf, cell_t *cell, enum ERROR *error); +int closedoorat(lifeform_t *lf, cell_t *c); +int closedoor(lifeform_t *lf, object_t *o); void dorandommove(lifeform_t *lf, int badmovesok); -int dowait(lifeform_t *lf); -void movelf(lifeform_t *lf, cell_t *newcell); +int getdiraway(cell_t *src, cell_t *dst, int wantcheck); +int getdirtowards(cell_t *src, cell_t *dst, int wantcheck); +int moveawayfrom(lifeform_t *lf, cell_t *dst); +int movelf(lifeform_t *lf, cell_t *newcell); int moveto(lifeform_t *lf, cell_t *newcell); +int movetowards(lifeform_t *lf, cell_t *dst); +int opendoorat(lifeform_t *lf, cell_t *c); +int opendoor(lifeform_t *lf, object_t *o); +int pullnextto(lifeform_t *lf, cell_t *c); +int teleportto(lifeform_t *lf, cell_t *c); int trymove(lifeform_t *lf, int dir); +int tryrun(lifeform_t *lf, int dir); +int willmove(lifeform_t *lf, int dir, enum ERROR *error); diff --git a/nexus.c b/nexus.c index fdf8057..c7e0f82 100644 --- a/nexus.c +++ b/nexus.c @@ -1,38 +1,77 @@ +#include #include #include #include #include +#include +#include "ai.h" +#include "attack.h" #include "io.h" +#include "flag.h" #include "lf.h" #include "map.h" +#include "move.h" #include "nexus.h" #include "objects.h" #include "save.h" +#include "text.h" material_t *material = NULL,*lastmaterial = NULL; objectclass_t *objectclass = NULL,*lastobjectclass = NULL; objecttype_t *objecttype = NULL,*lastobjecttype = NULL; celltype_t *firstcelltype = NULL,*lastcelltype = NULL; race_t *firstrace = NULL,*lastrace = NULL; +job_t *firstjob = NULL,*lastjob = NULL; map_t *firstmap = NULL,*lastmap = NULL; knowledge_t *knowledge = NULL, *lastknowledge = NULL; +// maintains unique lifeform ID numbers +long nextlfid = 0; + +int SCREENW = DEF_SCREENW; +int SCREENH = DEF_SCREENH; + +// object return list +object_t *retobs[MAXPILEOBS+1]; +int retobscount[MAXPILEOBS+1]; +int nretobs = 0; + FILE *logfile; +prompt_t prompt; + +char msghist[MAXHISTORY][BUFLEN]; +int nmsghist = 0; + enum ERROR reason; // global for returning errors +void *rdata; // globel for returning data lifeform_t *player = NULL; int gameover; int gamestarted = B_FALSE; -int main(char **argv, int argc) { +long curtime = 0; +long timeleft = 0; + +extern int statdirty; + +int needredraw = B_TRUE; +int numdraws = 0; + + +int main(int argc, char **argv) { int newworld = B_FALSE; + object_t *o; atexit(cleanup); // init params - init(); + if (init()) { + exit(1); + } + + // load whatever maps are available loadall(); @@ -44,25 +83,60 @@ int main(char **argv, int argc) { if (!firstmap) { newworld = B_TRUE; addmap(); - createmap(firstmap, H_DUNGEON); + createmap(firstmap, 1, H_DUNGEON, NULL, findot(OT_STAIRSUP)); } if (!knowledge) { - // populate scroll names + // populate scroll, potion, etc names genhiddennames(); } // if no player (ie. didn't load a game), add them if (!player) { + char *user; + char pname[BUFLEN]; + job_t *j; + char ch; + cell_t *where; + + // ask for race + initprompt(&prompt, "Select your race:"); + ch = 'a'; + for (j = firstjob ; j ; j = j->next) { + addchoice(&prompt, ch++, j->name, NULL, j); + } + j = NULL; + while (!j) { + getchoice(&prompt); + j = prompt.result; + } + + // find staircase + where = findobinmap(firstmap, OT_STAIRSUP); + assert(where); // add player - player = addlf(getrandomcelloftype(firstmap, CT_ROOM), R_HUMAN, 1); - player->controller = C_PLAYER; + real_addlf(where, R_HUMAN, 1, C_PLAYER); // this will assign 'player' + + user = getenv("USER"); + if (user) { + addflag(player->flags, F_NAME, NA, NA, NA, getenv("USER")); + } else { + addflag(player->flags, F_NAME, NA, NA, NA, "Anonymous"); + } + givejob(player, j->id); + + // player needs hunger + addflag(player->flags, F_HUNGER, 0, NA, NA, NULL); + drawscreen(); - msg("Welcome to %snexus!", newworld ? "the new " : ""); + getplayernamefull(pname); + msg("Greetings %s, welcome to %snexus!", pname, newworld ? "the new " : ""); more(); // XXX testing //addlf(getcellindir(player->cell, D_N), R_GOBLIN, 1); + // 00:00 - 23:59 + curtime = rnd(0,86399); } else { drawscreen(); msg("Welcome back!"); @@ -73,38 +147,71 @@ int main(char **argv, int argc) { // start game - this will cause debug messages to now // go to the log file instead of stdout. gamestarted = B_TRUE; + timeleft = 0; // reset game timer + // calculate initial light + calclight(player->cell->map); + // pre-calc line-of-sight for player + precalclos(player); // show level drawscreen(); // MAIN LOOP + + // basic flow is: + // + // donextturn() - process a turn for a lifeform + // turneffectslf() Rest effects, Damage from floor objects, etc + // lifeform takes action + // checkdeath() - check for object/player death. remove dead things. + // timeeffectsworld() Fires burn out, ice melts, etc + // Also keeps lf->timespent values under control. + // + // + // redraw screen + // + // checkendgame() - has the game ended yet? + + gameover = B_FALSE; while (!gameover) { + map_t *curmap; + curmap = player->cell->map; + + // default to no redraw - donextturn() will change this if needed. + needredraw = B_FALSE; + numdraws = 0; + + // someone has a turn - this will then call taketime -> timehappens(); + donextturn(curmap); - // someone has a turn - donextturn(player->cell->map); // update lifeform structue to figure out who goes next - sortlf(player->cell->map); + //timehappens(curmap); - // TODO: monsters move etc - - // check for death etc - doeffects(); - - // show level + // show level (if required) + //if (haslos(player, curmap->lf->cell)) { drawscreen(); + //dblog("**** END of turn, numdraws = %d", numdraws); + // check end of game checkendgame(); } + // identify all objects + for (o = player->pack->first ; o ; o = o->next) { + identify(o); + } + // show possessions + dofinaloblist(player->pack); // print tombstone tombstone(player); + return B_FALSE; } -celltype_t *addcelltype(int id, char glyph, int solid, int transparent) { +celltype_t *addcelltype(int id, char *name, char glyph, int solid, int transparent, enum MATERIAL mat) { celltype_t *a; // add to the end of the list @@ -124,11 +231,47 @@ celltype_t *addcelltype(int id, char glyph, int solid, int transparent) { // set props a->id = id; + a->name = strdup(name); a->glyph = glyph; a->solid = solid; a->transparent = transparent; + a->material = findmaterial(mat); + + a->flags = addflagpile(NULL, NULL); + + return a; } +void checkdeath(void) { + lifeform_t *lf, *nextlf; + int x,y; + for (lf = player->cell->map->lf; lf ; lf = nextlf) { + nextlf = lf->next; + + // check for death + if (lf->hp <= 0) { + // die! + die(lf); + continue; + } + // check for object death + removedeadobs(lf->pack); + } + + // check for object death on map + for (y = 0; y < player->cell->map->h; y++) { + for (x = 0; x < player->cell->map->w; x++) { + cell_t *c; + c = getcellat(player->cell->map, x, y); + if (c) { + removedeadobs(c->obpile); + } + } + } + +} + + void checkendgame(void) { if (!player->alive) { gameover = B_TRUE; @@ -141,38 +284,94 @@ void cleanup(void) { } -void doeffects(void) { - lifeform_t *lf; - // check for death - for (lf = player->cell->map->lf; lf ; lf = lf->next) { - if (lf->hp <= 0) { - // die! - die(lf); - } - } - -} - void donextturn(map_t *map) { lifeform_t *who; - // show messages to plaeyr - drawmsg(); - who = map->lf; - if (who->controller == C_PLAYER) { - drawcursor(); - // find out what player wants to do - handleinput(); - } else { - // TODO: do ai move - aimove(who); +dblog("**** donextturn for: id %d %s", who->id, who->race->name); + + + turneffectslf(who); + + // calculate light + calclight(map); + // pre-calculate line of sight for this lifeform + precalclos(who); + + if (isplayer(who) || haslos(player, who->cell)) { + needredraw = B_TRUE; } + // update gun targets + autotarget(who); + + + assert(who->timespent == 0); + // keep looping until they actually do something or are dead! + while (who->timespent == 0) { + if (isdead(who)) { + // skip turn + taketime(who, SPEED_DEAD); + } else { + // do we need to run away from something? + if (!flee(who)) { + int donormalmove = B_TRUE; + flag_t *f; + + if (donormalmove) { + // paralyzed? + f = hasflag(who->flags, F_PARALYZED); + if (f) { + rest(who, B_FALSE); + donormalmove = B_FALSE; + } + } + + // resting? + if (donormalmove) { + f = hasflag(who->flags, F_RESTING); + if (f) { + if (who->hp < who->maxhp) { + rest(who, B_TRUE); + donormalmove = B_FALSE; + } else { + killflag(f); + if (isplayer(who)) msg("You finish resting."); + } + } + } + + if (donormalmove) { + if (isplayer(who)) { + drawcursor(); + // find out what player wants to do + handleinput(); + } else { + // do ai move + aimove(who); + } + } + } + } + } + + if (isdead(who) || haslos(player, who->cell)) { + needredraw = B_TRUE; + } + + // check for death etc + checkdeath(); + + ////////////////////////////////// + // effects which happen every GAME TICK + // ie. object hp drain etc + ////////////////////////////////// + timeeffectsworld(map); + // everyone else's time goes down by 1 - for (who = map->lf->next ; who ; who = who->next ){ - if (who->timespent > 0) who->timespent--; - } + //for (who = map->lf->next ; who ; who = who->next ){ + // if (who->timespent > 0) who->timespent--; + //} } celltype_t *findcelltype(int id) { @@ -196,6 +395,10 @@ char *getdirname(int dir) { return "South"; case D_W: return "West"; + case D_UP: + return "up"; + case D_DOWN: + return "down"; case D_UNKNOWN: return "D_UNKNOWN"; case D_NONE: @@ -204,27 +407,45 @@ char *getdirname(int dir) { return "?errordir?"; } +void getrarity(int depth, int *min, int *max, int range) { + int mid; + mid = 100 - (depth * 3); + *min = mid - range; if (*min < 0) *min = 0; + *max = mid + range; if (*max > 100) *max = 100; + + if (*min > 75) *min = 75; + if (*max < 25) *max = 25; +} + int init(void) { // random numbers srand(time(NULL)); + + initobjects(); + initjobs(); + initrace(); + + // cell types + addcelltype(CT_WALL, "rock wall", '#', B_SOLID, B_OPAQUE, MT_STONE); + addcelltype(CT_ROOMWALL, "rock wall", '#', B_SOLID, B_OPAQUE, MT_STONE); + addcelltype(CT_CORRIDOR, "rock floor", '.', B_EMPTY, B_TRANS, MT_STONE); + addcelltype(CT_LOOPCORRIDOR, "rock floor", 'L', B_EMPTY, B_TRANS, MT_STONE); + addcelltype(CT_ROOM, "rock floor", '.', B_EMPTY, B_TRANS, MT_STONE); + //addcelltype(CT_DOOROPEN, "wooden door", '-', B_EMPTY, B_TRANS, MT_WOOD); + //addcelltype(CT_DOORCLOSED, "wooden door", '+', B_SOLID, B_OPAQUE, MT_WOOD); + + if (validateobs()) { + return B_TRUE; + } + if (validateraces()) { + return B_TRUE; + } + // open log file logfile = fopen("log.txt","wt"); fprintf(logfile, "\n\n\n====== NEW LOGFILE ====\n"); - // cell types - addcelltype(CT_WALL, '#', B_SOLID, B_OPAQUE); - addcelltype(CT_ROOMWALL, '#', B_SOLID, B_OPAQUE); - addcelltype(CT_CORRIDOR, '.', B_EMPTY, B_TRANS); - addcelltype(CT_LOOPCORRIDOR, 'L', B_EMPTY, B_TRANS); - addcelltype(CT_ROOM, '.', B_EMPTY, B_TRANS); - addcelltype(CT_DOOROPEN, '-', B_EMPTY, B_TRANS); - addcelltype(CT_DOORCLOSED, '+', B_SOLID, B_OPAQUE); - - initobjects(); - - initrace(); - return B_FALSE; } @@ -237,6 +458,10 @@ int isplayerturn(void) { return B_FALSE; } +float pctof(float pct, float num) { + return ((pct / 100.0) * num); +} + // get a random number between min and max int rnd(int min, int max) { int res; @@ -254,70 +479,220 @@ int rolldie(int ndice, int sides) { return res; } -// sort map's lifeform list by time spent +int rollhitdice(lifeform_t *lf) { + flag_t *f; + int ndice, plus; + int roll; + + f = hasflag(lf->flags, F_HITDICE); + if (f) { + ndice = f->val[0]; + if (f->val[1] == NA) plus = 0; + else plus = f->val[1]; + } else { + ndice = 1; + plus = 0; + } + roll = rolldie(ndice, 4) + plus; + return roll; +} + +int rollmpdice(lifeform_t *lf) { + flag_t *f; + int ndice, plus; + int roll; + + f = hasflag(lf->flags, F_MPDICE); + if (f) { + ndice = f->val[0]; + if (f->val[1] == NA) plus = 0; + else plus = f->val[1]; + } else { + return 0; + } + roll = rolldie(ndice, 4) + plus; + return roll; +} + +/* void sortlf(map_t *map) { int donesomething; - lifeform_t *l; - int adjustby; - int db = B_TRUE; + int db = B_FALSE; + lifeform_t *l,*nextl; + int iter = 0; // bubblesort - /* - if (db) { - dblog("BEFORE sortlf():"); - for (l = map->lf ; l ; l = l->next) { - dblog("- %s (timespent= %d) (sorted=%d)", (l == player) ? "player" : l->race->name, l->timespent,l->sorted); - } - } - */ - donesomething = B_TRUE; +dblog("doing sort..."); while (donesomething) { donesomething = B_FALSE; - for (l = map->lf ; l ; l = l->next) { - if (!l->sorted && l->next && (l->timespent > l->next->timespent) ) { + +//dblog("ITER %d",iter++); + if (db) { + dblog("ITER %d",iter++); + for (l = map->lf ; l ; l = l->next) { + dblog("- %s (timespent= %d) (sorted=%d)", (l == player) ? "player" : l->race->name, l->timespent,l->sorted); + } + } + + + for (l = map->lf ; l->next ; l = nextl) { + nextl = l->next; + //if (!l->sorted && (l->timespent >= l->next->timespent) ) { + if (l->sorted) { +//dblog("skipping id %d %s, already sorted ",l->id, l->race->name); + continue; + } + + if (l->timespent >= l->next->timespent) { lifeform_t *temp; +//dblog("moving id %d %s upwards",l->id, l->race->name); // remember next element temp = l->next; // remove this element from list + // don't bother checking if (l->next == NULL) as we know + // this won't be true due to the for loop condition if (l->prev == NULL) { // first map->lf = l->next; + l->next->prev = NULL; } else { // not first l->prev->next = l->next; + l->next->prev = l->prev; + } + + // TESTING: re-add at correct position. + while (temp->next && (temp->next->timespent <= l->timespent)) { +//dblog("moving past %d %s (timespend=%d)...",temp->next->id, temp->next->race->name, temp->next->timespent); + temp = temp->next; } - // don't bother checking for next - we know ther eis one. - l->next->prev = l->prev; // re-add element afterwards l->next = temp->next; l->prev = temp; temp->next = l; - if (l->next == NULL) map->lastlf = l; + if (l->next == NULL) { + map->lastlf = l; + } else { + l->next->prev = l; + } + + l->sorted = B_TRUE; donesomething = B_TRUE; + break; } else { l->sorted = B_TRUE; } } } +//dblog("finished sort."); + + // reset sorted var for next time + for (l = map->lf ; l->next ; l = l->next) { + l->sorted = B_FALSE; + } + + // sanity check + if (player->next) { + assert(player->next->prev == player); + } + if (player->prev) { + assert(player->prev->next == player); + } if (db) { dblog("AFTER SORT:"); for (l = map->lf ; l ; l = l->next) { - if (haslos(player, l->cell)) { + // if (haslos(player, l->cell)) { dblog("- %s (timespent= %d) (sorted=%d)", (l == player) ? "player" : l->race->name, l->timespent,l->sorted); - } + // } } } - // now go through the list and make the first element be 0 - adjustby = map->lf->timespent; - for (l = map->lf ; l ; l = l->next) { - l->timespent -= adjustby; - l->sorted = B_FALSE; - } - +} +*/ + +void timeeffectsworld(map_t *map) { + lifeform_t *l; + int db = B_TRUE; + object_t *o,*nexto; + int x,y; + long firstlftime; + + // now go through the list and make the first element be 0 + l = map->lf; + + if (l) { + // if (db) dblog("first lf is: %s (id %ld)\n",l->race->name, l->id); + firstlftime = l->timespent; + assert(firstlftime >= 0); + } else { + dblog("no lifeforms on map!\n"); + // no first lf! + firstlftime = 0; + } + + //if (db) dblog("timespent = %d\n", timespent); + dblog("firstlftime = %d\n", firstlftime); + + if (firstlftime > 0) { + dblog("making firstlf timespent = 0 (currently %d):", firstlftime); + //dumplf(); + for (l = map->lf ; l ; l = l->next) { + //dblog("shuffling id %d %s timespent=%d -> %d",l->id,l->race->name, l->timespent, l->timespent - firstlftime); + l->timespent -= firstlftime; + assert(l->timespent >= 0); + if (isplayer(l)) { + statdirty = B_TRUE; + } + + } + //dblog("after shuffle:"); + //dumplf(); + } else { + dblog("firstlf timespent is not greater than 0. no shuffle."); + } + + timeleft += firstlftime; + // now do effects based on time... + while (timeleft >= TICK_INTERVAL) { + + timeleft -= TICK_INTERVAL; + + // global time-based effects on map or map objects + for (y = 0; y < map->h; y++) { + for (x = 0; x < map->w; x++) { + cell_t *c; + c = getcellat(map, x, y); + if (c) { + // go through each object in the cell... + for (o = c->obpile->first ; o ; o = nexto) { + nexto = o->next; + + timeeffectsob(o); + } // end foreach object here + } + } + } // end for (y... + + // now handle effects on lifeforms and/or their objects + for (l = map->lf ; l ; l = l->next) { + timeeffectslf(l); + for (o = l->pack->first ; o ; o = nexto) { + nexto = o->next; + timeeffectsob(o); + } + } + + //dblog("AFTER SORT AND ADJUST....."); + //dumplf(); + } // end if timespent + + // inc game time + curtime += firstlftime; + + if (db) dblog("cur time is %ld\n",curtime); } diff --git a/nexus.h b/nexus.h index 6bb708f..4e0e3fc 100644 --- a/nexus.h +++ b/nexus.h @@ -1,14 +1,19 @@ #include "defs.h" -celltype_t *addcelltype(int id, char glyph, int solid, int transparent); +celltype_t *addcelltype(int id, char *name, char glyph, int solid, int transparent, enum MATERIAL mat); +void checkdeath(void); void checkendgame(void); void cleanup(void); -void doeffects(void); void donextturn(map_t *map); celltype_t *findcelltype(int id); char *getdirname(int dir); +void getrarity(int depth, int *min, int *max, int range); int init(void); int isplayerturn(void); +float pctof(float pct, float num); int rnd(int min, int max); int rolldie(int ndice, int sides); -void sortlf(map_t *map); +int rollhitdice(lifeform_t *lf); +int rollmpdice(lifeform_t *lf); +//void sortlf(map_t *map); +void timeeffectsworld(map_t *map); diff --git a/object_ideas.txt b/object_ideas.txt new file mode 100644 index 0000000..65fae4f --- /dev/null +++ b/object_ideas.txt @@ -0,0 +1,9 @@ +hay +pebbles +torch +boulder / monolith / statue +shackles +chain +bone +skeleton +scrap of material diff --git a/objects.c b/objects.c index f781ea2..daffee9 100644 --- a/objects.c +++ b/objects.c @@ -1,11 +1,17 @@ #include +#include #include #include #include #include +#include "attack.h" #include "defs.h" #include "flag.h" +#include "io.h" +#include "lf.h" #include "map.h" +#include "move.h" +#include "nexus.h" #include "objects.h" #include "spell.h" #include "text.h" @@ -15,34 +21,77 @@ extern objecttype_t *objecttype,*lastobjecttype; extern objectclass_t *objectclass,*lastobjectclass; extern material_t *material,*lastmaterial; +extern object_t *retobs[MAXPILEOBS+1]; +extern int retobscount[MAXPILEOBS+1]; +extern int nretobs; + extern map_t *firstmap; extern int gamestarted; +extern long curtime; + extern lifeform_t *player; extern int reason; +extern int needredraw; + char *scrollname[] = { - "scroll named MAXIMOR BLATHUS", - "scroll named REZZ KINETO", - "scroll named CRATOL LEM", + "scroll titled ABRA CA DABRA", + "scroll titled BARBAR", + "scroll titled CRATOL JEM", + "scroll titled DELENTH YIN", + "scroll titled ETEE NOM", + "scroll titled FIE JOOHM", + "scroll titled GREE VII", + "scroll titled MARIGON", + "scroll titled MAXIMOR BLATHUS", + "scroll titled REZZ KINETO", + "scroll titled SHAZZARIO", + "scroll titled THERIUM LARGOS", + "scroll titled VOLTR YI MEN", + "scroll titled ZAREL NOR", NULL }; int numscrollnames; char *potionname[] = { - "red potion", - "orange potion", - "yellow potion", - "green potion", + // colours + "aqua potion", + "azure potion", "blue potion", + "brown potion", + "clear potion", + "cyan potion", + "green potion", "indigo potion", + "luminous potion", // should produce light + "magenta potion", + "orange potion", + "red potion", "violet potion", + "yellow potion", + // other descriptions + "bubbling potion", + "fizzy potion", + "gluggy potion", + "steaming potion", NULL }; int numpotnames; +char *ringname[] = { + // gems + "ruby ring", + "diamond ring", + "emerald ring", + "silver ring", + "gold ring", + NULL +}; +int numringnames; + char letorder[MAXPILEOBS] = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' @@ -51,20 +100,57 @@ char letorder[MAXPILEOBS] = { objecttype_t *lastot = NULL; enum OBCLASS sortorder[] = { + OC_EFFECT, + OC_DFEATURE, OC_MONEY, OC_WEAPON, OC_ARMOUR, - OC_SCROLL, OC_POTION, + OC_SCROLL, OC_FOOD, + OC_CORPSE, + OC_RING, + OC_TECH, OC_ROCK, OC_MISC, - // omitting OC_SPELL because it shouldn't ever be displayed + // omitting OC_SPELL and OC_JUMP because it shouldn't ever be displayed OC_NULL }; long nextoid = 0; + +object_t *addemptyob(obpile_t *where, object_t *o) { + char buf[BUFLEN]; + object_t *empty; + // determine what kind of empty container to drop + if (strstr(o->type->name, "vial")) { + strcpy(buf, "empty vial"); + } else { + strcpy(buf, "empty flask"); + } + + empty = addob(where, buf); + if (!empty) { + // try to drop on ground + if (where->owner) { + empty = addob(where->owner->cell->obpile, buf); + if (empty) { + char emptyname[BUFLEN]; + getobname(empty, emptyname, 1); + if (isplayer(where->owner)) { + msg("You drop the %s on the ground.", noprefix(emptyname)); + } else if (haslos(player, where->owner->cell)) { + getlfname(where->owner, buf); + capitalise(buf); + msg("%s drops the %s on the ground.", buf, noprefix(emptyname)); + } + } + } + } + return empty; +} + knowledge_t *addknowledge(enum OBCLASS id, char *hiddenname, int known) { knowledge_t *a; @@ -93,7 +179,7 @@ knowledge_t *addknowledge(enum OBCLASS id, char *hiddenname, int known) { -material_t *addmaterial(enum MATERIAL id, char *name) { +material_t *addmaterial(enum MATERIAL id, char *name, float weightrating) { material_t *a; // add to the end of the list @@ -114,6 +200,10 @@ material_t *addmaterial(enum MATERIAL id, char *name) { // props a->id = id; a->name = strdup(name); + a->weightrating = weightrating; + + a->flags = addflagpile(NULL, NULL); + return a; } objectclass_t *addoc(enum OBCLASS id, char *name, char *desc, char glyph) { @@ -139,7 +229,7 @@ objectclass_t *addoc(enum OBCLASS id, char *name, char *desc, char glyph) { a->name = strdup(name); a->desc = strdup(desc); a->glyph = glyph; - a->flags = addflagpile(); + a->flags = addflagpile(NULL, NULL); return a; } @@ -148,7 +238,7 @@ objectclass_t *addoc(enum OBCLASS id, char *name, char *desc, char glyph) { // create a new object, stacking ok object_t *addob(obpile_t *where, char *name) { - addobject(where, name, B_TRUE); + return addobject(where, name, B_TRUE); } // create a new object @@ -157,58 +247,127 @@ object_t *addob(obpile_t *where, char *name) { // creating new obejct entries. object_t *addobject(obpile_t *where, char *name, int canstack) { objecttype_t *ot; - object_t *o; + object_t *o = NULL; char *p,*nsp; - char numstring[BUFLEN]; + char numstringmin[BUFLEN]; + char numstringmax[BUFLEN]; int howmany = 1; int i; - int db = B_TRUE; - flag_t *f; + int db = B_FALSE; + //flag_t *f; char *localname; + int wantblessed = B_UNCURSED; + localname = strdup(name); - // if we're adding to a cell... + if (db) { + dblog("DB: called addobject() for %s, canstack = %d",localname, canstack); + } + + if (where->owner && hasflag(where->owner->flags, F_NOPACK)) { + if (db) dblog("error giving ob '%s' - owner isn't allowed to carry objects!", name); + return NULL; + } + + // we CAN place objects in solid cells - for example, + // placing a fire on top of a wooden door. + /* if (where->where) { if (where->where->type != (celltype_t *)DUMMYCELLTYPE) { assert(!where->where->type->solid); } } + */ // parse name string - nsp = numstring; + nsp = numstringmin; for (p = localname ; isdigit(*p) ; p++) { *nsp = *p; nsp++; } *nsp = '\0'; + // we have a range... + if (*p == '-') { + nsp = numstringmax; + p++; + for ( ; isdigit(*p) ; p++) { + *nsp = *p; + nsp++; + } + *nsp = '\0'; + } else { + strcpy(numstringmax,numstringmin); + } + // are we giving multiple objects? - if (strlen(numstring) > 0) { + if (strlen(numstringmin) > 0) { + int min,max; // first increment name string pointer // past any spaces while (!isalpha(*p)) p++; + // now figure out how many - howmany = atoi(numstring); + min = atoi(numstringmin); + max = atoi(numstringmax); + if (min == max) { + howmany = min; + } else { + howmany = rnd(min,max); + } } else { howmany = 1; } + + // new objects after the game starts have unknown + // blessed/cursed status, so we can never stack them +// if (gamestarted && !hasflag(player->flags, F_DETECTAURAS)) { + if (strstr(p, "blessed") || strstr(p, "holy water")) { + if (db) dblog("DB: ob is blessed (%s)",p); + wantblessed = B_BLESSED; + //canstack = B_FALSE; + } else if (strstr(p, "cursed") || strstr(p, "incompetence")) { + if (db) dblog("DB: ob is cursed (%s)",p); + wantblessed = B_CURSED; + //canstack = B_FALSE; + } +// } // make sure we can find the requested object type + if (db) dblog("DB: Looking for object name '%s'", p ); ot = findotn(p); if (!ot) { - if (gamestarted) msg("DB: No match for object name '%s'", p ); + //if (gamestarted) msg("DB: No match for object name '%s'", p ); if (db) dblog("DB: No match for object name '%s'", p ); return NULL; } + if (db) dblog("DB: FOUND: ot->name = '%s'", ot->name ); + + // don't give nopickup objects to lifeforms + if (hasflag(ot->flags, F_NOPICKUP) && where->owner) { + return NULL; + } + + if (ot->obclass->id == OC_SPELL) { + if (db) dblog("DB: Cannot give a spell object! object name '%s'", p ); + return NULL; + } + + // override canstack if required + if (!hasflag(ot->flags, F_STACKABLE)) { + if (db) dblog("DB: setting canstack = false, objecttype '%s' not stackable", ot->name ); + canstack = B_FALSE; + } // special checks for unique objects if (hasflag(ot->flags, F_UNIQUE)) { // does this unique ob already exist? if (obexists(ot->id)) { + if (db) dblog("DB: Unique ob %s already exists!", p ); return NULL; } @@ -238,6 +397,7 @@ object_t *addobject(obpile_t *where, char *name, int canstack) { } if (!added) { + flag_t *f; if (db) dblog("DB: Creating new object (%s).",ot->name); // otherwise add to list @@ -260,16 +420,37 @@ object_t *addobject(obpile_t *where, char *name, int canstack) { o->id = nextoid++; // increment next ob id o->type = ot; o->pile = where; - // inherit from objecttype + + o->birthtime = curtime; + + // inherit props from objecttype o->material = ot->material; + assert(o->material); o->weight = ot->weight; - o->flags = addflagpile(); - for (f = ot->flags->first ; f ; f = f->next) { - addflag(o->flags, f->id, f->val[0], f->val[1], f->val[2], f->text); + o->flags = addflagpile(NULL, o); + + o->inscription = NULL; // non-inherited + + // inherit flags from objecttype + copyflags(o->flags, ot->flags, NA); + + // random flags... + f = hasflag(o->flags, F_RNDCHARGES); + if (f) { + int amt; + flag_t *chargeflag; + amt = rnd(f->val[0], f->val[1]); + chargeflag = hasflag(o->flags, F_CHARGES); + if (chargeflag) { + chargeflag->val[0] = amt; + chargeflag->val[1] = amt; + chargeflag->known = B_FALSE; + } else { + chargeflag = addflag_real(o->flags, F_CHARGES, amt, amt, NA, NULL, PERMENANT, B_UNKNOWN); + } } - // non-inherited: - o->inscription = NULL; + // non-inherited from here on: // if adding to a player... if (where->owner) { if (o->type->obclass->id == OC_MONEY) { @@ -279,16 +460,125 @@ object_t *addobject(obpile_t *where, char *name, int canstack) { } } else { // new object on the ground - has no letter yet. - o->letter = ' '; + o->letter = '\0'; + } + + if (canstack) { + // add the full amount! + o->amt = howmany; + } else { + o->amt = 1; + } + + + if (hasflag(o->flags, F_NOBLESS)) { + setblessed(o, B_UNCURSED); + } else { + setblessed(o, wantblessed); + } + o->blessknown = B_FALSE; + if (canstack) { + // stop looping through + break; } - o->amt = 1; - o->blessed = B_UNCURSED; - o->blessknown = B_FALSE; // TODO: change to false } } + + if (o) { + char *p2; + int bonus = 0; + // check for premods. eg. "flaming xxx" + if (strstr(name, "flaming ")) { + addflag(o->flags, F_ONFIRE, B_TRUE, NA, NA, NULL); + if (o->type->obclass->id == OC_WEAPON) { + if (!hasflagval(o->flags, F_DTIMMUNE, DT_FIRE, NA, NA, NULL)) { + addflag(o->flags, F_DTIMMUNE, DT_FIRE, NA, NA, NULL); + } + } + } + + // check for bonuses. eg. "+1" + p2 = strchr(p, '+'); + if (p2) { + char *p3; + char numbuf[BUFLENSMALL]; + p3 = numbuf; + + p2++; + + while (isdigit(*p2)) { + *p3 = *p2; + p2++; + p3++; + } + *p3 = '\0'; + + bonus += atoi(numbuf); + } + // check for penalties. eg. "-1" + p2 = strchr(p, '-'); + if (p2) { + char *p3; + char numbuf[BUFLENSMALL]; + p3 = numbuf; + + p2++; + + while (isdigit(*p2)) { + *p3 = *p2; + p2++; + p3++; + } + *p3 = '\0'; + + bonus -= atoi(numbuf); + } + + addflag_real(o->flags, F_BONUS, bonus, NA, NA, NULL, PERMENANT, B_UNKNOWN); + + // check for postmods. eg. "xxx of pyromania" + if (strstr(name, " of pyromania")) { + addflag_real(o->flags, F_FLAMESTRIKE, B_TRUE, NA, NA, NULL, PERMENANT, B_UNKNOWN); + } + } + + free(localname); + if (where->owner) { + // new owner gains "hold confer" flags conferred by this object + giveobflags(where->owner, o, F_HOLDCONFER); + } + + // special cases + if (o->type->id == OT_VENDINGMACHINE) { + char buf[BUFLEN]; + cell_t *loc; + loc = getoblocation(o); + // populate with objects + for (i = 0; i < 10; i++) { + objecttype_t *ot2; + strcpy(buf, ""); + while (!strcmp(buf, "")) { + real_getrandomob(loc->map, buf, RO_NONE, NA, loc->map->depth + rnd(10,15)); + // make sure you can hold it + ot2 = findotn(buf); + if (!ot2 || hasflag(ot2->flags, F_NOPICKUP)) { + strcpy(buf, ""); + } + } + + // replace "1 potion" with "a potion" + if (strstr(buf, "1 ") == buf) { + char temp[BUFLEN]; + strcpy(temp, buf); + sprintf(buf, "a %s",temp + 2); + } + addflag(o->flags, F_CONTAINSOB, 'a' + i, NA, NA, buf); + } + } + // return the last object given return o; } @@ -306,8 +596,12 @@ obpile_t *addobpile(lifeform_t *owner, cell_t *where) { objecttype_t *addot(int id, char *name, char *description, int material, float weight, int obclassid) { - objecttype_t *a; - flag_t *f; + objecttype_t *a, *ot; + //flag_t *f; + + // does this ob already exist? + ot = findot(id); + assert(!ot); // add to the end of the list if (objecttype == NULL) { @@ -331,14 +625,300 @@ objecttype_t *addot(int id, char *name, char *description, int material, float w a->material = findmaterial(material); a->weight = weight; a->obclass = findoc(obclassid); - a->flags = addflagpile(); + a->flags = addflagpile(NULL, NULL); // inherit flags from object class + /* for (f = a->obclass->flags->first ; f ; f = f->next) { addflag(a->flags, f->id, f->val[0], f->val[1], f->val[2], f->text); } + */ + copyflags(a->flags, a->obclass->flags, NA); + if (a->material) { + // inherit flags from material + /* + for (f = a->material->flags->first ; f ; f = f->next) { + addflag(a->flags, f->id, f->val[0], f->val[1], f->val[2], f->text); + } + */ + copyflags(a->flags, a->material->flags, FROMMAT); + } // for easy addition of flags lastot = a; + return a; +} + +// adjust damage based on material being damaged +void adjustdammaterial(unsigned int *dam, enum DAMTYPE damtype, enum MATERIAL mat) { + // adjust based on material + if (mat == MT_GAS) { + switch (damtype) { + case DT_HOLY: + case DT_DIRECT: + case DT_NONE: + break; + default: + *dam = 0; + return; + } + } + + // adjust based on damage type + if (damtype == DT_FIRE) { + switch (mat) { + case MT_PAPER: + *dam *= 3; + break; + case MT_WOOD: + case MT_ICE: + case MT_SLIME: + *dam *= 2; + break; + case MT_METAL: + case MT_BONE: + case MT_STONE: + case MT_BLOOD: + case MT_FIRE: // immune to itself + *dam = 0; + break; + default: + break; + } + } else if (damtype == DT_CHOP) { + switch (mat) { + case MT_WOOD: + *dam *= 2; + break; + case MT_SLIME: + *dam /= 2; + break; + default: + break; + } + } else if (damtype == DT_SLASH) { + switch (mat) { + case MT_WOOD: + case MT_SLIME: + case MT_BONE: + *dam /= 2; + break; + default: + break; + } + } else if (damtype == DT_PIERCE) { + switch (mat) { + case MT_WOOD: + case MT_SLIME: + case MT_BONE: + *dam /= 2; + break; + default: + break; + } + } else if (damtype == DT_BASH) { + switch (mat) { + case MT_PAPER: + *dam = 0; + break; + default: + break; + } + } +} + +void adjustdamob(object_t *o, unsigned int *dam, enum DAMTYPE damtype) { + // objects can't get hurt the turn they + // were created. + if (o->birthtime == curtime) { + *dam = 0; + return; + } + // only some objects can be hurt + if (!hasflag(o->flags, F_DAMAGABLE)) { + *dam = 0; + return; + } + // immune? + if (hasflagval(o->flags, F_DTIMMUNE, damtype, NA, NA, NULL)) { + *dam = 0; + return; + } + // poison gas never hurts objects + if (damtype == DT_POISONGAS) { + *dam = 0; + return; + } + + // adjust damage + if (o->blessed == B_BLESSED) { + // change of no hp loss + if (rnd(1,2) == 1) { + lifeform_t *owner; + owner = o->pile->owner; + if (owner && isplayer(owner)) { + // become known if owned by player + if (!isblessknown(o)) { + char obname[BUFLEN]; + getobname(o, obname, o->amt); + msg("Your %s pulses with holy light as it is struck!",noprefix(obname)); + } + o->blessknown = B_TRUE; + } + return; + } + } else if (o->blessed == B_CURSED) { + // chance of double damage! + if (rnd(1,2) == 1) { + lifeform_t *owner; + (*dam) *= 2; + owner = o->pile->owner; + if (owner && (owner->controller == C_PLAYER)) { + // become known if a player's + if (!isblessknown(o)) { + char obname[BUFLEN]; + getobname(o, obname, o->amt); + msg("Your %s emits a wave of dread as it is struck!",noprefix(obname)); + } + o->blessknown = B_TRUE; + } + } + } + + // adjust damage for material too + adjustdammaterial(dam, damtype, o->material->id); +} + +// adjust price for magical effects etc +/* +void adjustprice(objecttype_t *ot, float *price) { + int min,max; + flag_t *f; + + // bonuses/penalties + +} +*/ + +void appendinscription(object_t *o, char *text) { + if (o->inscription) { + int len; + char *buf; + len = strlen(o->inscription) + strlen(text) + 1; + if (len > BUFLEN) len = BUFLEN; + buf = malloc(len * sizeof(char)); + snprintf(buf, len, "%s%s",o->inscription, text); + setinscription(o, buf); + free(buf); + } else { + setinscription(o, text); + } +} + + +int blessob(object_t *o) { + char obname[BUFLEN]; + int rv = B_FALSE; + lifeform_t *owner; + + getobname(o, obname, o->amt); + + switch (o->blessed) { + case B_BLESSED: + rv = B_TRUE; + break; + case B_CURSED: + case B_UNCURSED: + setblessed(o, B_BLESSED); + break; + } + + if (rv == B_FALSE) { + int seen = B_FALSE; + owner = o->pile->owner; + if (owner) { + if (isplayer(owner)) { + msg("Your %s is bathed in a divine glow!", noprefix(obname)); + seen = B_TRUE; + } else if (haslos(player, owner->cell)) { + char ownername[BUFLEN]; + msg("%s%s %s is bathed in a divine glow!", ownername, getpossessive(ownername), + noprefix(obname)); + seen = B_TRUE; + } + } else if (haslos(player, o->pile->where)) { + msg("%s is bathed in a divine glow!", obname); + seen = B_TRUE; + } + + if (seen) { + o->blessknown = B_TRUE; + } + } + return rv; +} + +void brightflash(cell_t *centre, int range, lifeform_t *immunelf) { + int x,y; + cell_t *c; + + animradial(centre, range, '}'); + + // announce + if (haslos(player, centre) && !isblind(player)) { + msg("You see an intense flash of light!"); + } + /* + if (getcelldist(player->cell, centre) <= range) { + // player is in range but can't see - announce it beacuse it + // will make you deaf! + youhear(centre, "a deafening bang!"); + } else { // not in range of the flash + youhear(centre, "a loud bang!"); + } + */ + // blind monsters + for (y = centre->y - range; y <= centre->y + range; y++) { + for (x = centre->x - range; x <= centre->x + range; x++) { + c = getcellat(centre->map, x, y); + if (c) { + lifeform_t *lf; + lf = haslf(c); + if (lf && (lf != immunelf)) { + if (haslos(lf, centre) && !isblind(lf)) { + if (!isplayer(lf)) { // we'll blind the player last + if (!eyesshaded(lf)) { + if (lfhasflag(lf, F_SEEINDARK)) { + // blind for 20-30 turns + addtempflag(lf->flags, F_BLIND, B_TRUE, NA, NA, NULL, rnd(20,30)); + } else { + // blind for 5-10 turns + addtempflag(lf->flags, F_BLIND, B_TRUE, NA, NA, NULL, rnd(5,10)); + } + } + } + } else { + // TODO: deafen + } + } + } + } + } + + // handle the player last, so that you see all the + // 'xx is blinded' messages before losing your own + // sight. + if (player != immunelf) { + if (haslos(player, centre) && (getcelldist(player->cell, centre) <= range) && !isblind(player)) { + if (!eyesshaded(player)) { + if (lfhasflag(player, F_SEEINDARK)) { + msg("You eyes feel like they are burning!"); + addtempflag(player->flags, F_BLIND, B_TRUE, NA, NA, NULL, rnd(20,30)); + } else { + addtempflag(player->flags, F_BLIND, B_TRUE, NA, NA, NULL, rnd(5,10)); + } + } + } + } } // does the pile "op" have an object we can @@ -349,7 +929,9 @@ object_t *canstackob(obpile_t *op, object_t *match) { return NULL; } for (o = op->first ; o ; o = o->next) { - if (obpropsmatch(o, match)) return o; + if (o != match) { + if (obpropsmatch(o, match)) return o; + } } return NULL; } @@ -369,14 +951,84 @@ object_t *canstacknewot(obpile_t *op, objecttype_t *match) { return NULL; } +int changemat(object_t *o, enum MATERIAL mat) { + material_t *m; + flag_t *f, *nextf; + + + m = findmaterial(mat); + if (!m) { + return E_FAILED; + } + + if (o->material->id == mat) return E_NOEFFECT; + + // won't work on pyromania objects + f = hasflag(o->flags, F_FLAMESTRIKE); + if (f) { + if (isplayer(o->pile->owner)) { + f->known = B_TRUE; + } else if (o->pile->owner && haslos(player, o->pile->owner->cell)) { + f->known = B_TRUE; + } else if (haslos(player, o->pile->where)) { + f->known = B_TRUE; + } + return E_NOEFFECT; + } + + // remove flags which came from old material + for (f = o->flags->first ; f; f = nextf) { + nextf = f->next; + if (f->lifetime == FROMMAT) { + killflag(f); + } + } + + // change material + o->material = m; + + // inherit flags from new material + copyflags(m->flags, o->flags, FROMMAT); + + if (mat == MT_ICE) { + // if it turned to ice.. + + // it stops burning + extinguish(o); + + // it will melt... + if (!hasflag(o->flags, F_OBHP)) { + int myhp; + // give hp + myhp = getobweight(o) * 20; + if (myhp <= 0) myhp = 2; + + addtempflag(o->flags, F_OBHP, myhp, myhp, NA, NULL, FROMMAT); + } + if (!hasflag(o->flags, F_DAMAGABLE)) { + addtempflag(o->flags, F_DAMAGABLE, B_TRUE, NA, NA, NULL, FROMMAT); + } + // make it melt + addtempflag(o->flags, F_OBHPDRAIN, 1, DT_MELT, NA, NULL, FROMMAT); + } + return B_FALSE; +} void copyobprops(object_t *dst, object_t *src) { dst->material = src->material; dst->weight = src->weight; - // TODO: copy flags if (src->inscription) { dst->inscription = strdup(src->inscription); } + setblessed(dst, src->blessed); + dst->blessknown = src->blessknown; + + // copy flags + while (dst->flags->first) { + killflag(dst->flags->first); + } + copyflags(dst->flags, src->flags, NA); + } int countnames(char **list) { @@ -387,6 +1039,7 @@ int countnames(char **list) { int countobs(obpile_t *op) { object_t *o; + int count = 0; for (o = op->first ; o ; o = o->next) { count++; @@ -394,6 +1047,97 @@ int countobs(obpile_t *op) { return count; } +int curseob(object_t *o) { + int rv = B_FALSE; + switch (o->blessed) { + case B_BLESSED: + setblessed(o, B_UNCURSED); + break; + case B_CURSED: + rv = B_TRUE; + break; + case B_UNCURSED: + setblessed(o, B_CURSED); + break; + } + + return rv; +} + +void damageallobs(object_t *exception, obpile_t *op, int howmuch, int damtype) { + object_t *o, *nexto; + for (o = op->first ; o ; o = nexto) { + nexto = o->next; + if ((o != exception) && !hasflag(o->flags, F_DEAD)) { + takedamage(o, howmuch, damtype); + } + } +} + +void explodeob(object_t *o, flag_t *f, int bigness) { + cell_t *c; + int dam; + char obname[BUFLEN]; + + dam = f->val[0]; + c = getoblocation(o); + getobname(o, obname, o->amt); + + // announce + if (o->pile->owner) { + if (isplayer(o->pile->owner)) { + msg("Your %s explodes!", noprefix(obname)); + } else if (haslos(player, o->pile->owner->cell)) { + char lfname[BUFLEN]; + getlfname(o->pile->owner, lfname); + msg("%s%s %s explodes!", lfname, getpossessive(lfname), noprefix(obname)); + } + } else if (haslos(player, c)) { + msg("%s explodes!", obname); + } + explodecells(c, dam, bigness ? B_TRUE : B_FALSE, o, bigness ? 1 : 0, B_FALSE); + + // hurt everything! + /* + if (bigness) { + int dir; + cell_t *cc; + explodecell(c, dam, (bigness) ? B_TRUE : B_FALSE, NULL); + for (dir = DC_N; dir <= DC_NW; dir++) { + cc = getcellindir(c, dir); + } + } else { + explodecell(c, dam, (bigness) ? B_TRUE : B_FALSE, NULL); + } + */ +} + + +void extinguish(object_t *o) { + flag_t *f; + char obname[BUFLEN]; + f = hasflag(o->flags, F_ONFIRE); + getobname(o, obname, o->amt); + if (f) { + if (o->pile->owner) { + if (isplayer(o->pile->owner)) { + msg("Your %s %s extinguished.", noprefix(obname), + (o->amt == 1) ? "is" : "are"); + } else if (haslos(player, o->pile->owner->cell)) { + char lfname[BUFLEN]; + getlfname(o->pile->owner, lfname); + msg("%s%s %s %s extinguished.", lfname, getpossessive(lfname), noprefix(obname), + (o->amt == 1) ? "is" : "are"); + } + } else if (o->pile->where && haslos(player, o->pile->where)) { + getobname(o, obname, o->amt); + msg("%s %s extinguished.", obname, + (o->amt == 1) ? "is" : "are"); + } + killflag(f); + } +} + material_t *findmaterial(int id) { material_t *m; for (m = material ; m ; m = m->next) { @@ -428,25 +1172,82 @@ objecttype_t *findot(enum OBTYPE id) { objecttype_t *findotn(char *name) { objecttype_t *ot; - char *temp; - char *searchfor; - searchfor = strdup(name); + char *searchfor, *modname; + char *p; + modname = strdup(name); // make some replacements //replace scrolls with scroll etc - strrep(searchfor, "scrolls ", "scroll "); - strrep(searchfor, "potions ", "potion "); - strrep(searchfor, "pieces ", "piece "); - //realloc(searchfor, strlen(temp)); strcpy(searchfor, temp); free(temp); // swap - - + modname = strrep(modname, "berries ", "berry ", NULL); + modname = strrep(modname, "blocks ", "block ", NULL); + modname = strrep(modname, "cans ", "can ", NULL); + modname = strrep(modname, "chunks ", "chunk ", NULL); + modname = strrep(modname, "gems ", "gem ", NULL); + modname = strrep(modname, "loaves ", "load ", NULL); + modname = strrep(modname, "lumps ", "lump ", NULL); + modname = strrep(modname, "pieces ", "piece ", NULL); + modname = strrep(modname, "piles ", "pile ", NULL); + modname = strrep(modname, "pools ", "pool ", NULL); + modname = strrep(modname, "potions ", "potion ", NULL); + modname = strrep(modname, "puddles ", "puddle ", NULL); + modname = strrep(modname, "rings ", "ring ", NULL); + modname = strrep(modname, "scrolls ", "scroll ", NULL); + modname = strrep(modname, "vials ", "vial ", NULL); + + // only at start... + if (strstr(modname, "the ") == modname) modname = strrep(modname, "the ", "", NULL); + if (strstr(modname, "an ") == modname) modname = strrep(modname, "an ", "", NULL); + if (strstr(modname, "a ") == modname) modname = strrep(modname, "a ", "", NULL); + + modname = strrep(modname, "blessed ", "", NULL); + modname = strrep(modname, "uncursed ", "", NULL); + modname = strrep(modname, "cursed ", "", NULL); + //realloc(modname, strlen(temp)); strcpy(modname, temp); free(temp); // swap + + // strip out extra mods + modname = strrep(modname, "flaming ", "", NULL); + modname = strrep(modname, " of pyromania", "", NULL); + + // special cases + modname = strrep(modname, "holy water", "water", NULL); + modname = strrep(modname, "incompetence", "competence", NULL); + + // skip past bonusses + p = strchr(modname, '+'); + if (p) { + while (!isalpha(*p)) { + p++; + } + strcpy(modname, p); + } + p = strchr(modname, '-'); + if (p) { + while (!isalpha(*p)) { + p++; + } + strcpy(modname, p); + } + + dblog("findotn(): modname is '%s'",modname); for (ot = objecttype ; ot ; ot = ot->next) { - if (strstr(ot->name, searchfor)) { - free(searchfor); + // check for exact matches first... + if (!strcmp(ot->name, modname)) { + free(modname); + // found it! + return ot; + } + } + for (ot = objecttype ; ot ; ot = ot->next) { + // then partial matches + if (strstr(ot->name, modname)) { + free(modname); + // found it! return ot; } } + searchfor = strdup(modname); + // haven't found it yet - check for plurals // search for words ending in "es" (eg. tomatoes) if ((searchfor[strlen(searchfor)-1] == 's') && @@ -454,9 +1255,11 @@ objecttype_t *findotn(char *name) { // remove trailing 'es' searchfor[strlen(searchfor)-1] = '\0'; searchfor[strlen(searchfor)-2] = '\0'; + dblog("findotn(): searchfor without 'es' is '%s'",searchfor); // search again for (ot = objecttype ; ot ; ot = ot->next) { if (strstr(ot->name, searchfor)) { + free(modname); free(searchfor); return ot; } @@ -464,32 +1267,86 @@ objecttype_t *findotn(char *name) { } // reset back to inital word free(searchfor); - searchfor = strdup(name); + searchfor = strdup(modname); // search for words ending in "s" (eg. "swords") if (searchfor[strlen(searchfor)-1] == 's') { // remove trailing 's' searchfor[strlen(searchfor)-1] = '\0'; - searchfor[strlen(searchfor)-2] = '\0'; + dblog("findotn(): searchfor without 's' is '%s'",searchfor); // search again for (ot = objecttype ; ot ; ot = ot->next) { if (strstr(ot->name, searchfor)) { + free(modname); free(searchfor); return ot; } } } + free(modname); + free(searchfor); return NULL; } +// ie. "the apple is xxx" +// ie. "the apples are xxx" +char *getfillingname(int nutrition) { + if (nutrition > 100) { + return "extremely substantial"; + } else if (nutrition >= 90) { + return "very filling"; + } else if (nutrition >= 70) { + return "ample for a meal"; + } else if (nutrition >= 50) { + return "enough for a light meal"; + } else if (nutrition >= 25) { + return "snack-sized"; + } else if (nutrition > 0) { + return "barely worth eating"; + } + // ie. < 0 + return "of zero nutritional substance"; +} + +int getfirearmrange(object_t *o) { + flag_t *f; + f = hasflag(o->flags, F_RANGE); + if (f) { + return f->val[0]; + } + return 0; +} + +int getfirearmspeed(object_t *o) { + int firespeed; + flag_t *f; + f = hasflag(o->flags, F_FIRESPEED); + if (f) { + firespeed = f->val[0]; + } else { + // default to very slow + firespeed = 1; + } + return firespeed; +} + char getglyph(object_t *o) { flag_t *f; - char g; - f = hasflag(o->flags, F_GLYPH); - if (f) { - g = f->text[0]; + int isopen; + char g = ' '; // default + if (isdoor(o, &isopen)) { + if (isopen) { + g = '-'; + } else { + g = '+'; + } } else { - g = o->type->obclass->glyph; + f = hasflag(o->flags, F_GLYPH); + if (f) { + g = f->text[0]; + } else { + g = o->type->obclass->glyph; + } } return g; } @@ -522,12 +1379,16 @@ char *genhiddenname(enum OBCLASS id) { namelist = potionname; numnames = &numpotnames; break; + case OC_RING: + namelist = ringname; + numnames = &numringnames; + break; default: dblog("ERROR! genhiddenname for unknown class %d\n",id); exit(1); } - assert(*numnames != 0); + assert((*numnames != 0)); sel = rnd(0,*numnames-1); strcpy(temp, namelist[sel]); name = strdup(temp); @@ -540,16 +1401,271 @@ char *genhiddenname(enum OBCLASS id) { return name; } +// returns -1 if object doesn't have the flag +int getcharges(object_t *o) { + flag_t *f; + int amt = -1; + f = hasflag(o->flags, F_CHARGES); + if (f) { + amt = f->val[0]; + } + return amt; +} + +int getobaccuracy(object_t *wep) { + int acc; + flag_t *f; + + acc = 100; // default accuracy of 100% + + if (wep) { + // blessed weapons have better base accuracy + if (wep->blessed == B_BLESSED) acc += 50; + + // override with weapon's (lack of) accuracy + f = hasflag(wep->flags, F_ACCURACY); + if (f) { + // ie. accuracy of 100% means no penalty + // ie. accuracy of 75% means 25% penalty + // etc + acc = f->val[0]; + } + + // modify for attacker's level + if (wep->pile->owner) { + acc += (wep->pile->owner->level * 2); + } + } + return acc; +} + +// returns value of obejcts, in gold +int getobvalue(object_t *o) { + float price; + flag_t *f; + + if (o->type->id == OT_GOLD) { + return o->amt; + } + + // base value: weight * material value + price = (float)getobweight(o) * (float)getmaterialvalue(o->material->id); + //adjustprice(o->type, &price); + + // fixed prices + f = hasflag(o->flags, F_VALUE); + if (f) { + price += f->val[0]; + } + + for (f = o->flags->first ; f ; f = f->next) { + // damage + if (f->id == F_DAM) { + flag_t *ff; + float mod = 1; + int min,max; + getdamrange(o->flags, &min, &max); + ff = hasflag(o->flags, F_OBATTACKSPEED); + if (ff) { + switch (ff->val[0]) { + case SP_FAST: + case SP_VERYFAST: + mod = 1.5; + break; + case SP_ULTRAFAST: + case SP_GODLIKE: + mod = 2; + default: + mod = 1; + break; + } + } + price += (max*mod*5); + } + // armour rating + if (f->id == F_ARMOURRATING) { + float rating; + rating = (float)f->val[0]; + price += (rating * 20.0); + } + // bonus/penalties + if (f->id == F_BONUS) { + price += (f->val[0] * 100); + } + // food + if (f->id == F_EDIBLE) { + price += ((float)f->val[0] / 5.0); + } + // one-off magical effects (linkspell) - use spell price + if (f->id == F_LINKSPELL) { + //flag_t *ff; + objecttype_t *sp; + sp = findot(f->val[0]); + // TODO : spelllevel^2 * 20 +// ooooooooo + } + } + + + // TODO: conferred intrinsics - depends on which one + + // TODO: conferred spells - use spell price * multiplier + + // TODO: potions - hardcode? + + // speical material prices like velvet, silk + if (strstr(o->type->name, "velvet")) { + price *= 1.5; + } + if (strstr(o->type->name, "silk")) { + price *= 2; + } + + // TODO: extra price for tech/tools - hardcode? + + // rarity + f = hasflag(o->flags, F_RARITY); + if (f) { + if (f->val[1] >= 70) { + price /= 1.5; + } else if (f->val[1] <= 40) { + price *= 1.5; + } else if (f->val[1] <= 20) { + price *= 2; + } else if (f->val[1] <= 10) { + price *= 5; + } + } + + + // blessed/cursed + if (isblessed(o)) price *= 1.5; + if (iscursed(o)) price /= 2; + + // minimum + if (price < 1) price = 1; + return (int) price; +} + +/* +int getobtypevalue(objecttype_t *ot) { + float price; + if (ot->id == OT_GOLD) { + return 1; + } + // base value: weight * material value + price = (float)ot->weight * (float)getmaterialvalue(ot->material->id); + + adjustprice(ot, &price); + return (int) price; +} +*/ + +// ie. "it has xxx accuracy" +char *getaccuracyname(int accpct) { + if (accpct >= 200) { + return "godlike"; + } else if (accpct >= 150) { + return "incredible"; + } else if (accpct >= 100) { + return "very good"; + } else if (accpct >= 70) { + return "good"; + } else if (accpct >= 50) { + return "average"; + } else if (accpct >= 30) { + return "poor"; + } else if (accpct >= 20) { + return "very poor"; + } else if (accpct >= 0) { + return "incredibly poor"; + } else { + return "a complete lack of"; + } +} + + +object_t *getammo(lifeform_t *lf) { + object_t *o; + o = hasobwithflag(lf->pack, F_CURAMMO); + return o; +} + +object_t *getrandomammo(lifeform_t *lf) { + object_t *gun; + object_t *o; + flag_t *f; + + gun = getfirearm(lf); + if (!gun) { + return NULL; + } + // TODO: at the moment we are jsut picking the first + // possible ammo. Need to allow the player to + // pick a specific ammo to use. USe a flag on wep + // to do this? Or a flag on the player? + for (f = gun->flags->first ; f ; f = f->next) { + if (f->id == F_AMMOOB) { + for (o = lf->pack->first ; o ; o = o->next) { + if (o->type->id == f->val[0]) { + return o; + } + } + } + } + return NULL; +} + char *getdamname(enum DAMTYPE damtype) { switch (damtype) { + case DT_ACID: return "acid"; + case DT_MELT: return "melting"; case DT_PIERCE: return "piercing"; case DT_SLASH: return "slashing"; case DT_CLAW: return "claw"; + case DT_ELECTRIC: return "electricity"; + case DT_EXPLOSIVE: return "explosive"; + case DT_FIRE: return "fire"; case DT_BITE: return "bite"; case DT_BASH: return "bludgeoning"; case DT_CHOP: return "chopping"; + case DT_COLD: return "cold"; + case DT_POISONGAS: return "poison gas"; case DT_PROJECTILE: return "projectile"; case DT_HOLY: return "holy"; + case DT_DIRECT: return "direct"; + case DT_WATER: return "water"; + case DT_DECAY: return "decay"; + case DT_MAGIC: return "magical"; + case DT_TOUCH: return "touch"; + default: return "unknown"; + } + return "unknown"; +} + +char *getdamnamenoun(enum DAMTYPE damtype) { + switch (damtype) { + case DT_ACID: return "acid"; + case DT_MELT: return "melting"; + case DT_PIERCE: return "piercing damage"; + case DT_POISONGAS: return "poison gas"; + case DT_SLASH: return "slashing damage"; + case DT_CLAW: return "claw damage"; + case DT_ELECTRIC: return "electricity"; + case DT_EXPLOSIVE: return "explosives"; + case DT_FIRE: return "fire"; + case DT_BITE: return "bite"; + case DT_BASH: return "bludgeoning"; + case DT_CHOP: return "chopping"; + case DT_COLD: return "cold"; + case DT_PROJECTILE: return "projectiles"; + case DT_HOLY: return "holy damage"; + case DT_DIRECT: return "direct damage"; + case DT_DECAY: return "decay damage"; + case DT_WATER: return "water"; + case DT_MAGIC: return "magical damage"; + case DT_TOUCH: return "touch effects"; + default: return "unknown"; } return "unkmown"; } @@ -599,15 +1715,60 @@ int getletidx(char let) { return -1; } +int getmaterialvalue(enum MATERIAL mat) { + switch (mat) { + case MT_NOTHING: + case MT_MAGIC: + case MT_FIRE: + case MT_GAS: + return 0; + case MT_FOOD: + case MT_ICE: + case MT_STONE: + return 1; + case MT_WATER: + return 1; + case MT_FLESH: + case MT_BONE: + case MT_BLOOD: + case MT_SLIME: + return 2; + case MT_CLOTH: + case MT_LEATHER: + return 2; + case MT_WOOD: + return 3; + case MT_PAPER: + case MT_WETPAPER: + return 4; + case MT_PLASTIC: + case MT_RUBBER: + case MT_GLASS: + return 5; + case MT_METAL: + return 6; + case MT_GOLD: + return 7; + } + // default + return 1; +} + +int getmaxthrowrange(lifeform_t *lf, object_t *o) { + int maxdist; + // TODO: adjust for lifeform strength + maxdist = 10 - (getobunitweight(o) / 2); + return maxdist; +} + // select lowest possible letter char getnextletter(obpile_t *op, char *wantletter) { - object_t *o; - int curidx = -1, thisidx; + int curidx = -1; char let; - int db = B_FALSE; + //int db = B_FALSE; // try 'wantletter' first - if (wantletter) { + if (wantletter && (*wantletter != '\0')) { if (!pilehasletter(op, *wantletter)) { return *wantletter; } @@ -624,18 +1785,115 @@ char getnextletter(obpile_t *op, char *wantletter) { } } - return '-'; + return '\0'; +} + + +int getnumshards(object_t *o) { + int numshards,maxshards; + maxshards = ceil(getobunitweight(o)) * 10; + if (maxshards < 1) maxshards = 1; + numshards = rnd(1,maxshards); + return numshards; +} + +int getnutritionbase(object_t *o) { + float basenutr; + flag_t *f; + if (o->material->id == MT_ICE) { + // use the object's weight + basenutr = getobweight(o) * 10; + } else { + // use nutrition flag + f = hasflag(o->flags, F_EDIBLE); + if (f) { + basenutr = (float)f->val[1]; + } else { + return 0; + } + } + + return basenutr; +} + +int getnutrition(object_t *o) { + float nutrpct; + int nutrition; + + if (isrotting(o)) { + nutrition = -(HUNGERCONST/2); + } else { + nutrpct = getnutritionbase(o); + + if (nutrpct <= 0) { + nutrition = 0; + } else { + nutrition = pctof(nutrpct, (float) HUNGERCONST); + } + } + + return nutrition; +} + +char *getobdesc(object_t *o, char *buf) { + if (isknown(o)) { + sprintf(buf, "%s", o->type->desc); + } else { + sprintf(buf, "%s", o->type->obclass->desc); + } + return buf; +} + +cell_t *getoblocation(object_t *o) { + if (o->pile->owner) return o->pile->owner->cell; + else return o->pile->where; +} + +char *getobname(object_t *o, char *buf, int count) { + return real_getobname(o, buf, count, B_TRUE, B_TRUE, B_TRUE); } // buf must already be allocated -char *getobname(object_t *o, char *buf, int count) { +char *real_getobname(object_t *o, char *buf, int count, int wantcondition, int adjustforblind, int wantblesscurse) { char *pluralname; char prefix[BUFLEN]; char basename[BUFLEN]; + char buf2[BUFLEN]; + int shopitem = B_FALSE; flag_t *f; - // default to real name - strcpy(basename,gethiddenname(o)); + // default to normal name + if (hasflag(o->flags, F_SHOPITEM)) { + shopitem = B_TRUE; + } + + if (shopitem) { + strcpy(basename,o->type->name); + } else { + strcpy(basename,gethiddenname(o)); + } + + if (!shopitem) { + if (gamestarted && adjustforblind && isblind(player) ) { + // override with onclass names + if (o->type->obclass->id == OC_SCROLL) { + strcpy(basename, "scroll"); + } else if (o->type->obclass->id == OC_POTION) { + strcpy(basename, "potion"); + } else if (o->type->obclass->id == OC_RING) { + strcpy(basename, "ring"); + } + } + } + + + + if ((o->type->id == OT_POT_WATER) && (o->blessed == B_BLESSED) && isblessknown(o) && isknown(o)) { + strcpy(basename, "potion of holy water"); + } + if ((o->type->id == OT_POT_COMPETENCE) && (o->blessed == B_CURSED) && isblessknown(o) && isknown(o)) { + strcpy(basename, "potion of incompetence"); + } // handle ALL if (count == ALL) { @@ -647,9 +1905,9 @@ char *getobname(object_t *o, char *buf, int count) { pluralname = strdup(basename); if (hasflag(o->flags, F_UNIQUE)) { // TODO: && o->identified - strcpy(prefix, "the"); + strcpy(prefix, "The"); } else { - if (o->blessknown) { + if (!hasflag(o->flags, F_NOBLESS) && isblessknown(o)) { if (o->blessed == B_UNCURSED) { strcpy(prefix, "an"); } else { @@ -677,54 +1935,248 @@ char *getobname(object_t *o, char *buf, int count) { // blessed status - if (o->blessknown) { - switch (o->blessed) { - case B_BLESSED: - strcat(buf, "blessed "); - break; - case B_UNCURSED: - strcat(buf, "uncursed "); - break; - case B_CURSED: - strcat(buf, "cursed "); - break; + if (!hasflag(o->flags, F_NOBLESS) && wantblesscurse) { + if (shopitem || isblessknown(o)) { + switch (o->blessed) { + case B_BLESSED: + // blessed water is known as "holy water" + if ((o->type->id == OT_POT_WATER) && isknown(o)) { + } else { + strcat(buf, "blessed "); + } + break; + case B_UNCURSED: + strcat(buf, "uncursed "); + break; + case B_CURSED: + if ((o->type->id == OT_POT_COMPETENCE) && isknown(o)) { + } else { + strcat(buf, "cursed "); + } + break; + } } } - // TODO include enchantments (ie. a blessed +5 sword) + // material changed? + if (o->material != o->type->material) { + switch (o->material->id) { + case MT_ICE: + strcat(buf, "frozen "); + break; + case MT_GOLD: + strcat(buf, "golden "); + break; + case MT_WOOD: + strcat(buf, "wooden "); + break; + default: + strcat(buf, o->material->name); + strcat(buf, " "); + } + } + + // include mods (ie. a flaming sword) + if (hasflag(o->flags, F_ONFIRE)) { + strcat(buf, "flaming "); + } + + // condition + if (wantcondition) { + if (!hasflag(o->flags, F_NOOBDAMTEXT)) { + getobconditionname(o, buf2); + if (strlen(buf2) > 0) { + strcat(buf, buf2); + strcat(buf, " "); + } + } + } + + // include enchantments (ie. a blessed +5 sword) + f = hasflag(o->flags, F_BONUS); + if (f && (f->known || shopitem)) { + char buf2[BUFLENSMALL]; + int bonus; + bonus = f->val[0]; + if (bonus != 0) { + sprintf(buf2, "%s%d ", (bonus < 0) ? "" : "+", bonus); + strcat(buf, buf2); + } + } // object name strcat(buf, pluralname); free(pluralname); + // include mods if identified - ie. xxx of pyromania + f = hasflag(o->flags, F_FLAMESTRIKE); + if (f && (f->known || shopitem)) { + strcat(buf, " of pyromania"); + } + + // make sure obname doesn't start with a space + while (buf && (buf[0] == ' ')) { + strcpy(buf, buf + 1); + } + + // append inscription + if (o->inscription) { + strcat(buf, " {"); + strcat(buf, o->inscription); + strcat(buf, "}"); + } + return buf; } +float getobpileweight(obpile_t *op) { + object_t *o; + float weight = 0; + for (o = op->first ; o ; o = o->next) { + weight += getobweight(o); + } + return weight; +} -char *getrandomob(map_t *map, char *buf) { - enum RARITY rarity; +char *getobconditionname(object_t *o, char *buf) { + flag_t *f; + float pct; + + + if (iscorpse(o)) { + if (isrotting(o)) { + sprintf(buf, "rotting"); + } else { + strcpy(buf, ""); + } + } else { + f = hasflag(o->flags, F_OBHP); + if (f) { + pct = ((float) f->val[0] / (float) f->val[1]) * 100.0; + } else { + pct = 100; + } + + if (pct >= 100) { + strcpy(buf, ""); + } else if (pct >= 75) { + sprintf(buf, "battered"); + } else if (pct >= 50) { + sprintf(buf, "damaged"); + } else if (pct >= 25) { + sprintf(buf, "very damaged"); + } else { + sprintf(buf, "critically damaged"); + } + } + return buf; +} + +char *getobhurtname(object_t *o, enum DAMTYPE damtype) { + switch (damtype) { + case DT_ACID: + if (o->amt == 1) { + return "corrodes"; + } else { + return "corrode"; + } + case DT_DECAY: + if (o->amt == 1) { + return "decays"; + } else { + return "decay"; + } + case DT_FIRE: + if (o->amt == 1) { + return "burns"; + } else { + return "burn"; + } + case DT_MELT: + if (o->amt == 1) { + return "is melting"; + } else { + return "are melting"; + } + default: + if (o->amt == 1) { + return "is damaged"; + } else { + return "are damaged"; + } + } + return "is damaged"; +} + +float getobweight(object_t *o) { + float weight; + + weight = getobunitweight(o) * o->amt; + + return weight; +} + +float getobunitweight(object_t *o) { + float weight; + + weight = o->weight; + + // has its material been changed? + if (o->material != o->type->material) { + // changed - some materials will + // modify the item's weight + float ratio; + ratio = o->material->weightrating / o->type->material->weightrating; + + weight *= ratio; + } + + return weight; +} + +objecttype_t *getoppositestairs(objecttype_t *ot) { + flag_t *f; + f = hasflag(ot->flags, F_OPPOSITESTAIRS); + assert(f); + return findot(f->val[0]); +} + +char *real_getrandomob(map_t *map, char *buf, int cond, int cval, int forcedepth) { objecttype_t *ot; - int roll; objecttype_t *poss[MAXRANDOMOBCANDIDATES]; int nposs = 0; int selidx; int amt; flag_t *f; - int db = B_FALSE; + int db = B_TRUE; + char *pluralname; + char cursestr[BUFLEN]; + int raritymin,raritymax; + int depth; - // determine rarity of object to generate - rarity = RR_FREQUENT; - - // start with 'frequent'ly appearing items - // roll a die. 30% chance of getting rarer. - // stop when we fail the die roll. - roll = rnd(1,100); - while (roll < 50) { - rarity++; - if (rarity == RR_VERYRARE) break; - roll = rnd(1,100); + if (forcedepth != NA) { + depth = forcedepth; + } else if (map) { + depth = map->depth; + } else { + depth = rnd(1,MAXDEPTH); + } + + getrarity(depth, &raritymin, &raritymax, 25); + + if (db) dblog("adding random object with rarity value between %d - %d",raritymin,raritymax); + if (db) { + objectclass_t *oc; + switch (cond) { + case RO_DAMTYPE: + dblog(" (must have damtype = %s)",getdamname(cval)); + break; + case RO_OBCLASS: + oc = findoc(cval); + dblog(" (must have obclass = %s)",oc->name); + break; + } } - if (db) dblog("adding random object of rarity %d\n",rarity); // try to find an object of this type which will @@ -732,8 +2184,41 @@ char *getrandomob(map_t *map, char *buf) { nposs = 0; while (nposs == 0) { for (ot = objecttype ; ot ; ot = ot->next) { - if (hasflagval(ot->flags, F_RARITY, map->habitat, rarity, NA, NULL) || - hasflagval(ot->flags, F_RARITY, H_ALL, rarity, NA, NULL) ) { + int rarok = B_FALSE, condok = B_FALSE; + flag_t *rarflag = NULL; + // correct rarity? + + rarflag = hasflagval(ot->flags, F_RARITY, H_ALL, NA, NA, NULL); + if (!rarflag) { + if (map) { + rarflag = hasflagval(ot->flags, F_RARITY, map->habitat, NA, NA, NULL); + } else { + rarflag = hasflagval(ot->flags, F_RARITY, NA, NA, NA, NULL); + } + } + if (rarflag) { + if ((rarflag->val[1] >= raritymin) && (rarflag->val[1] <= raritymax)) { + rarok = B_TRUE; + } + } + + if (rarok) { + // matches condition? + if (cond == RO_NONE) { + condok = B_TRUE; + } else if (cond == RO_DAMTYPE) { + if (hasflagval(ot->flags, F_DAMTYPE, cval, NA, NA, NULL)) { + condok = B_TRUE; + } + } else if (cond == RO_OBCLASS) { + if (ot->obclass->id == cval) { + condok = B_TRUE; + } + } + } + + if (rarok && condok) { + //if (db) dblog("-> possibility: %s, rarity=%d",ot->name, rarflag->val[1]); poss[nposs] = ot; nposs++; if (nposs >= MAXRANDOMOBCANDIDATES) break; @@ -743,16 +2228,17 @@ char *getrandomob(map_t *map, char *buf) { // nothing found? if (nposs == 0) { // already at lowest rarity? - if (rarity == RR_FREQUENT) { + if ((raritymax >= 100) && (raritymin <= 0)) { // give up - sprintf(buf, ""); + strcpy(buf, ""); if (db) dblog("no possible objects at all! giving up."); return NULL; - } else { - // lower rarity and try again - rarity--; - if (db) dblog("no possible objects like this. trying again with rarity %d\n",rarity); - } + } + + // expand range and try again + raritymax += 10; if (raritymax > 100) raritymax = 100; + raritymin -= 10; if (raritymin < 0) raritymin = 0; + if (db) dblog("no possible objects like this. trying again with rarity %d-%d\n",raritymin,raritymax); } } @@ -768,11 +2254,62 @@ char *getrandomob(map_t *map, char *buf) { amt = 1; } - sprintf(buf, "%d %s", amt, ot->name); + if (amt > 1) { + pluralname = makeplural(ot->name); + } else { + pluralname = strdup(ot->name); + } + + // blessed? + strcpy(cursestr, ""); + if (!hasflag(ot->flags, F_NOBLESS)) { + int num; + int bonus = 0; + num = rnd(1,100); + if (num <= 15) { + strcpy(cursestr, "blessed "); + // chance of bonus + while (rnd(1,100) <= 25) { + bonus++; + } + } else if (num <= 30) { + strcpy(cursestr, "cursed "); + // chance of penalty + while (rnd(1,100) <= 25) { + bonus--; + } + } + } + + + if ((ot->obclass->id == OC_WEAPON) || + (ot->obclass->id == OC_ARMOUR)) { + char buf2[BUFLENSMALL]; + int bonus = 0; + if (strlen(cursestr) > 0) { + // chance of bonus/penalty + while (rnd(1,100) <= 25) { + bonus++; + } + if (strstr(cursestr, "cursed")){ + bonus = -bonus; + } + } + sprintf(buf2, "%s%d ", (bonus >= 0) ? "+" : "", bonus); + strcat(cursestr, buf2); + } + + sprintf(buf, "%d %s%s", amt, cursestr, pluralname); + + + if (db) dblog("random ob: %d x %s ('%s')", amt, ot->name,pluralname); + free(pluralname); return buf; } -char *getrandomobwithdt(map_t *map, enum DAMTYPE damtype, char *buf) { +/* +OLD CODE +char *real_getrandomob(map_t *map, char *buf, int cond, int cval, int forcedepth) { enum RARITY rarity; objecttype_t *ot; int roll; @@ -782,28 +2319,65 @@ char *getrandomobwithdt(map_t *map, enum DAMTYPE damtype, char *buf) { int amt; flag_t *f; int db = B_TRUE; + char *pluralname; + char cursestr[BUFLEN]; + int depth; + int getrarer; + int firstgo; + int moddir = 0; // determine rarity of object to generate - rarity = RR_COMMON; + if (rnd(1,2) == 1) { + rarity = RR_FREQUENT; + } else { + rarity = RR_COMMON; + } + + if (forcedepth != NA) { + depth = forcedepth; + } else if (map) { + depth = map->depth; + } else { + depth = rnd(1,20); + } + + getrarer = 40 + (depth * 2); + + if (getrarer > 75) getrarer = 75; // start with 'frequent'ly appearing items - // roll a die. 30% chance of getting rarer. + // roll a die. if less than 'getrarer', get rarer. // stop when we fail the die roll. roll = rnd(1,100); - while (roll < 50) { + while (roll < getrarer) { rarity++; if (rarity == RR_VERYRARE) break; roll = rnd(1,100); } - if (db) dblog("adding random object of damtype %s, rarity %d\n",getdamname(damtype),rarity); + if (db) dblog("adding random object of rarity %d",rarity); + if (db) { + objectclass_t *oc; + switch (cond) { + case RO_DAMTYPE: + dblog(" (must have damtype = %s)",getdamname(cval)); + break; + case RO_OBCLASS: + oc = findoc(cval); + dblog(" (must have obclass = %s)",oc->name); + break; + } + } // try to find an object of this type which will // fit in the map's habitat + + moddir = -1; + firstgo = B_TRUE; nposs = 0; while (nposs == 0) { for (ot = objecttype ; ot ; ot = ot->next) { - int rarok; + int rarok = B_FALSE, condok = B_FALSE; // correct rarity? if ( map && hasflagval(ot->flags, F_RARITY, map->habitat, rarity, NA, NULL)) { rarok = B_TRUE; @@ -814,28 +2388,53 @@ char *getrandomobwithdt(map_t *map, enum DAMTYPE damtype, char *buf) { } if (rarok) { - // correct damtype? - if (hasflagval(ot->flags, F_DAMTYPE, damtype, NA, NA, NULL)) { - poss[nposs] = ot; - nposs++; - if (nposs >= MAXRANDOMOBCANDIDATES) break; + // matches condition? + if (cond == RO_NONE) { + condok = B_TRUE; + } else if (cond == RO_DAMTYPE) { + if (hasflagval(ot->flags, F_DAMTYPE, cval, NA, NA, NULL)) { + condok = B_TRUE; + } + } else if (cond == RO_OBCLASS) { + if (ot->obclass->id == cval) { + condok = B_TRUE; + } } } + + if (rarok && condok) { + poss[nposs] = ot; + nposs++; + if (nposs >= MAXRANDOMOBCANDIDATES) break; + } } + // nothing found? if (nposs == 0) { // already at lowest rarity? if (rarity == RR_FREQUENT) { + if (firstgo) { + moddir = 1; + } else { + // give up + strcpy(buf, ""); + if (db) dblog("no possible objects at all! giving up."); + return NULL; + } + } + + firstgo = B_FALSE; + + // lower/raise rarity and try again + rarity += moddir; + if (rarity >= RR_NEVER) { // give up - sprintf(buf, ""); + strcpy(buf, ""); if (db) dblog("no possible objects at all! giving up."); return NULL; - } else { - // lower rarity and try again - rarity--; - if (db) dblog("no possible objects like this. trying again with rarity %d\n",rarity); - } + } + if (db) dblog("no possible objects like this. trying again with rarity %d\n",rarity); } } @@ -850,9 +2449,153 @@ char *getrandomobwithdt(map_t *map, enum DAMTYPE damtype, char *buf) { } else { amt = 1; } - if (db) sprintf(buf, "%d %s", amt, ot->name); + + if (amt > 1) { + pluralname = makeplural(ot->name); + } else { + pluralname = strdup(ot->name); + } + + // blessed? + strcpy(cursestr, ""); + if (!hasflag(ot->flags, F_NOBLESS)) { + int num; + int bonus = 0; + num = rnd(1,100); + if (num <= 15) { + strcpy(cursestr, "blessed "); + // chance of bonus + while (rnd(1,100) <= 25) { + bonus++; + } + } else if (num <= 30) { + strcpy(cursestr, "cursed "); + // chance of penalty + while (rnd(1,100) <= 25) { + bonus--; + } + } + } + + + if ((ot->obclass->id == OC_WEAPON) || + (ot->obclass->id == OC_ARMOUR)) { + char buf2[BUFLENSMALL]; + int bonus = 0; + if (strlen(cursestr) > 0) { + // chance of bonus/penalty + while (rnd(1,100) <= 25) { + bonus++; + } + if (strstr(cursestr, "cursed")){ + bonus = -bonus; + } + } + sprintf(buf2, "%s%d ", (bonus >= 0) ? "+" : "", bonus); + strcat(cursestr, buf2); + } + + sprintf(buf, "%d %s%s", amt, cursestr, pluralname); + + + if (db) dblog("random ob: %d x %s ('%s')", amt, ot->name,pluralname); + free(pluralname); return buf; } +*/ + +char *getrandomob(map_t *map, char *buf) { + return real_getrandomob(map, buf, RO_NONE, NA, NA); +} + +char *getrandomobwithdt(map_t *map, enum DAMTYPE damtype, char *buf) { + return real_getrandomob(map, buf, RO_DAMTYPE, damtype, NA); +} + +char *getrandomobwithclass(map_t *map, enum OBCLASS cid, char *buf) { + return real_getrandomob(map, buf, RO_OBCLASS, cid, NA); +} + +char *getschoolname(enum SPELLSCHOOL sch) { + switch (sch) { + case SS_ABILITY: return "Abilities"; + case SS_ALLOMANCY: return "Allomancy"; + case SS_DIVINE: return "Divine Powers"; + case SS_WILD: return "Wild Magic"; + case SS_MENTAL: return "Mental Powers"; + case SS_ELEMENTAL: return "Elemental Magic"; + case SS_MODIFICATION: return "Transmutation Magic"; + case SS_DEATH: return "Death Magic"; + case SS_LIFE: return "Life Magic"; + case SS_DIVINATION: return "Divination Magic"; + case SS_TRANSLOCATION: return "Translocation Magic"; + case SS_SUMMONING: return "Summoning Magic"; + case SS_GRAVITY: return "Gravitation Magic"; + case SS_LAST: return "!invalid school!"; + } + return "unknown school"; +} + +int getshatterdam(object_t *o) { + int shatterdam = 0; + if (willshatter(o->material->id)) { + int maxshatterdam; + maxshatterdam = ceil(getobweight(o)); + if (maxshatterdam < 1) maxshatterdam = 1; + + shatterdam = rnd(1, maxshatterdam); + } + return shatterdam; +} + +int getthrowdam(object_t *o) { + double dam = 0; + flag_t *f; + // base damage is = kilograms. + // ie. 1 kg object does 1 damage + // ie. 5 kg object does 5 damage + // ie. 100 kg object does 100 damage (person) + // ie. 1 tonne object does 1000 damage (car) + dam = ceil((double)getobunitweight(o)); + + // modify for bonus + f = hasflag(o->flags, F_BONUS); + if (f) { + dam += f->val[0]; + } + + // note: damage will also be modified based on speed in fireat() + + // adjust for material + switch (o->material->id) { + // soft materials do less damage + case MT_PAPER: + case MT_WETPAPER: + case MT_CLOTH: + dam /= 2; + break; + break; + default: + break; + } + + // misisle objects do extra damage + if (hasflag(o->flags, F_MISSILE)) { + dam *= 2; + } + + return (int)dam; +} + +int hasedibleob(obpile_t *op) { + object_t *o; + for (o = op->first ; o ; o = o->next) { + if (isedible(o)) { + return B_TRUE; + } + } + return B_FALSE; +} object_t *hasknownob(obpile_t *op, enum OBTYPE oid) { object_t *o; @@ -874,6 +2617,42 @@ object_t *hasob(obpile_t *op, enum OBTYPE oid) { return NULL; } +object_t *hasobofclass(obpile_t *op, enum OBCLASS cid) { + object_t *o; + for (o = op->first ; o ; o = o->next) { + if (o->type->obclass->id == cid) return o; + } + return NULL; +} + +object_t *hasobmulti(obpile_t *op, enum OBTYPE *oid, int noids) { + object_t *o; + int n; + for (o = op->first ; o ; o = o->next) { + for (n = 0; n < noids; n++) { + if (o->type->id == oid[n]) return o; + } + } + return NULL; +} + + +object_t *hasobwithflag(obpile_t *op, enum FLAG flagid) { + object_t *o; + for (o = op->first ; o ; o = o->next) { + if (hasflag(o->flags, flagid)) return o; + } + return NULL; +} + +object_t *hasobwithflagval(obpile_t *op, enum FLAG flagid, int val0, int val1, int val2, char *text) { + object_t *o; + for (o = op->first ; o ; o = o->next) { + if (hasflagval(o->flags, flagid, val0, val1, val2, text)) return o; + } + return NULL; +} + object_t *hasobid(obpile_t *op, int id) { object_t *o; @@ -884,268 +2663,1605 @@ object_t *hasobid(obpile_t *op, int id) { } +// fully identify a single object. +void identify(object_t *o) { + flag_t *f; + if (!isknown(o)) { + makeknown(o->type->id); + } + addflag(o->flags, F_IDENTIFIED, B_TRUE, -1, -1, NULL); + o->blessknown = B_TRUE; + for (f = o->flags->first ; f ; f = f->next) { + if (!f->known) f->known = B_TRUE; + } +} + void initobjects(void) { + //int ch; + //int i; + //objecttype_t *ot; // generate counts for hidden names numscrollnames = countnames(scrollname); numpotnames = countnames(potionname); + numringnames = countnames(ringname); // materials - addmaterial(MT_NOTHING, "nothing"); - addmaterial(MT_STONE, "stone"); - addmaterial(MT_FIRE, "fire"); - addmaterial(MT_PLASTIC, "plastic"); - addmaterial(MT_METAL, "metal"); - addmaterial(MT_WOOD, "wood"); - addmaterial(MT_FLESH, "flesh"); - addmaterial(MT_GOLD, "gold"); - addmaterial(MT_PAPER, "paper"); - addmaterial(MT_GLASS, "glass"); - addmaterial(MT_LEATHER, "leather"); - addmaterial(MT_ICE, "ice"); - addmaterial(MT_WATER, "water"); + addmaterial(MT_NOTHING, "nothing", 0); + addmaterial(MT_MAGIC, "magical energy", 0); + addmaterial(MT_FIRE, "fire", 0); + addmaterial(MT_GAS, "gas", 0.5); + addmaterial(MT_PAPER, "paper", 1); + addflag(lastmaterial->flags, F_DTCONVERT, DT_FIRE, NA, NA, "pile of ash"); + addflag(lastmaterial->flags, F_MATCONVERT, MT_WATER, NA, NA, "lump of soggy paper"); + addflag(lastmaterial->flags, F_MATCONVERTTEXT, MT_WATER, NA, NA, "goes soggy"); + addflag(lastmaterial->flags, F_MATCONVERTTEXTPL, MT_WATER, NA, NA, "go soggy"); + addflag(lastmaterial->flags, F_FLAMMABLE, B_TRUE, NA, NA, NULL); + addmaterial(MT_FLESH, "flesh", 2); + addmaterial(MT_WETPAPER, "wet paper", 3); + addmaterial(MT_CLOTH, "cloth", 3); + addflag(lastmaterial->flags, F_FLAMMABLE, B_TRUE, NA, NA, NULL); + addmaterial(MT_FOOD, "food", 3); + addmaterial(MT_PLASTIC, "plastic", 3); + addmaterial(MT_RUBBER, "rubber", 4); + addmaterial(MT_LEATHER, "leather", 4); + addmaterial(MT_BONE, "bone", 5); + addmaterial(MT_ICE, "ice",6); + addmaterial(MT_WOOD, "wood", 6); + addflag(lastmaterial->flags, F_FLAMMABLE, B_TRUE, NA, NA, NULL); + addmaterial(MT_WATER, "water", 7); + addmaterial(MT_BLOOD, "blood", 8); + addmaterial(MT_SLIME, "slime", 9); + addmaterial(MT_STONE, "stone", 10); + addmaterial(MT_METAL, "metal", 13); + addmaterial(MT_GLASS, "glass", 13); + addmaterial(MT_GOLD, "gold", 16); + //addmaterial(MT_GOLD, "gold", 16); // object classes + addoc(OC_DFEATURE, "Dungeon Features", "Doors, etc.", '\\'); addoc(OC_MONEY, "Money", "The standard currency of Nexus.", '$'); addoc(OC_SCROLL, "Scrolls", "An arcane roll of parchment, inscribed with many magical glyphs.", '?'); addflag(lastobjectclass->flags, F_HASHIDDENNAME, B_TRUE, NA, NA, NULL); addflag(lastobjectclass->flags, F_STACKABLE, B_TRUE, NA, NA, NULL); + addflag(lastobjectclass->flags, F_DAMAGABLE, B_TRUE, NA, NA, NULL); + //addflag(lastobjectclass->flags, F_DTCONVERT, DT_WATER, NA, NA, "lump of soggy paper"); + //addflag(lastobjectclass->flags, F_MATCONVERT, MT_WATER, NA, NA, "lump of soggy paper"); + //addflag(lastobjectclass->flags, F_MATCONVERTTEXT, MT_WATER, NA, NA, "goes soggy"); + //addflag(lastobjectclass->flags, F_MATCONVERTTEXTPL, MT_WATER, NA, NA, "go soggy"); + + addoc(OC_POTION, "Potions", "A strange concoction contained within a small flask.", '!'); addflag(lastobjectclass->flags, F_HASHIDDENNAME, B_TRUE, NA, NA, NULL); addflag(lastobjectclass->flags, F_STACKABLE, B_TRUE, NA, NA, NULL); + addflag(lastobjectclass->flags, F_DAMAGABLE, B_TRUE, NA, NA, NULL); + addflag(lastobjectclass->flags, F_POURABLE, B_TRUE, NA, NA, NULL); + addoc(OC_RING, "Rings", "A circular band, worn on the finger.", '='); + addflag(lastobjectclass->flags, F_HASHIDDENNAME, B_TRUE, NA, NA, NULL); + addflag(lastobjectclass->flags, F_GOESON, BP_RIGHTHAND, NA, NA, NULL); + addflag(lastobjectclass->flags, F_GOESON, BP_LEFTHAND, NA, NA, NULL); addoc(OC_WEAPON, "Weapons", "An instrument used for the purpose of causing harm or death.", ')'); + addflag(lastobjectclass->flags, F_DAMAGABLE, B_TRUE, NA, NA, NULL); addoc(OC_ARMOUR, "Armour/Clothing", "Protective gear.", ']'); + addflag(lastobjectclass->flags, F_DAMAGABLE, B_TRUE, NA, NA, NULL); addoc(OC_ROCK, "Rocks/Gems", "Boring (or not so boring) rocks.", '*'); addoc(OC_FOOD, "Food", "Yum!", '%'); - addoc(OC_MISC, "Miscellaneous", "This could be anything.", '"'); + addflag(lastobjectclass->flags, F_STACKABLE, B_TRUE, NA, NA, ""); + addflag(lastobjectclass->flags, F_NOBLESS, B_TRUE, NA, NA, NULL); + addoc(OC_CORPSE, "Corpses", "Dead flesh which was once living.", '%'); + addflag(lastobjectclass->flags, F_STACKABLE, B_TRUE, NA, NA, ""); + addflag(lastobjectclass->flags, F_NOBLESS, B_TRUE, NA, NA, NULL); + addflag(lastobjectclass->flags, F_DAMAGABLE, B_TRUE, NA, NA, NULL); + addflag(lastobjectclass->flags, F_OBHP, 50, 50, NA, NULL); + addflag(lastobjectclass->flags, F_OBHPDRAIN, 1, DT_DECAY, NA, NULL); // ie. corpses last for 50 turns + addoc(OC_TECH, "Tools/Technology", "Useful items, from the common to the obscure.", '~'); + addflag(lastobjectclass->flags, F_DAMAGABLE, B_TRUE, NA, NA, NULL); + addflag(lastobjectclass->flags, F_NOBLESS, B_TRUE, NA, NA, NULL); + addoc(OC_MISC, "Miscellaneous", "This could be anything.", '\\'); + addoc(OC_EFFECT, "Environmental Effects", "Smoke, fire, etc.", '}'); + addflag(lastobjectclass->flags, F_NOBLESS, B_TRUE, NA, NA, NULL); addoc(OC_SPELL, "Spells", "A magical spell", '&'); // this is a "virtual" object class + addoc(OC_ABILITY, "Abilities", "A special ability", '&'); // this is a "virtual" object class // object types + + // dungeon features + addot(OT_WOODENDOOR, "wooden door", "A sturdy wooden door.", MT_WOOD, 150, OC_DFEATURE); + // GLYPH here is a special case in getglyph + addflag(lastot->flags, F_DOOR, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_IMPASSABLE, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_BLOCKSVIEW, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_BLOCKSTHROW, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_NOBLESS, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_DAMAGABLE, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_LOCKABLE, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_OBHP, 20, 20, NA, NULL); + addflag(lastot->flags, F_DTVULN, DT_BASH, NA, NA, NULL); + addflag(lastot->flags, F_DTVULN, DT_CHOP, NA, NA, NULL); + + addot(OT_WOODENTABLE, "wooden table", "A waist-height wooden table.", MT_WOOD, 25, OC_DFEATURE); + addflag(lastot->flags, F_RARITY, H_ALL, 70, NA, NULL); + addflag(lastot->flags, F_GLYPH, NA, NA, NA, "\\"); + addflag(lastot->flags, F_IMPASSABLE, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_PUSHABLE, B_TRUE, NA, NA, NULL); + //addflag(lastot->flags, F_NOPICKUP, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_NOBLESS, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_DAMAGABLE, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_OBHP, 10, 10, NA, NULL); + addflag(lastot->flags, F_DTVULN, DT_BASH, NA, NA, NULL); + addflag(lastot->flags, F_DTVULN, DT_CHOP, NA, NA, NULL); + + addot(OT_BOULDER, "boulder", "A massive stone boulder.", MT_STONE, 100, OC_DFEATURE); + addflag(lastot->flags, F_RARITY, H_ALL, 65, NA, ""); + addflag(lastot->flags, F_GLYPH, NA, NA, NA, "'"); + addflag(lastot->flags, F_IMPASSABLE, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_PUSHABLE, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_BLOCKSVIEW, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_BLOCKSTHROW, B_TRUE, NA, NA, NULL); +// addflag(lastot->flags, F_NOPICKUP, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_NOBLESS, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_DAMAGABLE, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_MISSILE, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_OBHP, 80, 80, NA, NULL); + + addot(OT_STAIRSDOWN, "staircase going down", "A stone staircase winding downwards.", MT_STONE, 3000, OC_DFEATURE); + addflag(lastot->flags, F_GLYPH, NA, NA, NA, ">"); + addflag(lastot->flags, F_CLIMBABLE, D_DOWN, NA, NA, NULL); + addflag(lastot->flags, F_OPPOSITESTAIRS, OT_STAIRSUP, NA, NA, NULL); + addflag(lastot->flags, F_NOPICKUP, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_NOBLESS, B_TRUE, NA, NA, NULL); + + addot(OT_STAIRSUP, "staircase going up", "A stone staircase climbing upwards.", MT_STONE, 3000, OC_DFEATURE); + addflag(lastot->flags, F_GLYPH, NA, NA, NA, "<"); + addflag(lastot->flags, F_CLIMBABLE, D_UP, NA, NA, NULL); + addflag(lastot->flags, F_OPPOSITESTAIRS, OT_STAIRSDOWN, NA, NA, NULL); + addflag(lastot->flags, F_NOPICKUP, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_NOBLESS, B_TRUE, NA, NA, NULL); + + addot(OT_VENDINGMACHINE, "vending machine", "A gold-operated vending machine.", MT_METAL, 500, OC_DFEATURE); + addflag(lastot->flags, F_RARITY, H_ALL, 25, NA, ""); + addflag(lastot->flags, F_GLYPH, NA, NA, NA, "_"); + addflag(lastot->flags, F_NOPICKUP, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_NOBLESS, B_TRUE, NA, NA, NULL); + + // money etc addot(OT_GOLD, "gold coin", "Sparkling nuggets of gold, the standard currency of Nexus.", MT_GOLD, 0.1, OC_MONEY); - addflag(lastot->flags, F_STACKABLE, B_TRUE, NA, NA, ""); - addflag(lastot->flags, F_RARITY, H_ALL, RR_COMMON, NA, ""); + addflag(lastot->flags, F_STACKABLE, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_RARITY, H_ALL, 100, NA, ""); addflag(lastot->flags, F_NUMAPPEAR, 1, 100, NA, ""); + addflag(lastot->flags, F_NOBLESS, B_TRUE, NA, NA, NULL); addot(OT_STONE, "stone", "A medium-sized roundish stone.", MT_STONE, 0.5, OC_ROCK); addflag(lastot->flags, F_STACKABLE, B_TRUE, NA, NA, ""); - addflag(lastot->flags, F_RARITY, H_DUNGEON, RR_FREQUENT, NA, ""); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 100, NA, ""); addflag(lastot->flags, F_NUMAPPEAR, 1, 10, NA, ""); + addflag(lastot->flags, F_NOBLESS, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_MISSILE, B_TRUE, NA, NA, NULL); + addot(OT_ASH, "pile of ash", "A pile of ash", MT_STONE, 0.1, OC_ROCK); + addflag(lastot->flags, F_GLYPH, B_TRUE, NA, NA, ","); + addflag(lastot->flags, F_STACKABLE, B_TRUE, NA, NA, ""); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 70, NA, ""); + addflag(lastot->flags, F_NOBLESS, B_TRUE, NA, NA, NULL); + addot(OT_GEMOFSEEING, "gem of seeing", "Magically enhances your eyesight.", MT_STONE, 1, OC_ROCK); + addflag(lastot->flags, F_HOLDCONFER, F_XRAYVIS, 2, NA, NULL); + addflag(lastot->flags, F_HOLDCONFER, F_DETECTAURAS, B_TRUE, NA, NULL); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 10, NA, NULL); + // food + addot(OT_BERRY, "berry", "Juicy, brightly coloured berries.", MT_FOOD, 0.1, OC_FOOD); + addflag(lastot->flags, F_EDIBLE, B_TRUE, 8, NA, ""); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 70, NA, NULL); + addflag(lastot->flags, F_NUMAPPEAR, 1, 15, NA, ""); + addot(OT_NUT, "peanut", "A species in the legume family.", MT_FOOD, 0.1, OC_FOOD); + addflag(lastot->flags, F_EDIBLE, B_TRUE, 12, NA, ""); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 70, NA, NULL); + addflag(lastot->flags, F_NUMAPPEAR, 1, 12, NA, ""); + addot(OT_BANANA, "banana", "Ba-na-na-na-na-na na-na na-na-na.", MT_FOOD, 0.5, OC_FOOD); + addflag(lastot->flags, F_EDIBLE, B_TRUE, 50, NA, ""); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 75, NA, NULL); + addot(OT_APPLE, "apple", "A crunchy apple.", MT_FOOD, 0.5, OC_FOOD); + addflag(lastot->flags, F_EDIBLE, B_TRUE, 50, NA, ""); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 75, NA, NULL); + addot(OT_MUSHROOM, "mushroom", "A large brown mushroom.", MT_FOOD, 0.2, OC_FOOD); + addflag(lastot->flags, F_EDIBLE, B_TRUE, 50, NA, ""); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 80, NA, NULL); + addflag(lastot->flags, F_NUMAPPEAR, 1, 3, NA, ""); + addot(OT_BREADSTALE, "loaf of stale bread", "A small loaf of old, stale bread.", MT_FOOD, 0.5, OC_FOOD); + addflag(lastot->flags, F_EDIBLE, B_TRUE, 80, NA, ""); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 60, NA, NULL); + addot(OT_CHEESE, "chunk of cheese", "A chunk of hard cheese.", MT_FOOD, 0.5, OC_FOOD); + addflag(lastot->flags, F_EDIBLE, B_TRUE, 85, NA, ""); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 60, NA, NULL); + addot(OT_ROASTMEAT, "chunk of roast meat", "A chunk of flame-roasted flesh.", MT_FOOD, 1, OC_FOOD); // weight normally comes from corpse type + addflag(lastot->flags, F_EDIBLE, B_TRUE, 100, NA, ""); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 65, NA, NULL); + addot(OT_BREADFRESH, "loaf of fresh bread", "A freshly-baked loaf of bread.", MT_FOOD, 0.5, OC_FOOD); + addflag(lastot->flags, F_EDIBLE, B_TRUE, 100, NA, ""); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 50, NA, NULL); + addot(OT_CHOCOLATE, "block of chocolate", "An entire block of chocolate.", MT_FOOD, 0.5, OC_FOOD); + addflag(lastot->flags, F_EDIBLE, B_TRUE, 110, NA, ""); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 40, NA, NULL); // corpses - addot(OT_CORPSEHUMAN, "human corpse", "The dead body of a human.", MT_FLESH, 50, OC_FOOD); + addot(OT_CORPSEEYEBAT, "eyebat corpse", "The dead body of an eyebat.", MT_FLESH, 5, OC_CORPSE); + addflag(lastot->flags, F_EDIBLE, B_TRUE, 10, NA, ""); + addot(OT_CORPSEBAT, "bat corpse", "The dead body of a bat.", MT_FLESH, 5, OC_CORPSE); + addflag(lastot->flags, F_EDIBLE, B_TRUE, 10, NA, ""); + addot(OT_CORPSEFLY, "fly corpse", "The dead body of a giant flying insect.", MT_FLESH, 5, OC_CORPSE); + addflag(lastot->flags, F_EDIBLE, B_TRUE, 10, NA, ""); + addot(OT_CORPSEGLOWBUG, "glowbug corpse", "The dead body of a glowbug.", MT_FLESH, 1, OC_CORPSE); + addflag(lastot->flags, F_EDIBLE, B_TRUE, 10, NA, ""); + addot(OT_CORPSEGOBLIN, "goblin corpse", "The dead body of a goblin.", MT_FLESH, 20, OC_CORPSE); + addflag(lastot->flags, F_EDIBLE, B_TRUE, 25, NA, ""); + addot(OT_CORPSEHUMAN, "human corpse", "The dead body of a human.", MT_FLESH, 50, OC_CORPSE); + addflag(lastot->flags, F_EDIBLE, B_TRUE, 50, NA, ""); + addot(OT_CORPSEORK, "orc corpse", "The dead body of an orc.", MT_FLESH, 90, OC_CORPSE); + addflag(lastot->flags, F_EDIBLE, B_TRUE, 50, NA, ""); + addot(OT_CORPSERODENT, "rodent corpse", "The dead body of some kind of rodent.", MT_FLESH, 5, OC_CORPSE); + addflag(lastot->flags, F_EDIBLE, B_TRUE, 20, NA, ""); + addot(OT_CORPSETROLL, "troll corpse", "The dead body of a troll.", MT_FLESH, 90, OC_CORPSE); + addflag(lastot->flags, F_EDIBLE, B_TRUE, 50, NA, ""); + addot(OT_CORPSEOGRE, "ogre corpse", "The dead body of an ogre.", MT_FLESH, 100, OC_CORPSE); + addflag(lastot->flags, F_EDIBLE, B_TRUE, 90, NA, ""); + addot(OT_CORPSELIZARD, "lizard corpse", "The dead body of a lizard.", MT_FLESH, 1, OC_CORPSE); + addflag(lastot->flags, F_EDIBLE, B_TRUE, 20, NA, ""); + + addot(OT_FLESHCHUNK, "chunk of flesh", "A chunk of flesh from something.", MT_FLESH, 1, OC_CORPSE); addflag(lastot->flags, F_EDIBLE, B_TRUE, 5, NA, ""); - addflag(lastot->flags, F_STACKABLE, B_TRUE, NA, NA, ""); - addot(OT_CORPSEGOBLIN, "goblin corpse", "The dead body of a goblin.", MT_FLESH, 20, OC_FOOD); - addflag(lastot->flags, F_EDIBLE, B_TRUE, 5, NA, ""); - addflag(lastot->flags, F_STACKABLE, B_TRUE, NA, NA, ""); - addot(OT_CORPSEBAT, "bat corpse", "The dead body of a bat.", MT_FLESH, 5, OC_FOOD); - addflag(lastot->flags, F_EDIBLE, B_TRUE, 5, NA, ""); - addflag(lastot->flags, F_STACKABLE, B_TRUE, NA, NA, ""); - addot(OT_CORPSEBAT, "rodent corpse", "The dead body of some kind of rodent.", MT_FLESH, 5, OC_FOOD); - addflag(lastot->flags, F_EDIBLE, B_TRUE, 5, NA, ""); - addflag(lastot->flags, F_STACKABLE, B_TRUE, NA, NA, ""); - addot(OT_CORPSEBAT, "fly corpse", "The dead body of a giant flying insect.", MT_FLESH, 5, OC_FOOD); - addflag(lastot->flags, F_EDIBLE, B_TRUE, 5, NA, ""); - addflag(lastot->flags, F_STACKABLE, B_TRUE, NA, NA, ""); + // potions + addot(OT_POT_AMBROSIA, "vial of ambrosia", "The nectar of the gods, said to completely restore the drinker's health.", MT_GLASS, 1, OC_POTION); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 35, NA, NULL); + addot(OT_POT_ACID, "flask of battery acid", "Causes massive internal burning if ingested.", MT_GLASS, 1, OC_POTION); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 70, NA, NULL); + addflag(lastot->flags, F_MISSILE, B_TRUE, NA, NA, NULL); + addot(OT_POT_ACROBATICS, "potion of acrobatics", "Allows the drinker to leap large distances.", MT_GLASS, 1, OC_POTION); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 80, NA, NULL); + addot(OT_POT_COMPETENCE, "potion of competence", "Permemantly increases the drinker's strength, intelligence or dexterity.", MT_GLASS, 1, OC_POTION); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 25, NA, NULL); + + addot(OT_POT_ELEMENTENDURE, "potion of endure elements", "Grants the imbiber temporary resistance to both fire and cold.", MT_GLASS, 1, OC_POTION); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 80, NA, NULL); + addot(OT_POT_ELEMENTIMMUNE, "potion of elemental immunity", "Grants the imbiber temporary immunity to both fire and cold.", MT_GLASS, 1, OC_POTION); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 60, NA, NULL); + addot(OT_POT_GASEOUSFORM, "potion of gaseous form", "Turns the drinker into a cloud of gas.", MT_GLASS, 1, OC_POTION); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 50, NA, NULL); addot(OT_POT_HEALING, "potion of healing", "Restores 10-20 health to whoever drinks it.", MT_GLASS, 1, OC_POTION); - addflag(lastot->flags, F_RARITY, H_DUNGEON, RR_COMMON, NA, NULL); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 60, NA, NULL); + addot(OT_POT_HEALINGMIN, "potion of minor healing", "Restores 1-8 health to whoever drinks it.", MT_GLASS, 1, OC_POTION); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 80, NA, NULL); + + addot(OT_POT_INVULN, "potion of invulnerability", "Grants the drinker temporary immunity to physical harm.", MT_GLASS, 1, OC_POTION); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 40, NA, NULL); + + addot(OT_POT_MAGIC, "potion of magic", "Fully restores the drinker's magical energy.", MT_GLASS, 1, OC_POTION); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 60, NA, NULL); + + addot(OT_POT_OIL, "potion of oil", "A bottle of cooking oil.", MT_GLASS, 1, OC_POTION); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 80, NA, NULL); + + addot(OT_POT_POLYMORPH, "potion of polymorph self", "Transmutes the drinker into another living race.", MT_GLASS, 1, OC_POTION); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 50, NA, NULL); + addflag(lastot->flags, F_MISSILE, B_TRUE, NA, NA, NULL); + + addot(OT_POT_SANCTUARY, "potion of sanctuary", "Creates a temporary magical barrier abour the drinker.", MT_GLASS, 1, OC_POTION); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 50, NA, NULL); + + addot(OT_POT_RESTORATION, "potion of restoration", "Restores lost abilities to the drinker.", MT_GLASS, 1, OC_POTION); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 60, NA, NULL); + + addot(OT_POT_SPEED, "potion of speed", "Temporarily increasees the drinker's speed.", MT_GLASS, 1, OC_POTION); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 70, NA, NULL); + + addot(OT_POT_WATER, "potion of water", "Plain, regular water.", MT_GLASS, 1, OC_POTION); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 90, NA, NULL); + addot(OT_POT_JUICE, "potion of fruit juice", "Tasty (but not very fresh) fruit juice!", MT_GLASS, 1, OC_POTION); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 100, NA, NULL); // scrolls - addot(OT_MAP, "map", "Prevents you from forgetting your surroundings.", MT_PAPER, 0.5, OC_SCROLL); - addflag(lastot->flags, F_RARITY, H_DUNGEON, RR_UNCOMMON, NA, NULL); + addot(OT_SCR_NOTHING, "scroll of nothing", "Looks like a magic scroll, but doesn't do anything.", MT_PAPER, 0.5, OC_SCROLL); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 90, NA, NULL); - addot(OT_SCR_RNDTELEPORT, "scroll of uncontrolled teleportation", "Causes the caster to teleport to a random location within the same level.", MT_PAPER, 0.5, OC_SCROLL); - addflag(lastot->flags, F_LINKSPELL, OT_S_RNDTELEPORT, NA, NA, NULL); - addflag(lastot->flags, F_RARITY, H_DUNGEON, RR_UNCOMMON, NA, NULL); + addot(OT_MAP, "piece of graph paper", "Paper containing a set of grid-lines, intended for mapping.", MT_PAPER, 0.5, OC_SCROLL); + addflag(lastot->flags, F_HOLDCONFER, F_PHOTOMEM, NA, IFKNOWN, NULL); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 60, NA, NULL); + + addot(OT_SCR_CREATEMONSTER, "scroll of create monster", "Summons a (probably hostile) monster to a nearby location.", MT_PAPER, 0.5, OC_SCROLL); + addflag(lastot->flags, F_LINKSPELL, OT_S_CREATEMONSTER, NA, NA, NULL); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 70, NA, NULL); + + addot(OT_SCR_DETECTAURA, "scroll of detect aura", "Senses holiness or evil near the caster.", MT_PAPER, 0.5, OC_SCROLL); + addflag(lastot->flags, F_LINKSPELL, OT_S_DETECTAURA, NA, NA, NULL); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 65, NA, NULL); + + addot(OT_SCR_DETECTLIFE, "scroll of detect life", "Senses life near the caster.", MT_PAPER, 0.5, OC_SCROLL); + addflag(lastot->flags, F_LINKSPELL, OT_S_DETECTLIFE, NA, NA, NULL); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 80, NA, NULL); + + addot(OT_SCR_FIREBALL, "scroll of fireball", "Creates a huge ball of fire.", MT_PAPER, 0.5, OC_SCROLL); + addflag(lastot->flags, F_LINKSPELL, OT_S_FIREBALL, NA, NA, NULL); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 50, NA, NULL); + + addot(OT_SCR_FLAMEPILLAR, "scroll of flame column", "Creates a tall pillar of flame.", MT_PAPER, 0.5, OC_SCROLL); + addflag(lastot->flags, F_LINKSPELL, OT_S_FLAMEPILLAR, NA, NA, NULL); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 60, NA, NULL); + + addot(OT_SCR_FREEZEOB, "scroll of freezing touch", "Permenantly changes the next object touched into solid ice.", MT_PAPER, 0.5, OC_SCROLL); + addflag(lastot->flags, F_LINKSPELL, OT_S_FREEZEOB, NA, NA, NULL); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 65, NA, NULL); + + addot(OT_SCR_IDENTIFY, "scroll of identify", "Completely identifies any one item.", MT_PAPER, 0.5, OC_SCROLL); + addflag(lastot->flags, F_LINKSPELL, OT_S_IDENTIFY, NA, NA, NULL); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 85, NA, NULL); + + addot(OT_SCR_LIGHT, "scroll of light", "Creates a permenant light source centred on the caster.", MT_PAPER, 0.5, OC_SCROLL); + addflag(lastot->flags, F_LINKSPELL, OT_S_LIGHT, NA, NA, NULL); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 90, NA, NULL); addot(OT_SCR_MAPPING, "scroll of sense surroundings", "Magically imbues the caster with a map of his/her surroundings.", MT_PAPER, 0.5, OC_SCROLL); addflag(lastot->flags, F_LINKSPELL, OT_S_MAPPING, NA, NA, NULL); - addflag(lastot->flags, F_RARITY, H_DUNGEON, RR_COMMON, NA, NULL); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 75, NA, NULL); + + addot(OT_SCR_MINDSCAN, "scroll of mind scan", "Reveals detailed information about the target.", MT_PAPER, 0.5, OC_SCROLL); + addflag(lastot->flags, F_LINKSPELL, OT_S_MINDSCAN, NA, NA, NULL); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 75, NA, NULL); + + addot(OT_SCR_TELEPORTRND, "scroll of random teleportation", "Causes the caster to teleport to a random location within the same level.", MT_PAPER, 0.5, OC_SCROLL); + addflag(lastot->flags, F_LINKSPELL, OT_S_TELEPORTRND, NA, NA, NULL); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 80, NA, NULL); + + addot(OT_SCR_WISH, "scroll of wishing", "Grants the caster any item of their choice (with some limitations).", MT_PAPER, 0.5, OC_SCROLL); + addflag(lastot->flags, F_LINKSPELL, OT_S_WISH, NA, NA, NULL); + // spells - actually defined as object types // MUST DEFINE THESE _AFTER_ SCROLLS - addot(OT_S_RNDTELEPORT, "uncontrolled teleportation", "Causes the caster to teleport to a random location within the same level.", MT_NOTHING, 0, OC_SPELL); + + /////////////////// + // allomancy + /////////////////// + // l1 + addot(OT_S_ABSORBMETAL, "absorb metal", "Draws mana from nearby metallic objects.", MT_NOTHING, 0, OC_SPELL); + addflag(lastot->flags, F_SPELLSCHOOL, SS_ALLOMANCY, NA, NA, NULL); + addflag(lastot->flags, F_SPELLLEVEL, 1, NA, NA, NULL); + addflag(lastot->flags, F_MPCOST, 0, NA, NA, NULL); + addot(OT_S_DETECTMETAL, "detect metal", "Senses any metal near the caster.", MT_NOTHING, 0, OC_SPELL); + addflag(lastot->flags, F_SPELLSCHOOL, SS_ALLOMANCY, NA, NA, NULL); + addflag(lastot->flags, F_SPELLLEVEL, 1, NA, NA, NULL); + // l2 + addot(OT_S_PULLMETAL, "pull metal", "Pulls metal objects to the caster.", MT_NOTHING, 0, OC_SPELL); + addflag(lastot->flags, F_SPELLSCHOOL, SS_ALLOMANCY, NA, NA, NULL); + addflag(lastot->flags, F_SPELLLEVEL, 2, NA, NA, NULL); + addot(OT_S_ACCELMETAL, "accelerate metal", "Greatly accelerates a metal object thrown by the caster.", MT_NOTHING, 0, OC_SPELL); + addflag(lastot->flags, F_SPELLSCHOOL, SS_ALLOMANCY, NA, NA, NULL); + addflag(lastot->flags, F_SPELLLEVEL, 2, NA, NA, NULL); + // l3 + addot(OT_S_DETONATE, "detonate", "Causes all metal objects in a location explode.", MT_NOTHING, 0, OC_SPELL); + addflag(lastot->flags, F_SPELLSCHOOL, SS_ALLOMANCY, NA, NA, NULL); + addflag(lastot->flags, F_SPELLLEVEL, 3, NA, NA, NULL); + addot(OT_S_MAGSHIELD, "magnetic shield", "Surrounds the caster with magnetic force, repelling metal objects and attacks.", MT_NOTHING, 0, OC_SPELL); + addflag(lastot->flags, F_SPELLSCHOOL, SS_ALLOMANCY, NA, NA, NULL); + addflag(lastot->flags, F_SPELLLEVEL, 3, NA, NA, NULL); + // l4 + addot(OT_S_ANIMATEMETAL, "animate metal", "Imbues a metallic weapon with temporary life, enabling it to fight on its own.", MT_NOTHING, 0, OC_SPELL); + addflag(lastot->flags, F_SPELLSCHOOL, SS_ALLOMANCY, NA, NA, NULL); + addflag(lastot->flags, F_SPELLLEVEL, 4, NA, NA, NULL); + + /////////////////// + // death + /////////////////// + // l3 + addot(OT_S_WEAKEN, "weaken", "Temporarily lowers the target's muscle strength.", MT_NOTHING, 0, OC_SPELL); + addflag(lastot->flags, F_SPELLSCHOOL, SS_DEATH, NA, NA, NULL); + addflag(lastot->flags, F_SPELLLEVEL, 3, NA, NA, NULL); + addflag(lastot->flags, F_AICASTATVICTIM, NA, NA, NA, NULL); + // l8 + addot(OT_S_INFINITEDEATH, "infinite death", "Annihilates all life on the caster's level!", MT_NOTHING, 0, OC_SPELL); + addflag(lastot->flags, F_SPELLSCHOOL, SS_DEATH, NA, NA, NULL); + addflag(lastot->flags, F_SPELLLEVEL, 8, NA, NA, NULL); + addflag(lastot->flags, F_AICASTANYWHERE, NA, NA, NA, NULL); + /////////////////// + // divination + /////////////////// + // l1 + addot(OT_S_DETECTLIFE, "detect life", "Senses life near the caster.", MT_NOTHING, 0, OC_SPELL); + addflag(lastot->flags, F_SPELLSCHOOL, SS_DIVINATION, NA, NA, NULL); + addflag(lastot->flags, F_SPELLLEVEL, 1, NA, NA, NULL); + // l2 addot(OT_S_MAPPING, "sense surroundings", "Magically imbues the caster with a map of his/her surroundings.", MT_NOTHING, 0, OC_SPELL); + addflag(lastot->flags, F_SPELLSCHOOL, SS_DIVINATION, NA, NA, NULL); + addflag(lastot->flags, F_SPELLLEVEL, 2, NA, NA, NULL); + + // l7 + addot(OT_S_DETECTAURA, "detect aura", "Senses holiness or evil near the caster.", MT_NOTHING, 0, OC_SPELL); + addflag(lastot->flags, F_SPELLSCHOOL, SS_DIVINATION, NA, NA, NULL); + addflag(lastot->flags, F_SPELLLEVEL, 7, NA, NA, NULL); + // l8 + addot(OT_S_IDENTIFY, "identification", "Completely identifies any one item.", MT_NOTHING, 0, OC_SPELL); + addflag(lastot->flags, F_SPELLSCHOOL, SS_DIVINATION, NA, NA, NULL); + addflag(lastot->flags, F_SPELLLEVEL, 8, NA, NA, NULL); + /////////////////// + // elemental + /////////////////// + // l2 + addot(OT_S_FIREDART, "flame dart", "Fires a medium-sized dart of fire.", MT_NOTHING, 0, OC_SPELL); + addflag(lastot->flags, F_SPELLSCHOOL, SS_ELEMENTAL, NA, NA, NULL); + addflag(lastot->flags, F_SPELLLEVEL, 2, NA, NA, NULL); + addflag(lastot->flags, F_AICASTATVICTIM, NA, NA, NA, NULL); + addot(OT_S_CONECOLD, "cone of cold", "Shoots a blast of freezing air.", MT_NOTHING, 0, OC_SPELL); + addflag(lastot->flags, F_SPELLSCHOOL, SS_ELEMENTAL, NA, NA, NULL); + addflag(lastot->flags, F_SPELLLEVEL, 2, NA, NA, NULL); + addflag(lastot->flags, F_AICASTATVICTIM, NA, NA, NA, NULL); + // l3 + addot(OT_S_FLAMEPILLAR, "flame pillar", "Creates a tall pillar of flame.", MT_NOTHING, 0, OC_SPELL); + addflag(lastot->flags, F_SPELLSCHOOL, SS_ELEMENTAL, NA, NA, NULL); + addflag(lastot->flags, F_SPELLLEVEL, 3, NA, NA, NULL); + addflag(lastot->flags, F_AICASTATVICTIM, NA, NA, NA, NULL); + // l4 + addot(OT_S_FIREBALL, "fireball", "Creates a huge ball of fire.", MT_NOTHING, 0, OC_SPELL); + addflag(lastot->flags, F_SPELLSCHOOL, SS_ELEMENTAL, NA, NA, NULL); + addflag(lastot->flags, F_SPELLLEVEL, 4, NA, NA, NULL); + addflag(lastot->flags, F_AICASTATVICTIM, NA, NA, NA, NULL); // TODO: should be "near victim" + /////////////////// + // gravity + /////////////////// + // l4 + addot(OT_S_SLOW, "slowness", "Decreases the speed of the target.", MT_NOTHING, 0, OC_SPELL); + addflag(lastot->flags, F_SPELLSCHOOL, SS_GRAVITY, NA, NA, NULL); + addflag(lastot->flags, F_SPELLLEVEL, 4, NA, NA, NULL); + addflag(lastot->flags, F_AICASTATVICTIM, NA, NA, NA, NULL); + // l5 + addot(OT_S_GRAVBOOST, "boost gravity", "Greatly increases gravity around the target, stopping them from moving.", MT_NOTHING, 0, OC_SPELL); + addflag(lastot->flags, F_SPELLSCHOOL, SS_GRAVITY, NA, NA, NULL); + addflag(lastot->flags, F_SPELLLEVEL, 5, NA, NA, NULL); + addflag(lastot->flags, F_AICASTATVICTIM, NA, NA, NA, NULL); + // l6 + addot(OT_S_HASTE, "haste", "Increases the speed of the target.", MT_NOTHING, 0, OC_SPELL); + addflag(lastot->flags, F_SPELLSCHOOL, SS_GRAVITY, NA, NA, NULL); + addflag(lastot->flags, F_SPELLLEVEL, 6, NA, NA, NULL); + addflag(lastot->flags, F_AICASTATSELF, NA, NA, NA, NULL); + /////////////////// + // life + /////////////////// + // l1 + addot(OT_S_HEALINGMIN, "minor healing", "Restores 1-8 health to the caster.", MT_NOTHING, 0, OC_SPELL); + addflag(lastot->flags, F_SPELLSCHOOL, SS_LIFE, NA, NA, NULL); + addflag(lastot->flags, F_SPELLLEVEL, 1, NA, NA, NULL); + addflag(lastot->flags, F_AICASTATSELF, NA, NA, NA, NULL); + addot(OT_S_TURNUNDEAD, "turn undead", "Instills fear in undead creatures. Power depends on caster's skill.", MT_NOTHING, 0, OC_SPELL); + addflag(lastot->flags, F_SPELLSCHOOL, SS_LIFE, NA, NA, NULL); + addflag(lastot->flags, F_SPELLLEVEL, 1, NA, NA, NULL); + // l2 + addot(OT_S_HEALING, "healing", "Restores 10-20 health to the caster.", MT_NOTHING, 0, OC_SPELL); + addflag(lastot->flags, F_SPELLSCHOOL, SS_LIFE, NA, NA, NULL); + addflag(lastot->flags, F_SPELLLEVEL, 2, NA, NA, NULL); + addflag(lastot->flags, F_AICASTATSELF, NA, NA, NA, NULL); + /////////////////// + // mental + /////////////////// + // l2 + addot(OT_S_MINDSCAN, "mind scan", "Reveals detailed information about the target.", MT_NOTHING, 0, OC_SPELL); + addflag(lastot->flags, F_SPELLSCHOOL, SS_MENTAL, NA, NA, NULL); + addflag(lastot->flags, F_SPELLLEVEL, 2, NA, NA, NULL); + addot(OT_S_TELEKINESIS, "telekinesis", "Mentally move or manipulate nearby objects.", MT_NOTHING, 0, OC_SPELL); + addflag(lastot->flags, F_SPELLSCHOOL, SS_MENTAL, NA, NA, NULL); + addflag(lastot->flags, F_SPELLLEVEL, 2, NA, NA, NULL); + // TODO: hardcode how ai casts this + /////////////////// + // modification + /////////////////// + // l1 + addot(OT_S_INSCRIBE, "inscribe", "Creates a magical inscription viewable to anyone standing nearby.", MT_NOTHING, 0, OC_SPELL); + addflag(lastot->flags, F_SPELLSCHOOL, SS_MODIFICATION, NA, NA, NULL); + addflag(lastot->flags, F_SPELLLEVEL, 1, NA, NA, NULL); + addot(OT_S_LIGHT, "light", "Creates a permenant light source centred on the caster.", MT_NOTHING, 0, OC_SPELL); + addflag(lastot->flags, F_SPELLSCHOOL, SS_MODIFICATION, NA, NA, NULL); + addflag(lastot->flags, F_SPELLLEVEL, 1, NA, NA, NULL); + addflag(lastot->flags, F_AICASTANYWHERE, NA, NA, NA, NULL); + // l2 + addot(OT_S_FREEZEOB, "freezing touch", "Permenantly changes the next object touched into solid ice.", MT_NOTHING, 0, OC_SPELL); + addflag(lastot->flags, F_SPELLSCHOOL, SS_MODIFICATION, NA, NA, NULL); + addflag(lastot->flags, F_SPELLLEVEL, 2, NA, NA, NULL); + // l4 + addot(OT_S_GASEOUSFORM, "gaseous form", "Changes the caster into a cloud of gas.", MT_NOTHING, 0, OC_SPELL); + addflag(lastot->flags, F_SPELLSCHOOL, SS_MODIFICATION, NA, NA, NULL); + addflag(lastot->flags, F_SPELLLEVEL, 4, NA, NA, NULL); + addflag(lastot->flags, F_AICASTATSELF, NA, NA, NA, NULL); + // l6 + addot(OT_S_POLYMORPHRND, "polymorph", "Transmutes the target into a random living race.", MT_NOTHING, 0, OC_SPELL); + addflag(lastot->flags, F_SPELLSCHOOL, SS_MODIFICATION, NA, NA, NULL); + addflag(lastot->flags, F_SPELLLEVEL, 6, NA, NA, NULL); + addflag(lastot->flags, F_AICASTATVICTIM, NA, NA, NA, NULL); + // l7 + addot(OT_S_POLYMORPH, "controlled polymorph", "Transmutes the target into a specified living race.", MT_NOTHING, 0, OC_SPELL); + addflag(lastot->flags, F_SPELLSCHOOL, SS_MODIFICATION, NA, NA, NULL); + addflag(lastot->flags, F_SPELLLEVEL, 7, NA, NA, NULL); + // TODO: hardcode how ai casts this spell + /////////////////// + // summoning + /////////////////// + // l2 + addot(OT_S_CREATEMONSTER, "create monster", "Summons a (probably hostile) monster to a nearby location.", MT_NOTHING, 0, OC_SPELL); + addflag(lastot->flags, F_SPELLSCHOOL, SS_SUMMONING, NA, NA, NULL); + addflag(lastot->flags, F_SPELLLEVEL, 2, NA, NA, NULL); + addflag(lastot->flags, F_AICASTANYWHERE, NA, NA, NA, NULL); + /////////////////// + // translocation + /////////////////// + // l4 + addot(OT_S_TELEPORTRND, "random teleportation", "Causes the caster to teleport to a random location within the same level.", MT_NOTHING, 0, OC_SPELL); + addflag(lastot->flags, F_SPELLSCHOOL, SS_TRANSLOCATION, NA, NA, NULL); + addflag(lastot->flags, F_SPELLLEVEL, 4, NA, NA, NULL); + addflag(lastot->flags, F_AICASTATSELF, NA, NA, NA, NULL); + // l5 + addot(OT_S_DISPERSAL, "dispersal", "Scatters everything in the target cell around the area.", MT_NOTHING, 0, OC_SPELL); + addflag(lastot->flags, F_SPELLSCHOOL, SS_TRANSLOCATION, NA, NA, NULL); + addflag(lastot->flags, F_SPELLLEVEL, 5, NA, NA, NULL); + addflag(lastot->flags, F_AICASTATVICTIM, NA, NA, NA, NULL); + addot(OT_S_TELEPORT, "teleportation", "Causes the caster to teleport to a specified location within the same level.", MT_NOTHING, 0, OC_SPELL); + addflag(lastot->flags, F_SPELLSCHOOL, SS_TRANSLOCATION, NA, NA, NULL); + addflag(lastot->flags, F_SPELLLEVEL, 5, NA, NA, NULL); + addflag(lastot->flags, F_AICASTATSELF, NA, NA, NA, NULL); + // l6 + addot(OT_S_LEVTELEPORT, "level teleport", "Teleports the user to a different dungeon level.", MT_NOTHING, 0, OC_SPELL); + addflag(lastot->flags, F_SPELLSCHOOL, SS_TRANSLOCATION, NA, NA, NULL); + addflag(lastot->flags, F_SPELLLEVEL, 6, NA, NA, NULL); + addflag(lastot->flags, F_AICASTATSELF, NA, NA, NA, NULL); + + /////////////////// + // wild + /////////////////// + // l1 + addot(OT_S_MANASPIKE, "mana spike", "Fires a small bolt of pure magical energy.", MT_NOTHING, 0, OC_SPELL); + addflag(lastot->flags, F_SPELLSCHOOL, SS_WILD, NA, NA, NULL); + addflag(lastot->flags, F_SPELLLEVEL, 1, NA, NA, NULL); + addflag(lastot->flags, F_AICASTATVICTIM, NA, NA, NA, NULL); + // l2 + addot(OT_S_ENERGYBOLT, "energy bolt", "Fires a medium-sized bolt of pure magical energy.", MT_NOTHING, 0, OC_SPELL); + addflag(lastot->flags, F_SPELLSCHOOL, SS_WILD, NA, NA, NULL); + addflag(lastot->flags, F_SPELLLEVEL, 2, NA, NA, NULL); + addflag(lastot->flags, F_AICASTATVICTIM, NA, NA, NA, NULL); + // l3 + addot(OT_S_ENERGYBLAST, "energy blast", "Causes a ring of energy to expand from the caster, hitting anything in sight.", MT_NOTHING, 0, OC_SPELL); + addflag(lastot->flags, F_SPELLSCHOOL, SS_WILD, NA, NA, NULL); + addflag(lastot->flags, F_SPELLLEVEL, 3, NA, NA, NULL); + addflag(lastot->flags, F_AICASTANYWHERE, NA, NA, NA, NULL); + addot(OT_S_FLASH, "flash", "Causes a very bright flash, stunning anyone who sees it.", MT_NOTHING, 0, OC_SPELL); + addflag(lastot->flags, F_SPELLSCHOOL, SS_WILD, NA, NA, NULL); + addflag(lastot->flags, F_SPELLLEVEL, 3, NA, NA, NULL); + addflag(lastot->flags, F_AICASTANYWHERE, NA, NA, NA, NULL); + + + // divine powers + addot(OT_S_WISH, "wish", "Grants the caster any item of their choice (with some limitations).", MT_NOTHING, 0, OC_SPELL); + addflag(lastot->flags, F_SPELLLEVEL, 9, NA, NA, NULL); + addflag(lastot->flags, F_SPELLSCHOOL, SS_DIVINE, NA, NA, NULL); + // abilities + addot(OT_A_JUMP, "jump", "You can leap large distances.", MT_NOTHING, 0, OC_ABILITY); + addflag(lastot->flags, F_SPELLSCHOOL, SS_ABILITY, NA, NA, NULL); + //addflag(lastot->flags, F_SPELLLETTER, NA, NA, NA, "j"); + + + // assign letters to spells/abilities + /* + ch = 'a' - 1; + + // foreach spell/abil school + for (i = 0; i < SS_LAST; i++) { + for (ot = objecttype ; ot ; ot = ot->next) { + if ((ot->obclass->id == OC_SPELL) || (ot->obclass->id == OC_ABILITY)) { + // if school matches + if (hasflagval(ot->flags, F_SPELLSCHOOL, i, NA, NA, NULL)) { + if (!hasflag(ot->flags, F_SPELLLETTER)) { + char buf[2]; + int found = B_TRUE; + + while (found) { + objecttype_t *ot2; + // next letter! + if (ch == 'z') { + ch = '1'; + } else if (ch == ':') { + ch = 'A'; + } else { + ch++; + } + buf[0] = ch; + buf[1] = '\0'; + // check nothing else has our current letter... + found = B_FALSE; + for (ot2 = objecttype ; ot2 ; ot2 = ot2->next) { + if (hasflagval(ot2->flags, F_SPELLLETTER, NA, NA, NA, buf)) { + found = B_TRUE; + } + } + } + + addflag(ot->flags, F_SPELLLETTER, NA, NA, NA, buf); + } + } + } + } + } + */ + + /* + addflag(lastot->flags, F_SPELLLETTER, NA, NA, NA, "e"); + */ + + // tools + addot(OT_POCKETWATCH, "pocket watch", "A portable timekeeping device made to be carried in a pocket.", MT_METAL, 0.1, OC_TECH); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 60, NA, NULL); + addflag(lastot->flags, F_OPERABLE, B_TRUE, NA, NA, NULL); + addot(OT_DIGITALWATCH, "digital watch", "An electronic timekeeping device which shows the time as a number.", MT_METAL, 0.1, OC_TECH); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 50, NA, NULL); + addflag(lastot->flags, F_OPERABLE, B_TRUE, NA, NA, NULL); + + addot(OT_BLINDFOLD, "blindfold", "Short length of wide cloth, used for blocking eyesight.", MT_CLOTH, 0.01, OC_TECH); + addflag(lastot->flags, F_GOESON, BP_EYES, NA, NA, NULL); + addflag(lastot->flags, F_EQUIPCONFER, F_BLIND, B_TRUE, NA, NULL); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 60, NA, NULL); + + addot(OT_C4, "block of c4", "A highly explosive plastic which explodes a medium time after activation.", MT_PLASTIC, 1, OC_TECH); + addflag(lastot->flags, F_STACKABLE, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 25, NA, NULL); + addflag(lastot->flags, F_OPERABLE, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_OPERONOFF, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_DAMAGABLE, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_CHARGES, 5, 5, NA, NULL); + addflag(lastot->flags, F_DONTSHOWCHARGES, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_RECHARGEWHENOFF, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_NOOBDAMTEXT, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_NOOBDIETEXT, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_EXPLODEONDEATH, 30, B_BIG, B_IFACTIVATED, NULL); + addflag(lastot->flags, F_GRENADE, B_TRUE, NA, NA, NULL); + + addot(OT_BUGLAMP, "glowing flask", "A glass flask with a glowbug corpse inside.", MT_GLASS, 0.3, OC_TECH); + addflag(lastot->flags, F_NOBLESS, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_PRODUCESLIGHT, 2, NA, NA, NULL); + addflag(lastot->flags, F_HOLDCONFER, F_PRODUCESLIGHT, 2, IFKNOWN, NULL); + + addot(OT_CREDITCARD, "credit card", "A rectangular plastic card.", MT_PLASTIC, 0.01, OC_TECH); + addflag(lastot->flags, F_STACKABLE, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_NOBLESS, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 70, NA, NULL); + addflag(lastot->flags, F_PICKLOCKS, 5, NA, NA, NULL); + addflag(lastot->flags, F_OPERABLE, B_TRUE, NA, NA, NULL); + + addot(OT_FLASHBANG, "flashbang", "A stun grenade which temporarily blinds all within sight.", MT_METAL, 1, OC_TECH); + addflag(lastot->flags, F_STACKABLE, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 40, NA, NULL); + addflag(lastot->flags, F_OPERABLE, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_OPERONOFF, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_DAMAGABLE, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_CHARGES, 2, 2, NA, NULL); + addflag(lastot->flags, F_DONTSHOWCHARGES, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_RECHARGEWHENOFF, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_NOOBDAMTEXT, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_NOOBDIETEXT, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_FLASHONDEATH, 4, NA, B_IFACTIVATED, NULL); + addflag(lastot->flags, F_FLASHONDAM, 4, NA, B_IFACTIVATED, NULL); + addflag(lastot->flags, F_GRENADE, B_TRUE, NA, NA, NULL); + + addot(OT_GRENADE, "grenade", "An explosive weapon which explodes a short time after activation.", MT_METAL, 1, OC_TECH); + addflag(lastot->flags, F_STACKABLE, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 30, NA, NULL); + addflag(lastot->flags, F_OPERABLE, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_OPERONOFF, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_DAMAGABLE, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_CHARGES, 2, 2, NA, NULL); + addflag(lastot->flags, F_DONTSHOWCHARGES, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_RECHARGEWHENOFF, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_NOOBDAMTEXT, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_NOOBDIETEXT, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_EXPLODEONDEATH, 10, NA, B_IFACTIVATED, NULL); + addflag(lastot->flags, F_EXPLODEONDAM, 10, NA, B_IFACTIVATED, NULL); + addflag(lastot->flags, F_GRENADE, B_TRUE, NA, NA, NULL); + + + addot(OT_INFOVISOR, "infovisor", "Sleek looking metal visor which displays info directly into the retina.", MT_METAL, 0.2, OC_TECH); + addflag(lastot->flags, F_GOESON, BP_EYES, NA, NA, NULL); + addflag(lastot->flags, F_EQUIPCONFER, F_EXTRAINFO, B_TRUE, NA, NULL); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 30, NA, NULL); + + addot(OT_INSECTICIDE, "can of insecticide", "A spraycan containing poisonous chemicals.", MT_METAL, 0.5, OC_TECH); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 70, NA, NULL); + addflag(lastot->flags, F_OPERABLE, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_OPERUSECHARGE, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_OPERNEEDTARGET, TT_MONSTER, NA, NA, "Where will you spray?"); + addflag(lastot->flags, F_RNDCHARGES, 5, 10, NA, NULL); + + addot(OT_JETPACK, "jet pack", "A portable ion-thruster which allows the wearer to fly.", MT_METAL, 10, OC_TECH); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 30, NA, NULL); + addflag(lastot->flags, F_OPERABLE, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_OPERONOFF, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_RNDCHARGES, 10, 30, NA, NULL); + addflag(lastot->flags, F_REFILLWITH, OT_POT_OIL, NA, NA, NULL); + addflag(lastot->flags, F_ACTIVATECONFER, F_FLYING, B_TRUE, NA, NULL); + addflag(lastot->flags, F_ACTIVATECONFER, F_PRODUCESLIGHT, 1, NA, NULL); + + addot(OT_LOCKHACKER, "lock hacker", "A sophisticated machine to manipulate physical locks.", MT_METAL, 3, OC_TECH); + addflag(lastot->flags, F_NOBLESS, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 20, NA, NULL); + addflag(lastot->flags, F_OPERABLE, B_TRUE, NA, NA, NULL); + + addot(OT_LANTERNLED, "LED lantern", "A low-powered but efficient lantern which will last almost forever.", MT_METAL, 0.5, OC_TECH); + addflag(lastot->flags, F_NOBLESS, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 20, NA, NULL); + addflag(lastot->flags, F_OPERABLE, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_OPERONOFF, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_ACTIVATECONFER, F_PRODUCESLIGHT, 2, NA, NULL); + + addot(OT_LANTERNOIL, "oil lantern", "An oil-powered lantern which produces a lot of light.", MT_METAL, 1, OC_TECH); + addflag(lastot->flags, F_NOBLESS, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 55, NA, NULL); + addflag(lastot->flags, F_OPERABLE, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_OPERONOFF, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_ACTIVATECONFER, F_PRODUCESLIGHT, 3, NA, NULL); + addflag(lastot->flags, F_PRODUCESLIGHT, 3, NA, IFACTIVE, NULL); + addflag(lastot->flags, F_RNDCHARGES, 100, 200, NA, NULL); + addflag(lastot->flags, F_REFILLWITH, OT_POT_OIL, NA, NA, NULL); + + addot(OT_LOCKPICK, "lockpick", "An angled piece of metal, used to open locks.", MT_METAL, 0.05, OC_TECH); + addflag(lastot->flags, F_STACKABLE, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_NOBLESS, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 75, NA, NULL); + addflag(lastot->flags, F_PICKLOCKS, 50, B_DIEONFAIL, NA, NULL); + addflag(lastot->flags, F_OPERABLE, B_TRUE, NA, NA, NULL); + + addot(OT_PAPERCLIP, "paperclip", "A thin, looped wire for holding paper together.", MT_METAL, 0.01, OC_TECH); + addflag(lastot->flags, F_STACKABLE, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_NOBLESS, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 70, NA, NULL); + addflag(lastot->flags, F_PICKLOCKS, 25, B_DIEONFAIL, NA, NULL); + addflag(lastot->flags, F_OPERABLE, B_TRUE, NA, NA, NULL); + // can use as a (very bad) weapon too... + addflag(lastot->flags, F_OBATTACKSPEED, SP_NORMAL, NA, NA, NULL); + addflag(lastot->flags, F_DAMTYPE, DT_PIERCE, NA, NA, NULL); + addflag(lastot->flags, F_DAM, 1, 1, NA, NULL); + addflag(lastot->flags, F_ACCURACY, 50, NA, NA, NULL); + + addot(OT_PICKAXE, "pickaxe", "A heavy tool for breaking rock.", MT_METAL, 8, OC_TECH); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 65, NA, NULL); + addflag(lastot->flags, F_OPERABLE, B_TRUE, NA, NA, NULL); + + addot(OT_TELEPAD, "teleport beacon", "A metal cone which will teleport the user to the nearest similar cone.", MT_METAL, 3, OC_TECH); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 40, NA, NULL); + addflag(lastot->flags, F_OPERABLE, B_TRUE, NA, NA, NULL); + + addot(OT_XRAYGOGGLES, "pair of xray goggles", "Bulky looking goggles which allow you to see through walls.", MT_METAL, 0.3, OC_TECH); + addflag(lastot->flags, F_GOESON, BP_EYES, NA, NA, NULL); + addflag(lastot->flags, F_EQUIPCONFER, F_XRAYVIS, 2, NA, NULL); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 25, NA, NULL); // misc + + addot(OT_EMPTYFLASK, "empty flask", "An empty glass flask.", MT_GLASS, 0.2, OC_MISC); + addflag(lastot->flags, F_STACKABLE, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_NOBLESS, B_TRUE, NA, NA, NULL); addflag(lastot->flags, F_GLYPH, NA, NA, NA, "!"); - addflag(lastot->flags, F_RARITY, H_DUNGEON, RR_COMMON, NA, NULL); - addot(OT_BROKENGLASS, "piece of broken glass", "Very sharp shards of broken glass.", MT_GLASS, 0.1, OC_MISC); - addflag(lastot->flags, F_STACKABLE, NA, NA, NA, "^"); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 90, NA, NULL); + addot(OT_EMPTYVIAL, "empty vial", "An empty glass vial.", MT_GLASS, 0.1, OC_MISC); + addflag(lastot->flags, F_STACKABLE, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_NOBLESS, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_GLYPH, NA, NA, NA, "!"); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 70, NA, NULL); + addot(OT_BROKENGLASS, "piece of broken glass", "Sharp shards of broken glass.", MT_GLASS, 0.1, OC_MISC); + addflag(lastot->flags, F_STACKABLE, NA, NA, NA, NULL); + addflag(lastot->flags, F_NUMAPPEAR, 1, 8, NA, NULL); + addflag(lastot->flags, F_NOBLESS, B_TRUE, NA, NA, NULL); addflag(lastot->flags, F_GLYPH, NA, NA, NA, "^"); - addflag(lastot->flags, F_SHARP, NA, NA, NA, NULL); - addflag(lastot->flags, F_RARITY, H_DUNGEON, RR_UNCOMMON, NA, NULL); - addot(OT_PUDDLEWATER, "small puddle of water", "A small puddle of water.", MT_WATER, 0, OC_MISC); - addflag(lastot->flags, F_RARITY, H_DUNGEON, RR_COMMON, NA, NULL); + addflag(lastot->flags, F_SHARP, 1, 2, NA, NULL); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 65, NA, NULL); + addot(OT_CALTROP, "caltrop", "Connected metal spikes arranged such that one will always point upwards.", MT_METAL, 0.2, OC_MISC); + addflag(lastot->flags, F_STACKABLE, NA, NA, NA, NULL); + addflag(lastot->flags, F_NUMAPPEAR, 1, 3, NA, NULL); + addflag(lastot->flags, F_NOBLESS, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_GLYPH, NA, NA, NA, "^"); + addflag(lastot->flags, F_SHARP, 2, 5, NA, NULL); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 60, NA, NULL); + addot(OT_ICECHUNK, "chunk of ice", "A chunk of ice.", MT_ICE, 0.5, OC_MISC); + addflag(lastot->flags, F_EDIBLE, B_TRUE, 3, NA, NULL); + addflag(lastot->flags, F_STACKABLE, NA, NA, NA, NULL); + addflag(lastot->flags, F_NOBLESS, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_GLYPH, NA, NA, NA, ","); + addflag(lastot->flags, F_DIECONVERT, NA, NA, NA, "small puddle of water"); + addflag(lastot->flags, F_DIECONVERTTEXT, NA, NA, NA, "melts"); + addflag(lastot->flags, F_DIECONVERTTEXTPL, NA, NA, NA, "melt"); + addflag(lastot->flags, F_OBHP, 10, 10, NA, NULL); + addflag(lastot->flags, F_OBHPDRAIN, 1, NA, NA, NULL); + addflag(lastot->flags, F_NOOBDAMTEXT, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_DAMAGABLE, B_TRUE, NA, NA, NULL); + addot(OT_SOGGYPAPER, "lump of soggy paper", "A useless lump of soggy paper.", MT_WETPAPER, 0.1, OC_MISC); + addflag(lastot->flags, F_STACKABLE, NA, NA, NA, NULL); + addflag(lastot->flags, F_NOBLESS, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_GLYPH, NA, NA, NA, "?"); + + addot(OT_VOMITPOOL, "pool of vomit", "A disgusting pool of regurgitated food.", MT_WATER, 0, OC_MISC); + addflag(lastot->flags, F_STACKABLE, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_NOBLESS, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_GLYPH, NA, NA, NA, ","); addflag(lastot->flags, F_NOPICKUP, B_TRUE, NA, NA, NULL); - // armour - addot(OT_BOOTSLEATHER, "pair of leather boots", "A stout pair of leather boots.", MT_LEATHER, 4, OC_ARMOUR); + addot(OT_SLIMEPOOL, "pool of slime", "A disgusting mass of sticky slime.", MT_WATER, 0, OC_MISC); + addflag(lastot->flags, F_STACKABLE, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_NOBLESS, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_GLYPH, NA, NA, NA, ","); + addflag(lastot->flags, F_NOPICKUP, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_EDIBLE, B_TRUE, 2, NA, NULL); + + addot(OT_PUDDLEWATER, "small puddle of water", "A small puddle of water.", MT_WATER, 0, OC_MISC); + addflag(lastot->flags, F_STACKABLE, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_NOBLESS, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_GLYPH, NA, NA, NA, "{"); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 75, NA, NULL); + addflag(lastot->flags, F_NOPICKUP, B_TRUE, NA, NA, NULL); + + addot(OT_BLOODSTAIN, "blood stain", "A small pool of blood.", MT_BLOOD, 0, OC_MISC); + addflag(lastot->flags, F_STACKABLE, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_NOBLESS, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_GLYPH, NA, NA, NA, ","); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 75, NA, NULL); + addflag(lastot->flags, F_NOPICKUP, B_TRUE, NA, NA, NULL); + + addot(OT_BLOODPOOL, "pool of blood", "A large pool of blood.", MT_BLOOD, 0, OC_MISC); + addflag(lastot->flags, F_STACKABLE, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_NOBLESS, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_GLYPH, NA, NA, NA, ","); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 65, NA, NULL); + addflag(lastot->flags, F_NOPICKUP, B_TRUE, NA, NA, NULL); + + addot(OT_WOODENBARREL, "wooden barrel", "A solid wooden barrel.", MT_WOOD, 20, OC_MISC); + addflag(lastot->flags, F_RARITY, H_ALL, 75, NA, NULL); + addflag(lastot->flags, F_GLYPH, NA, NA, NA, "("); + addflag(lastot->flags, F_IMPASSABLE, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_PUSHABLE, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_NOPICKUP, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_NOBLESS, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_DAMAGABLE, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_OBHP, 3, 6, NA, NULL); + + addot(OT_WOODENSTOOL, "wooden footstool", "A small, wooden footstool.", MT_WOOD, 5, OC_MISC); + addflag(lastot->flags, F_RARITY, H_ALL, 75, NA, NULL); + addflag(lastot->flags, F_GLYPH, NA, NA, NA, "\\"); + addflag(lastot->flags, F_NOBLESS, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_DAMAGABLE, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_OBHP, 4, 4, NA, NULL); + addflag(lastot->flags, F_DTVULN, DT_CHOP, NA, NA, NULL); + + addot(OT_BONE, "bone", "A bone from an unknown creature.", MT_BONE, 0.1, OC_MISC); + addflag(lastot->flags, F_RARITY, H_ALL, 75, NA, NULL); + addflag(lastot->flags, F_GLYPH, NA, NA, NA, ","); + addflag(lastot->flags, F_NOBLESS, B_TRUE, NA, NA, NULL); + + // effects + addot(OT_FIRELARGE, "large fire", "A large, roaring inferno.", MT_FIRE, 0, OC_EFFECT); + addflag(lastot->flags, F_GLYPH, NA, NA, NA, "}"); + addflag(lastot->flags, F_NOPICKUP, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_DIECONVERTTEXT, NA, NA, NA, "dies down a little"); + addflag(lastot->flags, F_DIECONVERT, NA, NA, NA, "medium fire"); + addflag(lastot->flags, F_OBHP, 3, 3, NA, NULL); + addflag(lastot->flags, F_OBHPDRAIN, 1, NA, NA, NULL); + addflag(lastot->flags, F_NOOBDAMTEXT, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_WALKDAM, 12, DT_FIRE, NA, NULL); + addflag(lastot->flags, F_DAMAGABLE, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_PRODUCESLIGHT, 3, NA, NA, NULL); + addot(OT_FIREMED, "medium fire", "A medium-sized roaring fire.", MT_FIRE, 0, OC_EFFECT); + addflag(lastot->flags, F_GLYPH, NA, NA, NA, "}"); + addflag(lastot->flags, F_NOPICKUP, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_DIECONVERT, NA, NA, NA, "small fire"); + addflag(lastot->flags, F_DIECONVERTTEXT, NA, NA, NA, "dies down a little"); + addflag(lastot->flags, F_OBHP, 3, 3, NA, NULL); + addflag(lastot->flags, F_OBHPDRAIN, 1, NA, NA, NULL); + addflag(lastot->flags, F_NOOBDAMTEXT, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_WALKDAM, 7, DT_FIRE, NA, NULL); + addflag(lastot->flags, F_DAMAGABLE, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_PRODUCESLIGHT, 2, NA, NA, NULL); + addot(OT_FIRESMALL, "small fire", "A small blaze.", MT_FIRE, 0, OC_EFFECT); + addflag(lastot->flags, F_GLYPH, NA, NA, NA, "}"); + addflag(lastot->flags, F_NOPICKUP, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_DIETEXT, B_TRUE, NA, NA, "goes out"); + addflag(lastot->flags, F_OBHP, 3, 3, NA, NULL); + addflag(lastot->flags, F_OBHPDRAIN, 1, NA, NA, NULL); + addflag(lastot->flags, F_NOOBDAMTEXT, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_WALKDAM, 3, DT_FIRE, NA, NULL); + addflag(lastot->flags, F_DAMAGABLE, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_PRODUCESLIGHT, 1, NA, NA, NULL); + + + addot(OT_SMOKECLOUD, "cloud of smoke", "A thick cloud of black smoke.", MT_GAS, 0, OC_EFFECT); + addflag(lastot->flags, F_GLYPH, NA, NA, NA, "{"); + addflag(lastot->flags, F_NOPICKUP, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_DIECONVERTTEXT, NA, NA, NA, "thins out a little"); + addflag(lastot->flags, F_DIECONVERT, NA, NA, NA, "puff of smoke"); + addflag(lastot->flags, F_OBHP, 3, 3, NA, NULL); + addflag(lastot->flags, F_OBHPDRAIN, 1, NA, NA, NULL); + addflag(lastot->flags, F_NOOBDAMTEXT, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_BLOCKSVIEW, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_DAMAGABLE, B_TRUE, NA, NA, NULL); + + addot(OT_SMOKEPUFF, "puff of smoke", "A small puff of black smoke.", MT_GAS, 0, OC_EFFECT); + addflag(lastot->flags, F_GLYPH, NA, NA, NA, "{"); + addflag(lastot->flags, F_NOPICKUP, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_DIETEXT, B_TRUE, NA, NA, "disperses"); + addflag(lastot->flags, F_OBHP, 2, 2, NA, NULL); + addflag(lastot->flags, F_OBHPDRAIN, 1, NA, NA, NULL); + addflag(lastot->flags, F_NOOBDAMTEXT, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_DAMAGABLE, B_TRUE, NA, NA, NULL); + + addot(OT_POISONCLOUD, "cloud of gas", "A thick cloud of poisonous gas.", MT_GAS, 0, OC_EFFECT); + addflag(lastot->flags, F_GLYPH, NA, NA, NA, "{"); + addflag(lastot->flags, F_NOPICKUP, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_DIECONVERTTEXT, NA, NA, NA, "thins out a little"); + addflag(lastot->flags, F_DIECONVERT, NA, NA, NA, "puff of gas"); + addflag(lastot->flags, F_OBHP, 2, 2, NA, NULL); + addflag(lastot->flags, F_OBHPDRAIN, 1, NA, NA, NULL); + addflag(lastot->flags, F_NOOBDAMTEXT, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_DAMAGABLE, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_WALKDAM, 2, DT_POISONGAS, NA, NULL); + + addot(OT_POISONPUFF, "puff of gas", "A small puff of poisonous gas.", MT_GAS, 0, OC_EFFECT); + addflag(lastot->flags, F_GLYPH, NA, NA, NA, "{"); + addflag(lastot->flags, F_NOPICKUP, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_DIETEXT, B_TRUE, NA, NA, "disperses"); + addflag(lastot->flags, F_OBHP, 2, 2, NA, NULL); + addflag(lastot->flags, F_OBHPDRAIN, 1, NA, NA, NULL); + addflag(lastot->flags, F_NOOBDAMTEXT, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_DAMAGABLE, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_WALKDAM, 2, DT_POISONGAS, NA, NULL); + + addot(OT_MAGICBARRIER, "magical barrier", "A glowing, impassable barrier of magical energy.", MT_MAGIC, 0, OC_EFFECT); + addflag(lastot->flags, F_GLYPH, NA, NA, NA, "#"); + addflag(lastot->flags, F_NOPICKUP, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_IMPASSABLE, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_DAMAGABLE, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_OBHPDRAIN, 1, NA, NA, NULL); + addflag(lastot->flags, F_NOOBDAMTEXT, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_DIETEXT, B_TRUE, NA, NA, "vanishes"); + addflag(lastot->flags, F_PRODUCESLIGHT, 1, NA, NA, NULL); + + // armour - body + addot(OT_COTTONSHIRT, "cotton shirt", "A comfortable white cotton shirt.", MT_CLOTH, 0.7, OC_ARMOUR); + addflag(lastot->flags, F_RARITY, H_ALL, 80, NA, NULL); + addflag(lastot->flags, F_GOESON, BP_BODY, NA, NA, NULL); + addflag(lastot->flags, F_ARMOURRATING, 0, NA, NA, NULL); + addflag(lastot->flags, F_EVASION, 0, NA, NA, NULL); + addflag(lastot->flags, F_OBHP, 1, 1, NA, NULL); + addot(OT_ARMOURLEATHER, "leather armour", "Body armour created from soft leather.", MT_LEATHER, 10, OC_ARMOUR); + addflag(lastot->flags, F_RARITY, H_ALL, 70, NA, NULL); + addflag(lastot->flags, F_GOESON, BP_BODY, NA, NA, NULL); + addflag(lastot->flags, F_ARMOURRATING, 4, NA, NA, NULL); + addflag(lastot->flags, F_EVASION, 0, NA, NA, NULL); + addflag(lastot->flags, F_OBHP, 20, 20, NA, NULL); + addot(OT_FLAKJACKET, "flak jacket", "Metal body armour, designed to stop bullets.", MT_METAL, 20, OC_ARMOUR); + addflag(lastot->flags, F_RARITY, H_ALL, 25, NA, NULL); + addflag(lastot->flags, F_GOESON, BP_BODY, NA, NA, NULL); + addflag(lastot->flags, F_ARMOURRATING, 8, NA, NA, NULL); + addflag(lastot->flags, F_EVASION, -20, NA, NA, NULL); + addflag(lastot->flags, F_OBHP, 40, 40, NA, NULL); + addot(OT_OVERALLS, "pair of overalls", "Well-made, brightly coloured workman overalls.", MT_CLOTH, 1, OC_ARMOUR); + addflag(lastot->flags, F_RARITY, H_ALL, 75, NA, NULL); + addflag(lastot->flags, F_GOESON, BP_LEGS, NA, NA, NULL); + addflag(lastot->flags, F_ARMOURRATING, 2, NA, NA, NULL); + addflag(lastot->flags, F_EVASION, 0, NA, NA, NULL); + addflag(lastot->flags, F_OBHP, 10, 10, NA, NULL); + addot(OT_SILKSHIRT, "silk shirt", "A lightweight, comfortable white silk shirt.", MT_CLOTH, 0.5, OC_ARMOUR); + addflag(lastot->flags, F_RARITY, H_ALL, 60, NA, NULL); + addflag(lastot->flags, F_GOESON, BP_BODY, NA, NA, NULL); + addflag(lastot->flags, F_ARMOURRATING, 0, NA, NA, NULL); + addflag(lastot->flags, F_EVASION, 0, NA, NA, NULL); + addflag(lastot->flags, F_OBHP, 1, 1, NA, NULL); + // armour - shoulders + addot(OT_CLOAK, "cloak", "A standard leather cloak.", MT_LEATHER, 4, OC_ARMOUR); + addflag(lastot->flags, F_RARITY, H_ALL, 80, NA, NULL); + addflag(lastot->flags, F_GOESON, BP_SHOULDERS, NA, NA, NULL); + addflag(lastot->flags, F_ARMOURRATING, 1, NA, NA, NULL); + addflag(lastot->flags, F_EVASION, -5, NA, NA, NULL); + addflag(lastot->flags, F_OBHP, 6, 6, NA, NULL); + addot(OT_VELVETROBE, "velvet robe", "A luxurious velvet robe.", MT_CLOTH, 4, OC_ARMOUR); + addflag(lastot->flags, F_RARITY, H_ALL, 65, NA, NULL); + addflag(lastot->flags, F_GOESON, BP_SHOULDERS, NA, NA, NULL); + addflag(lastot->flags, F_ARMOURRATING, 1, NA, NA, NULL); + addflag(lastot->flags, F_EVASION, -20, NA, NA, NULL); + addflag(lastot->flags, F_OBHP, 4, 4, NA, NULL); + // armour - legs + addot(OT_CLOTHTROUSERS, "pair of cloth trousers", "A rough pair of cloth trousers.", MT_CLOTH, 2, OC_ARMOUR); + addflag(lastot->flags, F_RARITY, H_ALL, 80, NA, NULL); + addflag(lastot->flags, F_GOESON, BP_LEGS, NA, NA, NULL); + addflag(lastot->flags, F_ARMOURRATING, 1, NA, NA, NULL); + addflag(lastot->flags, F_EVASION, 0, NA, NA, NULL); + addflag(lastot->flags, F_OBHP, 2, 2, NA, NULL); + addot(OT_RIDINGTROUSERS, "pair of riding trousers", "A fitted pair of leather trousers.", MT_LEATHER, 2, OC_ARMOUR); + addflag(lastot->flags, F_RARITY, H_ALL, 70, NA, NULL); + addflag(lastot->flags, F_GOESON, BP_LEGS, NA, NA, NULL); + addflag(lastot->flags, F_ARMOURRATING, 2, NA, NA, NULL); + addflag(lastot->flags, F_EVASION, 0, NA, NA, NULL); + addflag(lastot->flags, F_OBHP, 5, 5, NA, NULL); + addot(OT_COMBATPANTS, "pair of combat pants", "An armoured pair of camoflauged trousers.", MT_CLOTH, 2, OC_ARMOUR); + addflag(lastot->flags, F_RARITY, H_ALL, 65, NA, NULL); + addflag(lastot->flags, F_GOESON, BP_LEGS, NA, NA, NULL); + addflag(lastot->flags, F_ARMOURRATING, 3, NA, NA, NULL); + addflag(lastot->flags, F_EVASION, 0, NA, NA, NULL); + addflag(lastot->flags, F_OBHP, 8, 8, NA, NULL); + // armour - feet + addot(OT_SANDALS, "pair of sandals", "Comfortable pair of open leather sandals.", MT_LEATHER, 1, OC_ARMOUR); + addflag(lastot->flags, F_RARITY, H_ALL, 75, NA, NULL); + addflag(lastot->flags, F_GOESON, BP_FEET, NA, NA, NULL); + addflag(lastot->flags, F_ARMOURRATING, 0, NA, NA, NULL); + addflag(lastot->flags, F_EVASION, 0, NA, NA, NULL); + addflag(lastot->flags, F_OBHP, 1, 1, NA, NULL); + addot(OT_SHOESLEATHER, "pair of leather shoes", "Cheap and rather uncomfortable leather shoes.", MT_LEATHER, 2, OC_ARMOUR); + addflag(lastot->flags, F_RARITY, H_ALL, 85, NA, NULL); addflag(lastot->flags, F_GOESON, BP_FEET, NA, NA, NULL); addflag(lastot->flags, F_ARMOURRATING, 1, NA, NA, NULL); - addot(OT_GLOVESLEATHER, "pair of leather gloves", "A pair of soft leather gloves.", MT_LEATHER, 0.25, OC_ARMOUR); + addflag(lastot->flags, F_EVASION, 0, NA, NA, NULL); + addflag(lastot->flags, F_OBHP, 3, 3, NA, NULL); + addot(OT_BOOTSRUBBER, "pair of rubber boots", "A waterproof (but somewhat cumbersome) pair of rubber boots.", MT_RUBBER, 6, OC_ARMOUR); + addflag(lastot->flags, F_RARITY, H_ALL, 60, NA, NULL); + addflag(lastot->flags, F_GOESON, BP_FEET, NA, NA, NULL); + addflag(lastot->flags, F_ARMOURRATING, 1, NA, NA, NULL); + addflag(lastot->flags, F_EVASION, -10, NA, NA, NULL); // bulky + addflag(lastot->flags, F_OBHP, 8, 8, NA, NULL); + addflag(lastot->flags, F_EQUIPCONFER, F_DTRESIST, DT_ELECTRIC, NA, NULL); + addot(OT_BOOTSLEATHER, "pair of leather boots", "A stout pair of leather boots.", MT_LEATHER, 4, OC_ARMOUR); + addflag(lastot->flags, F_RARITY, H_ALL, 80, NA, NULL); + addflag(lastot->flags, F_GOESON, BP_FEET, NA, NA, NULL); + addflag(lastot->flags, F_ARMOURRATING, 2, NA, NA, NULL); + addflag(lastot->flags, F_EVASION, 0, NA, NA, NULL); + addflag(lastot->flags, F_OBHP, 5, 5, NA, NULL); + // armour - gloves + addot(OT_GLOVESCLOTH, "pair of cloth gloves", "A pair of soft cloth gloves.", MT_CLOTH, 0.15, OC_ARMOUR); + addflag(lastot->flags, F_RARITY, H_ALL, 80, NA, NULL); + addflag(lastot->flags, F_GOESON, BP_HANDS, NA, NA, NULL); + addflag(lastot->flags, F_ARMOURRATING, 0, NA, NA, NULL); + addflag(lastot->flags, F_EVASION, 0, NA, NA, NULL); + addflag(lastot->flags, F_OBHP, 2, 2, NA, NULL); + addot(OT_GLOVESLEATHER, "pair of leather gloves", "A pair of coarse leather gloves.", MT_LEATHER, 0.25, OC_ARMOUR); + addflag(lastot->flags, F_RARITY, H_ALL, 85, NA, NULL); addflag(lastot->flags, F_GOESON, BP_HANDS, NA, NA, NULL); addflag(lastot->flags, F_ARMOURRATING, 1, NA, NA, NULL); + addflag(lastot->flags, F_EVASION, 0, NA, NA, NULL); + addflag(lastot->flags, F_OBHP, 5, 5, NA, NULL); + addot(OT_GAUNTLETS, "pair of gauntlets", "A durable pair of metal gauntlets.", MT_METAL, 2, OC_ARMOUR); + addflag(lastot->flags, F_RARITY, H_ALL, 65, NA, NULL); + addflag(lastot->flags, F_GOESON, BP_HANDS, NA, NA, NULL); + addflag(lastot->flags, F_ARMOURRATING, 2, NA, NA, NULL); + addflag(lastot->flags, F_EVASION, -3, NA, NA, NULL); + addflag(lastot->flags, F_OBHP, 15, 15, NA, NULL); + // armour - head + addot(OT_SUNHAT, "sun hat", "Wide-brimmed hat made for working in the sun.", MT_CLOTH, 1, OC_ARMOUR); + addflag(lastot->flags, F_RARITY, H_ALL, 75, NA, NULL); + addflag(lastot->flags, F_GOESON, BP_HEAD, NA, NA, NULL); + addflag(lastot->flags, F_ARMOURRATING, 1, NA, NA, NULL); + addflag(lastot->flags, F_EVASION, -5, NA, NA, NULL); + addflag(lastot->flags, F_OBHP, 1, 1, NA, NULL); + addot(OT_CAP, "cap", "Close-fitting headwear with a short shade visor at the front.", MT_CLOTH, 1, OC_ARMOUR); + addflag(lastot->flags, F_RARITY, H_ALL, 80, NA, NULL); + addflag(lastot->flags, F_GOESON, BP_HEAD, NA, NA, NULL); + addflag(lastot->flags, F_ARMOURRATING, 1, NA, NA, NULL); + addflag(lastot->flags, F_EVASION, 0, NA, NA, NULL); + addflag(lastot->flags, F_OBHP, 1, 1, NA, NULL); + addot(OT_GASMASK, "gas mask", "A full face mask which protects the wearer from toxic gasses.", MT_METAL, 1, OC_ARMOUR); + addflag(lastot->flags, F_RARITY, H_ALL, 75, NA, NULL); + addflag(lastot->flags, F_GOESON, BP_HEAD, NA, NA, NULL); + addflag(lastot->flags, F_ARMOURRATING, 2, NA, NA, NULL); + addflag(lastot->flags, F_EVASION, -10, NA, NA, NULL); + addflag(lastot->flags, F_OBHP, 10, 10, NA, NULL); + addflag(lastot->flags, F_EQUIPCONFER, F_DTIMMUNE, DT_POISONGAS, NA, NULL); + addflag(lastot->flags, F_EQUIPCONFER, F_VISRANGEMOD, -5, NA, NULL); + addot(OT_HELM, "helmet", "A plain metal helmet.", MT_METAL, 2, OC_ARMOUR); + addflag(lastot->flags, F_RARITY, H_ALL, 75, NA, NULL); + addflag(lastot->flags, F_GOESON, BP_HEAD, NA, NA, NULL); + addflag(lastot->flags, F_ARMOURRATING, 3, NA, NA, NULL); + addflag(lastot->flags, F_EVASION, 0, NA, NA, NULL); + addflag(lastot->flags, F_OBHP, 15, 15, NA, NULL); + addot(OT_HELMFOOTBALL, "football helmet", "A metal helmet with a grill in front of the face.", MT_METAL, 1, OC_ARMOUR); + addflag(lastot->flags, F_RARITY, H_ALL, 75, NA, NULL); + addflag(lastot->flags, F_GOESON, BP_HEAD, NA, NA, NULL); + addflag(lastot->flags, F_ARMOURRATING, 2, NA, NA, NULL); + addflag(lastot->flags, F_EVASION, -10, NA, NA, NULL); + addflag(lastot->flags, F_OBHP, 10, 10, NA, NULL); + addflag(lastot->flags, F_EQUIPCONFER, F_VISRANGEMOD, -2, NA, NULL); + addot(OT_GOLDCROWN, "golden crown", "A heavy gold crown, encrusted with jewels.", MT_GOLD, 5, OC_ARMOUR); + addflag(lastot->flags, F_RARITY, H_ALL, 25, NA, NULL); + addflag(lastot->flags, F_GOESON, BP_HEAD, NA, NA, NULL); + addflag(lastot->flags, F_ARMOURRATING, 1, NA, NA, NULL); + addflag(lastot->flags, F_EVASION, 0, NA, NA, NULL); + addflag(lastot->flags, F_OBHP, 20, 20, NA, NULL); + addot(OT_HELMBONE, "bone helmet", "Scary-looking helmet made from the bones of an animal (?).", MT_BONE, 1, OC_ARMOUR); + addflag(lastot->flags, F_RARITY, H_ALL, 85, NA, NULL); + addflag(lastot->flags, F_GOESON, BP_HEAD, NA, NA, NULL); + addflag(lastot->flags, F_ARMOURRATING, 2, NA, NA, NULL); + addflag(lastot->flags, F_EVASION, 0, NA, NA, NULL); + addflag(lastot->flags, F_OBHP, 10, 10, NA, NULL); + // armour - eyes + addot(OT_SUNGLASSES, "sunglasses", "Tinted eyewear to protect against sunlight.", MT_PLASTIC, 0.01, OC_ARMOUR); + addflag(lastot->flags, F_RARITY, H_ALL, 70, NA, NULL); + addflag(lastot->flags, F_GOESON, BP_EYES, NA, NA, NULL); + addflag(lastot->flags, F_ARMOURRATING, 0, NA, NA, NULL); + addflag(lastot->flags, F_OBHP, 2, 2, NA, NULL); + addflag(lastot->flags, F_EQUIPCONFER, F_VISRANGEMOD, -4, NA, NULL); + addflag(lastot->flags, F_TINTED, B_TRUE, NA, NA, NULL); + addot(OT_MOTIONSCANNER, "motion scanner", "Small scanning device which detects nearby lifeforms.", MT_METAL, 1.5, OC_ARMOUR); + addflag(lastot->flags, F_RARITY, H_ALL, 30, NA, NULL); + addflag(lastot->flags, F_HOLDCONFER, F_DETECTLIFE, 10, NA, NULL); + addot(OT_NVGOGGLES, "nightvis goggles", "Special goggles which allow the wear to see in the dark.", MT_METAL, 1.5, OC_ARMOUR); + addflag(lastot->flags, F_RARITY, H_ALL, 25, NA, NULL); + addflag(lastot->flags, F_GOESON, BP_EYES, NA, NA, NULL); + addflag(lastot->flags, F_ARMOURRATING, 1, NA, NA, NULL); + addflag(lastot->flags, F_OBHP, 2, 2, NA, NULL); + addflag(lastot->flags, F_EQUIPCONFER, F_SEEINDARK, B_TRUE, NA, NULL); + // armour - shields + addot(OT_BUCKLER, "buckler", "A small, unobtrusive wooden shield.", MT_WOOD, 3.00, OC_ARMOUR); + addflag(lastot->flags, F_RARITY, H_ALL, 80, NA, NULL); + addflag(lastot->flags, F_SHIELD, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_GOESON, BP_SECWEAPON, NA, NA, NULL); + addflag(lastot->flags, F_ARMOURRATING, 4, NA, NA, NULL); + addflag(lastot->flags, F_OBHP, 20, 20, NA, NULL); - // weapons + // rings + addot(OT_RING_INVULN, "ring of invulnerability", "Grants the caster complete immunity to physical harm.", MT_METAL, 0.1, OC_RING); + addflag(lastot->flags, F_EQUIPCONFER, F_INVULNERABLE, NA, NA, NULL); + addot(OT_RING_MPREGEN, "ring of mana", "Slowly regenerates the wearer's mana.", MT_METAL, 0.1, OC_RING); + addflag(lastot->flags, F_RARITY, H_ALL, 50, NA, ""); + addflag(lastot->flags, F_EQUIPCONFER, F_MPREGEN, 1, NA, NULL); + addot(OT_RING_PROTFIRE, "ring of fire immunity", "Grants the caster complete immunity to fire.", MT_METAL, 0.1, OC_RING); + addflag(lastot->flags, F_RARITY, H_ALL, 60, NA, ""); + addflag(lastot->flags, F_EQUIPCONFER, F_DTIMMUNE, DT_FIRE, NA, NULL); + addot(OT_RING_REGENERATION, "ring of regeneration", "Slowly regenerates the wearer's health, even when not resting.", MT_METAL, 0.1, OC_RING); + addflag(lastot->flags, F_RARITY, H_ALL, 50, NA, ""); + addflag(lastot->flags, F_EQUIPCONFER, F_REGENERATES, 1, NA, NULL); + addot(OT_RING_RESISTMAG, "ring of magic resistance", "Renders the wearer immune to most magical effects.", MT_METAL, 0.1, OC_RING); + addflag(lastot->flags, F_RARITY, H_ALL, 25, NA, ""); + addflag(lastot->flags, F_EQUIPCONFER, F_RESISTMAG, 1, NA, NULL); + + // unarmed weapons - note these damage/accuracys can be + // overridded with the lifeform flag F_HASATTACK + // + // DAMTYPE _cannot_ be overridden (yet)! addot(OT_FISTS, "fists", "human fists", MT_FLESH, 0, OC_WEAPON); - addflag(lastot->flags, F_OBATTACKSPEED, SP_FAST, NA, NA, NULL); addflag(lastot->flags, F_DAMTYPE, DT_BASH, NA, NA, NULL); addflag(lastot->flags, F_DAM, 1, 2, NA, NULL); addflag(lastot->flags, F_ACCURACY, 100, NA, NA, NULL); - addot(OT_TEETHT, "tiny teeth", "very low damage teeth object", MT_BONE, 0, OC_WEAPON); - addflag(lastot->flags, F_OBATTACKSPEED, SP_NORMAL, NA, NA, NULL); + addot(OT_TEETH, "teeth", "teeth object", MT_BONE, 0, OC_WEAPON); addflag(lastot->flags, F_DAMTYPE, DT_BITE, NA, NA, NULL); - addflag(lastot->flags, F_DAM, 1, 2, -1, NULL); + addflag(lastot->flags, F_DAM, 1, 2, NA, NULL); addflag(lastot->flags, F_ACCURACY, 100, NA, NA, NULL); - addot(OT_CLAWST, "tiny claws", "very low damage claws", MT_BONE, 0, OC_WEAPON); - addflag(lastot->flags, F_OBATTACKSPEED, SP_NORMAL, NA, NA, NULL); - addflag(lastot->flags, F_DAMTYPE, DT_CLAW, NA, NA, NULL); - addflag(lastot->flags, F_DAM, 1, 2, -1, NULL); - addflag(lastot->flags, F_ACCURACY, 100, NA, NA, NULL); - - addot(OT_CLAWSS, "small claws", "low damage claws", MT_BONE, 0, OC_WEAPON); - addflag(lastot->flags, F_OBATTACKSPEED, SP_NORMAL, NA, NA, NULL); + addot(OT_CLAWS, "claws", "claws object", MT_BONE, 0, OC_WEAPON); addflag(lastot->flags, F_DAMTYPE, DT_CLAW, NA, NA, NULL); addflag(lastot->flags, F_DAM, 1, 2, NA, NULL); addflag(lastot->flags, F_ACCURACY, 100, NA, NA, NULL); + addot(OT_TOUCHPARALYZE, "paralyzing touch", "paralyzing touch object", MT_BONE, 0, OC_WEAPON); + addflag(lastot->flags, F_DAMTYPE, DT_TOUCH, NA, NA, NULL); + addflag(lastot->flags, F_DAM, 0, 1, NA, NULL); + addflag(lastot->flags, F_ACCURACY, 100, NA, NA, NULL); + addflag(lastot->flags, F_HITCONFER, F_PARALYZED, B_TRUE, NA, "2-4"); + addot(OT_TOUCHPARALYZE2, "strong paralyzing touch", "strong paralyzing touch object", MT_BONE, 0, OC_WEAPON); + addflag(lastot->flags, F_DAMTYPE, DT_TOUCH, NA, NA, NULL); + addflag(lastot->flags, F_DAM, 0, 1, NA, NULL); + addflag(lastot->flags, F_ACCURACY, 100, NA, NA, NULL); + addflag(lastot->flags, F_HITCONFER, F_PARALYZED, B_TRUE, NA, "5-10"); + + addot(OT_TAIL, "tail", "tail object", MT_FLESH, 0, OC_WEAPON); + addflag(lastot->flags, F_DAMTYPE, DT_BASH, NA, NA, NULL); + addflag(lastot->flags, F_DAM, 1, 4, NA, NULL); + addflag(lastot->flags, F_ACCURACY, 80, NA, NA, NULL); + + addot(OT_ZAPPER, "zapper", "zapper object", MT_NOTHING, 0, OC_WEAPON); + addflag(lastot->flags, F_DAMTYPE, DT_ELECTRIC, NA, NA, NULL); + addflag(lastot->flags, F_DAM, 1, 2, NA, NULL); + addflag(lastot->flags, F_ACCURACY, 100, NA, NA, NULL); + + // monster weapons + addot(OT_ACIDATTACK, "acidattack", "acid attack object", MT_WATER, 0, OC_WEAPON); + addflag(lastot->flags, F_DAMTYPE, DT_ACID, NA, NA, NULL); + addflag(lastot->flags, F_DAM, 1, 2, NA, NULL); + addflag(lastot->flags, F_ACCURACY, 60, NA, NA, NULL); + // stabbing weapons addot(OT_DAGGER, "dagger", "A short stabbing weapon with a pointed blade.", MT_METAL, 1, OC_WEAPON); - addflag(lastot->flags, F_RARITY, H_DUNGEON, RR_COMMON, NA, NULL); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 90, NA, NULL); addflag(lastot->flags, F_OBATTACKSPEED, SP_FAST, NA, NA, NULL); addflag(lastot->flags, F_DAMTYPE, DT_PIERCE, NA, NA, NULL); addflag(lastot->flags, F_DAM, 1, 4, NA, NULL); addflag(lastot->flags, F_ACCURACY, 100, NA, NA, NULL); + addflag(lastot->flags, F_MISSILE, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_DAMAGABLE, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_OBHP, 2, 2, NA, NULL); + addflag(lastot->flags, F_PICKLOCKS, 10, B_BLUNTONFAIL, NA, NULL); + addot(OT_ORNDAGGER, "ornamental dagger", "This dagger is pretty, but not particularly effective.", MT_METAL, 1, OC_WEAPON); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 50, NA, NULL); + addflag(lastot->flags, F_SHINY, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_OBATTACKSPEED, SP_FAST, NA, NA, NULL); + addflag(lastot->flags, F_DAMTYPE, DT_PIERCE, NA, NA, NULL); + addflag(lastot->flags, F_DAM, 1, 3, NA, NULL); + addflag(lastot->flags, F_ACCURACY, 100, NA, NA, NULL); + addflag(lastot->flags, F_MISSILE, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_PICKLOCKS, 10, B_BLUNTONFAIL, NA, NULL); addot(OT_SHORTSWORD, "short sword", "A short blade for fighting. Better for stabbing.", MT_METAL, 2.5, OC_WEAPON); - addflag(lastot->flags, F_RARITY, H_DUNGEON, RR_COMMON, NA, NULL); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 90, NA, NULL); addflag(lastot->flags, F_OBATTACKSPEED, SP_NORMAL, NA, NA, NULL); addflag(lastot->flags, F_DAMTYPE, DT_PIERCE, NA, NA, NULL); addflag(lastot->flags, F_DAM, 1, 6, NA, NULL); addflag(lastot->flags, F_ACCURACY, 90, NA, NA, NULL); addot(OT_RAPIER, "rapier", "A long, narrow French sword lacking a cutting edge. Made for stabbing.", MT_METAL, 2.5, OC_WEAPON); - addflag(lastot->flags, F_RARITY, H_DUNGEON, RR_COMMON, NA, NULL); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 80, NA, NULL); addflag(lastot->flags, F_OBATTACKSPEED, SP_NORMAL, NA, NA, NULL); addflag(lastot->flags, F_DAMTYPE, DT_PIERCE, NA, NA, NULL); addflag(lastot->flags, F_DAM, 1, 8, NA, NULL); addflag(lastot->flags, F_ACCURACY, 90, NA, NA, NULL); addot(OT_TRIDENT, "trident", "A three-pronged stabbing weapon.", MT_METAL, 3, OC_WEAPON); - addflag(lastot->flags, F_RARITY, H_DUNGEON, RR_COMMON, NA, NULL); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 75, NA, NULL); addflag(lastot->flags, F_OBATTACKSPEED, SP_NORMAL, NA, NA, NULL); addflag(lastot->flags, F_DAMTYPE, DT_PIERCE, NA, NA, NULL); addflag(lastot->flags, F_DAM, 1, 10, NA, NULL); addflag(lastot->flags, F_ACCURACY, 80, NA, NA, NULL); addot(OT_QUICKBLADE, "quickblade", "A short blade of exceptional quality, which somehow allows its bearer to attack faster.", MT_METAL, 1, OC_WEAPON); - addflag(lastot->flags, F_RARITY, H_DUNGEON, RR_UNCOMMON, NA, NULL); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 35, NA, NULL); addflag(lastot->flags, F_OBATTACKSPEED, SP_ULTRAFAST, NA, NA, NULL); addflag(lastot->flags, F_DAMTYPE, DT_PIERCE, NA, NA, NULL); addflag(lastot->flags, F_DAM, 1, 4, NA, NULL); addflag(lastot->flags, F_ACCURACY, 100, NA, NA, NULL); + addot(OT_COMBATKNIFE, "combat knife", "A sharp knife designed for military use.", MT_METAL, 1, OC_WEAPON); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 65, NA, NULL); + addflag(lastot->flags, F_OBATTACKSPEED, SP_FAST, NA, NA, NULL); + addflag(lastot->flags, F_DAMTYPE, DT_PIERCE, NA, NA, NULL); + addflag(lastot->flags, F_DAM, 2, 4, NA, NULL); + addflag(lastot->flags, F_ACCURACY, 100, NA, NA, NULL); + addflag(lastot->flags, F_DAMAGABLE, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_OBHP, 5, 5, NA, NULL); + addflag(lastot->flags, F_MISSILE, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_PICKLOCKS, 10, B_BLUNTONFAIL, NA, NULL); + // chopping weapons + addot(OT_AXE, "axe", "A short pole with a heavy, wedge-shaped blade for chopping.", MT_METAL, 2, OC_WEAPON); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 90, NA, NULL); + addflag(lastot->flags, F_OBATTACKSPEED, SP_SLOW, NA, NA, NULL); + addflag(lastot->flags, F_DAMTYPE, DT_CHOP, NA, NA, NULL); + addflag(lastot->flags, F_DAM, 1, 5, NA, NULL); + addflag(lastot->flags, F_ACCURACY, 80, NA, NA, NULL); + addot(OT_BATTLEAXE, "battleaxe", "An axe specifically designed for combat.", MT_METAL, 3, OC_WEAPON); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 70, NA, NULL); + addflag(lastot->flags, F_OBATTACKSPEED, SP_SLOW, NA, NA, NULL); + addflag(lastot->flags, F_DAMTYPE, DT_CHOP, NA, NA, NULL); + addflag(lastot->flags, F_DAM, 1, 10, NA, NULL); + addflag(lastot->flags, F_ACCURACY, 80, NA, NA, NULL); + addot(OT_GREATAXE, "greataxe", "An enormous axe made designed for combat.", MT_METAL, 5, OC_WEAPON); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 50, NA, NULL); + addflag(lastot->flags, F_OBATTACKSPEED, SP_VERYSLOW, NA, NA, NULL); + addflag(lastot->flags, F_DAMTYPE, DT_CHOP, NA, NA, NULL); + addflag(lastot->flags, F_DAM, 1, 12, NA, NULL); + addflag(lastot->flags, F_ACCURACY, 70, NA, NA, NULL); // slashing weapons + addot(OT_KNIFE, "knife", "A moderately sharp stabbing tool.", MT_METAL, 1, OC_WEAPON); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 100, NA, NULL); + addflag(lastot->flags, F_OBATTACKSPEED, SP_FAST, NA, NA, NULL); + addflag(lastot->flags, F_DAMTYPE, DT_SLASH, NA, NA, NULL); + addflag(lastot->flags, F_DAM, 1, 2, NA, NULL); + addflag(lastot->flags, F_ACCURACY, 100, NA, NA, NULL); + addflag(lastot->flags, F_MISSILE, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_PICKLOCKS, 10, B_BLUNTONFAIL, NA, NULL); + addflag(lastot->flags, F_DAMAGABLE, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_OBHP, 5, 5, NA, NULL); addot(OT_STEAKKNIFE, "steak knife", "A common kitchen knife.", MT_METAL, 0.2, OC_WEAPON); - addflag(lastot->flags, F_RARITY, H_DUNGEON, RR_COMMON, NA, NULL); - addflag(lastot->flags, F_OBATTACKSPEED, SP_NORMAL, NA, NA, NULL); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 100, NA, NULL); + addflag(lastot->flags, F_OBATTACKSPEED, SP_FAST, NA, NA, NULL); addflag(lastot->flags, F_DAMTYPE, DT_SLASH, NA, NA, NULL); addflag(lastot->flags, F_DAM, 1, 3, NA, NULL); addflag(lastot->flags, F_ACCURACY, 100, NA, NA, NULL); + addflag(lastot->flags, F_MISSILE, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_DAMAGABLE, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_OBHP, 5, 5, NA, NULL); addot(OT_SCYTHE, "scythe", "An agricultural hand tool for mowing grass, or reaping crops.", MT_METAL, 3, OC_WEAPON); - addflag(lastot->flags, F_RARITY, H_DUNGEON, RR_COMMON, NA, NULL); - addflag(lastot->flags, F_OBATTACKSPEED, SP_NORMAL, NA, NA, NULL); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 75, NA, NULL); + addflag(lastot->flags, F_OBATTACKSPEED, SP_SLOW, NA, NA, NULL); addflag(lastot->flags, F_DAMTYPE, DT_SLASH, NA, NA, NULL); addflag(lastot->flags, F_DAM, 2, 4, NA, NULL); addflag(lastot->flags, F_ACCURACY, 60, NA, NA, NULL); addot(OT_SICKLE, "sickle", "A hand-held agricultural tool with a curved blade.", MT_METAL, 0.5, OC_WEAPON); - addflag(lastot->flags, F_RARITY, H_DUNGEON, RR_COMMON, NA, NULL); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 60, NA, NULL); addflag(lastot->flags, F_OBATTACKSPEED, SP_FAST, NA, NA, NULL); addflag(lastot->flags, F_DAMTYPE, DT_SLASH, NA, NA, NULL); addflag(lastot->flags, F_DAM, 1, 6, NA, NULL); addflag(lastot->flags, F_ACCURACY, 100, NA, NA, NULL); addot(OT_SCIMITAR, "scimitar", "A fast, curved blade.", MT_METAL, 2, OC_WEAPON); - addflag(lastot->flags, F_RARITY, H_DUNGEON, RR_COMMON, NA, NULL); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 75, NA, NULL); addflag(lastot->flags, F_OBATTACKSPEED, SP_NORMAL, NA, NA, NULL); addflag(lastot->flags, F_DAMTYPE, DT_SLASH, NA, NA, NULL); addflag(lastot->flags, F_DAM, 1, 8, 2, NULL); addflag(lastot->flags, F_ACCURACY, 80, NA, NA, NULL); addot(OT_LONGSWORD, "longsword", "Standard issue long slashing weapon.", MT_METAL, 3, OC_WEAPON); - addflag(lastot->flags, F_RARITY, H_DUNGEON, RR_COMMON, NA, NULL); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 70, NA, NULL); addflag(lastot->flags, F_OBATTACKSPEED, SP_NORMAL, NA, NA, NULL); addflag(lastot->flags, F_DAMTYPE, DT_SLASH, NA, NA, NULL); addflag(lastot->flags, F_DAM, 1, 8, 3, NULL); addflag(lastot->flags, F_ACCURACY, 80, NA, NA, NULL); + addot(OT_ORNSWORD, "ornamental sword", "A gleaming (but quite blunt) blade.", MT_METAL, 2, OC_WEAPON); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 50, NA, NULL); + addflag(lastot->flags, F_SHINY, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_OBATTACKSPEED, SP_NORMAL, NA, NA, NULL); + addflag(lastot->flags, F_DAMTYPE, DT_SLASH, NA, NA, NULL); + addflag(lastot->flags, F_DAM, 1, 6, NA, NULL); + addflag(lastot->flags, F_ACCURACY, 100, NA, NA, NULL); // polearms - addot(OT_SPEAR, "spear", "A long pole with a sharpened head.", MT_METAL, 4, OC_WEAPON); - addflag(lastot->flags, F_RARITY, H_DUNGEON, RR_COMMON, NA, NULL); - addflag(lastot->flags, F_OBATTACKSPEED, SP_SLOW, NA, NA, NULL); - addflag(lastot->flags, F_DAMTYPE, DT_PIERCE, NA, NA, NULL); - addflag(lastot->flags, F_DAM, 1, 8, NA, NULL); - addflag(lastot->flags, F_ACCURACY, 75, NA, NA, NULL); - addot(OT_QUARTERSTAFF, "quarterstaff", "A long, stout pole.", MT_METAL, 2, OC_WEAPON); - addflag(lastot->flags, F_RARITY, H_DUNGEON, RR_COMMON, NA, NULL); + addot(OT_QUARTERSTAFF, "quarterstaff", "A long, stout pole.", MT_WOOD, 2, OC_WEAPON); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 100, NA, NULL); addflag(lastot->flags, F_OBATTACKSPEED, SP_FAST, NA, NA, NULL); addflag(lastot->flags, F_DAMTYPE, DT_BASH, NA, NA, NULL); addflag(lastot->flags, F_DAM, 1, 8, NA, NULL); addflag(lastot->flags, F_ACCURACY, 80, NA, NA, NULL); + addflag(lastot->flags, F_TWOHANDED, B_TRUE, NA, NA, NULL); + addot(OT_SPEAR, "spear", "A long pole with a sharpened head.", MT_METAL, 4, OC_WEAPON); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 70, NA, NULL); + addflag(lastot->flags, F_OBATTACKSPEED, SP_SLOW, NA, NA, NULL); + addflag(lastot->flags, F_DAMTYPE, DT_PIERCE, NA, NA, NULL); + addflag(lastot->flags, F_DAM, 1, 8, NA, NULL); + addflag(lastot->flags, F_ACCURACY, 75, NA, NA, NULL); + addflag(lastot->flags, F_MISSILE, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_DAMAGABLE, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_OBHP, 15, 15, NA, NULL); // bashing weapons - addot(OT_CLUB, "club", "A heavy, blunt instrument to hit things with.", MT_WOOD, 1.5, OC_WEAPON); - addflag(lastot->flags, F_RARITY, H_DUNGEON, RR_COMMON, NA, NULL); + addot(OT_STICK, "stick", "A sturdy wooden stick.", MT_WOOD, 0.5, OC_WEAPON); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 100, NA, NULL); + addflag(lastot->flags, F_OBATTACKSPEED, SP_NORMAL, NA, NA, NULL); + addflag(lastot->flags, F_DAMTYPE, DT_BASH, NA, NA, NULL); + addflag(lastot->flags, F_DAM, 1, 2, NA, NULL); + addflag(lastot->flags, F_ACCURACY, 80, NA, NA, NULL); + addot(OT_SPANNER, "spanner", "A long, heavy metal wrench.", MT_METAL, 1, OC_WEAPON); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 70, NA, NULL); + addflag(lastot->flags, F_OBATTACKSPEED, SP_NORMAL, NA, NA, NULL); + addflag(lastot->flags, F_DAMTYPE, DT_BASH, NA, NA, NULL); + addflag(lastot->flags, F_DAM, 1, 4, NA, NULL); + addflag(lastot->flags, F_ACCURACY, 90, NA, NA, NULL); + addot(OT_CLUB, "club", "A heavy, blunt wooden instrument to hit things with.", MT_WOOD, 1.5, OC_WEAPON); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 100, NA, NULL); addflag(lastot->flags, F_OBATTACKSPEED, SP_NORMAL, NA, NA, NULL); addflag(lastot->flags, F_DAMTYPE, DT_BASH, NA, NA, NULL); addflag(lastot->flags, F_DAM, 1, 6, NA, NULL); addflag(lastot->flags, F_ACCURACY, 80, NA, NA, NULL); addot(OT_MACE, "mace", "A weapon with a heavy head on a solid shaft used to bludgeon opponents.", MT_METAL, 3, OC_WEAPON); - addflag(lastot->flags, F_RARITY, H_DUNGEON, RR_COMMON, NA, NULL); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 90, NA, NULL); addflag(lastot->flags, F_OBATTACKSPEED, SP_NORMAL, NA, NA, NULL); addflag(lastot->flags, F_DAMTYPE, DT_BASH, NA, NA, NULL); addflag(lastot->flags, F_DAM, 1, 8, NA, NULL); addflag(lastot->flags, F_ACCURACY, 80, NA, NA, NULL); addot(OT_MORNINGSTAR, "morningstar", "An spiked mace.", MT_METAL, 3.5, OC_WEAPON); - addflag(lastot->flags, F_RARITY, H_DUNGEON, RR_UNCOMMON, NA, NULL); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 70, NA, NULL); addflag(lastot->flags, F_OBATTACKSPEED, SP_SLOW, NA, NA, NULL); addflag(lastot->flags, F_DAMTYPE, DT_BASH, NA, NA, NULL); addflag(lastot->flags, F_DAM, 1, 10, NA, NULL); addflag(lastot->flags, F_ACCURACY, 80, NA, NA, NULL); addflag(lastot->flags, F_TWOHANDED, B_TRUE, NA, NA, NULL); addot(OT_GREATCLUB, "great club", "An enormous, very heavy, blunt instrument to hit things with.", MT_WOOD, 5, OC_WEAPON); - addflag(lastot->flags, F_RARITY, H_DUNGEON, RR_UNCOMMON, NA, NULL); - addflag(lastot->flags, F_OBATTACKSPEED, SP_SLOW, NA, NA, NULL); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 50, NA, NULL); + addflag(lastot->flags, F_OBATTACKSPEED, SP_VERYSLOW, NA, NA, NULL); addflag(lastot->flags, F_DAMTYPE, DT_BASH, NA, NA, NULL); - addflag(lastot->flags, F_DAM, 2, 4, NA, NULL); + addflag(lastot->flags, F_DAM, 3, 4, NA, NULL); addflag(lastot->flags, F_ACCURACY, 80, NA, NA, NULL); addflag(lastot->flags, F_TWOHANDED, B_TRUE, NA, NA, NULL); + + // projectile weapons + addot(OT_SLING, "sling", "Stretchy piece of rubber for launching projectiles.", MT_RUBBER, 0.5, OC_WEAPON); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 80, NA, NULL); + addflag(lastot->flags, F_FIREARM, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_OPERABLE, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_OBATTACKSPEED, SP_SLOW, NA, NA, NULL); + //addflag(lastot->flags, F_DAMTYPE, DT_BASH, NA, NA, NULL); + //addflag(lastot->flags, F_DAM, 3, 4, NA, NULL); + addflag(lastot->flags, F_FIRESPEED, 3, NA, NA, NULL); + addflag(lastot->flags, F_ACCURACY, 70, NA, NA, NULL); + addflag(lastot->flags, F_RANGE, 5, NA, NA, NULL); + addflag(lastot->flags, F_AMMOOB, OT_STONE, NA, NA, NULL); + + addot(OT_REVOLVER, "revolver", "Basic one-handed firearm.", MT_METAL, 1, OC_WEAPON); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 60, NA, NULL); + addflag(lastot->flags, F_FIREARM, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_OPERABLE, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_OBATTACKSPEED, SP_FAST, NA, NA, NULL); + //addflag(lastot->flags, F_DAMTYPE, DT_BASH, NA, NA, NULL); + //addflag(lastot->flags, F_DAM, 3, 4, NA, NULL); + addflag(lastot->flags, F_FIRESPEED, 10, NA, NA, NULL); + addflag(lastot->flags, F_ACCURACY, 80, NA, NA, NULL); + addflag(lastot->flags, F_RANGE, 10, NA, NA, NULL); + addflag(lastot->flags, F_AMMOOB, OT_BULLET, NA, NA, NULL); + addflag(lastot->flags, F_AMMOOB, OT_RUBBERBULLET, NA, NA, NULL); + + // ammo + addot(OT_BULLET, "bullet", "A regular gun bullet.", MT_STONE, 0.1, OC_MISC); + addflag(lastot->flags, F_GLYPH, NA, NA, NA, ";"); + addflag(lastot->flags, F_STACKABLE, B_TRUE, NA, NA, ""); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 70, NA, ""); + addflag(lastot->flags, F_NUMAPPEAR, 1, 10, NA, ""); + addflag(lastot->flags, F_NOBLESS, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_MISSILE, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_DAMAGABLE, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_OBHP, 1, 1, NA, NULL); + addflag(lastot->flags, F_NOOBDIETEXT, B_TRUE, NA, NA, NULL); + + addot(OT_RUBBERBULLET, "rubber bullet", "A rubber gun bullet - does not do much damage.", MT_STONE, 0.1, OC_MISC); + addflag(lastot->flags, F_GLYPH, NA, NA, NA, ";"); + addflag(lastot->flags, F_STACKABLE, B_TRUE, NA, NA, ""); + addflag(lastot->flags, F_RARITY, H_DUNGEON, 80, NA, ""); + addflag(lastot->flags, F_NUMAPPEAR, 1, 10, NA, ""); + addflag(lastot->flags, F_NOBLESS, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_MISSILE, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_DAMAGABLE, B_TRUE, NA, NA, NULL); + addflag(lastot->flags, F_OBHP, 1, 1, NA, NULL); + addflag(lastot->flags, F_NOOBDIETEXT, B_TRUE, NA, NA, NULL); + // holy weapons addot(OT_HANDOFGOD, "hand of god", "The ultimate power.", MT_FLESH, 0.1, OC_WEAPON); - addflag(lastot->flags, F_RARITY, H_DUNGEON, RR_UNIQUE, NA, NULL); + //addflag(lastot->flags, F_RARITY, H_DUNGEON, RR_UNIQUE, NA, NULL); addflag(lastot->flags, F_OBATTACKSPEED, SP_GODLIKE, NA, NA, NULL); addflag(lastot->flags, F_DAMTYPE, DT_HOLY, NA, NA, NULL); addflag(lastot->flags, F_DAM, 1, 6, 100, NULL); - addflag(lastot->flags, F_ACCURACY, 100, NA, NA, NULL); + addflag(lastot->flags, F_ACCURACY, 500, NA, NA, NULL); addflag(lastot->flags, F_UNIQUE, B_TRUE, NA, NA, NULL); } +// returns the 'armourrating' flag +flag_t *isarmour(object_t *o) { + flag_t *f; + if (hasflag(o->flags, F_GOESON)) { + f = hasflag(o->flags, F_ARMOURRATING); + if (f) { + return f; + } + } + return NULL; +} + +int isactivated(object_t *o) { + if (hasflag(o->flags, F_ACTIVATED)) { + return B_TRUE; + } + return B_FALSE; +} + +int isammofor(object_t *ammo, object_t *gun) { + if (hasflagval(gun->flags, F_AMMOOB, ammo->type->id, NA, NA, NULL)) { + return B_TRUE; + } + return B_FALSE; +} + +// is armour 'a' better than armour 'b'? +int isbetterarmourthan(object_t *a, object_t *b) { + int arma, armb; + flag_t *f; + if (!a) return B_FALSE; + if (!b) return B_TRUE; + + f = isarmour(a); + if (f) { + arma = f->val[0]; + } else { + arma = 0; + } + f = isarmour(b); + if (f) { + armb = f->val[0]; + } else { + armb = 0; + } + if (arma > armb) return B_TRUE; + return B_FALSE; + +} + +// compare weapons using max damage +int isbetterwepthan(object_t *a, object_t *b) { + flag_t *f; + int dama,damb; + + if (!a) return B_FALSE; + if (!b) return B_TRUE; + + f = hasflag(a->flags, F_DAM); + if (f) { + dama = (f->val[0] * f->val[1]) + f->val[2]; + } else { + dama = 0; + } + f = hasflag(b->flags, F_DAM); + if (f) { + damb = (f->val[0] * f->val[1]) + f->val[2]; + } else { + damb = 0; + } + if (dama > damb) return B_TRUE; + return B_FALSE; +} + +int isblessed(object_t *o) { + if (o->blessed == B_BLESSED) return B_TRUE; + return B_FALSE; +} + +int isblessknown(object_t *o) { + if (o->blessknown) return B_TRUE; + if (gamestarted && hasflag(player->flags, F_DETECTAURAS)) { + return B_TRUE; + } + return B_FALSE; +} + + +int iscorpse(object_t *o) { + if (o->type->obclass->id == OC_CORPSE) { + return B_TRUE; + } + return B_FALSE; +} + +int iscursed(object_t *o) { + if (o->blessed == B_CURSED) return B_TRUE; + return B_FALSE; +} + int isdrinkable(object_t *o) { switch (o->type->obclass->id) { case OC_POTION: return B_TRUE; + default: break; } return B_FALSE; } +int isedible(object_t *o) { + if (hasflag(o->flags, F_EDIBLE)) { + return B_TRUE; + } + if (o->material->id == MT_ICE) { + return B_TRUE; + } + return B_FALSE; +} + +flag_t *isequipped(object_t *o) { + flag_t *f; + f = hasflag(o->flags, F_EQUIPPED); + if (f) { + return f; + } + return NULL; +} + +int isequippedon(object_t *o, enum BODYPART bp) { + if (hasflagval(o->flags, F_EQUIPPED, bp, NA, NA, NULL)) { + return B_TRUE; + } + return B_FALSE; +} + +int isfirearm(object_t *o) { + if (hasflag(o->flags, F_FIREARM)) { + return B_TRUE; + } + return B_FALSE; +} + +int isflammable(object_t *o) { + if (hasflag(o->flags, F_FLAMMABLE)) { + return B_TRUE; + } + return B_FALSE; +} + int isknown(object_t *o) { knowledge_t *k; // if id'd, return the full name if (hasflag(o->flags, F_IDENTIFIED)) { return B_TRUE; } - // otherwise check if it has a hidden name + for (k = knowledge; k ; k = k->next) { if (k->id == o->type->id) { // it DOES have a hidden name. @@ -1160,9 +4276,65 @@ int isknown(object_t *o) { } // no hidden name, return real one + return B_TRUE; +} + + +// is the object fully identified? +// ie. its type is known ("potion of healing" rather than "red potion") +// AND +// you know whether it is cursed or not +int isidentified(object_t *o) { + flag_t *f; + if (!isblessknown(o)) return B_FALSE; + if (!isknown(o)) return B_FALSE; + for (f = o->flags->first ; f ; f = f->next) { + if (!f->known) return B_FALSE; + } + + return B_TRUE; +} + +int ismetal(enum MATERIAL mat) { + int metal = B_FALSE; + switch (mat) { + case MT_METAL: + case MT_GOLD: + metal = B_TRUE; + break; + default: + metal = B_FALSE; + break; + } + return metal; +} + +int ismissile(object_t *o) { + if (hasflag(o->flags, F_MISSILE)) { + return B_TRUE; + } + // special cases... + switch (o->type->id) { + case OT_EMPTYFLASK: // (because it will shatter) + case OT_EMPTYVIAL: // (because it will shatter) + case OT_BROKENGLASS: // (because it will cut) + case OT_ICECHUNK: // (because it will cut) + return B_TRUE; + default: + break; + } + return B_FALSE; } +int isoperable(object_t *o) { + if (hasflag(o->flags, F_OPERABLE)) return B_TRUE; + //if (o->type->obclass->id == OC_TECH) return B_TRUE; + + return B_FALSE; +} + + // has this object changed proerties from its // parent objecttype? int isplainob(object_t *o) { @@ -1170,27 +4342,77 @@ int isplainob(object_t *o) { if (o->weight != o->type->weight) return B_FALSE; if (o->inscription) return B_FALSE; if (o->blessed != B_UNCURSED) return B_FALSE; - if (o->blessknown) return B_FALSE; + if (isblessknown(o)) return B_FALSE; return B_TRUE; } +int ispourable(object_t *o) { + if (hasflag(o->flags, F_POURABLE)) { + if (o->material->id != MT_ICE) { + return B_TRUE; + } + } + + return B_FALSE; +} + + +int ispushable(object_t *o) { + if (hasflag(o->flags, F_PUSHABLE)) { + return B_TRUE; + } + return B_FALSE; +} int isreadable(object_t *o) { switch (o->type->obclass->id) { case OC_SCROLL: return B_TRUE; + default: break; + } + + return B_FALSE; +} + +int isrotting(object_t *o) { + flag_t *f; + float pct; + if (!iscorpse(o)) return B_FALSE; + f = hasflag(o->flags, F_OBHP); + if (f) { + pct = ((float) f->val[0] / (float) f->val[1]) * 100.0; + } else { + pct = 100; + } + if (pct < 25) { + return B_TRUE; + } + return B_FALSE; +} + +int isweapon(object_t *o) { + //if ((o->type->obclass->id == OC_WEAPON) && hasflag(o->flags, F_DAM)) { + if (o->type->obclass->id == OC_WEAPON) { + return B_TRUE; + } + return B_FALSE; +} + +int iswearable(object_t *o) { + if (hasflag(o->flags, F_GOESON)) { + return B_TRUE; } return B_FALSE; } void killmaterial(material_t *m) { - int i; material_t *nextone, *lastone; // free mem free(m->name); + killflagpile(m->flags); // remove from list nextone = m->next; @@ -1213,9 +4435,13 @@ void killmaterial(material_t *m) { } void killob(object_t *o) { - int i; object_t *nextone, *lastone; + // remove flags conferred by this object + if (o->pile->owner) { + loseobflags(o->pile->owner, o, ALLCONFERRED); + } + // free mem if (o->inscription) free(o->inscription); @@ -1239,8 +4465,14 @@ void killob(object_t *o) { } } +void killobpile(obpile_t *op) { + while (op->first) { + killob(op->first); + } + free(op); +} + void killoc(objectclass_t *oc) { - int i; objectclass_t *nextone, *lastone; // free mem @@ -1269,7 +4501,6 @@ void killoc(objectclass_t *oc) { } void killot(objecttype_t *ot) { - int i; objecttype_t *nextone, *lastone; // free mem @@ -1298,19 +4529,94 @@ void killot(objecttype_t *ot) { } +// animate a weapon +lifeform_t *makeanimated(lifeform_t *lf, object_t *o, int level) { + cell_t *where; + flag_t *f; + lifeform_t *newlf; + + where = getrandomadjcell(lf->cell, WE_EMPTY); + if (!where) return NULL; + + newlf = addlf(where, R_DANCINGWEAPON, level); + if (newlf) { + if (isplayer(lf)) { + addflag(newlf->flags, F_FRIENDLY, B_TRUE, NA, NA, NULL); + } else if (hasflag(lf->flags, F_HOSTILE)) { + addflag(newlf->flags, F_HOSTILE, B_TRUE, NA, NA, NULL); + } + + addflag(lf->flags, F_NODEATHANNOUNCE, B_TRUE, NA, NA, NULL); + + o = relinkob(o, newlf->pack); + weild(lf, o); + + f = hasflag(o->flags, F_OBHP); + if (f) { + newlf->maxhp = f->val[1]; + newlf->hp = newlf->maxhp; + } + f = hasflag(o->flags, F_OBATTACKSPEED); + if (f) { + killflagsofid(newlf->flags, F_MOVESPEED); + addflag(newlf->flags, F_MOVESPEED, f->val[0], NA, NA, NULL); + } + } + return newlf; +} + void makeknown(enum OBTYPE otid) { knowledge_t *k; + object_t *o; + flag_t *f; + object_t *srcob[MAXPILEOBS*3]; + enum FLAG fttogive[MAXPILEOBS*3]; + int nobs = 0; + int i; + + if (player) { + // if player is holding an object of that type with F_CONFER.. IFKNOWN... and isn't known... + // then by making the object known, we also need to give them the flag. + // + // keep a list of objects and flags here, then give them afterwards. + for (o = player->pack->first ; o ; o = o->next) { + if (o->type->id == otid) { + if (!isknown(o)) { + for (f = o->flags->first ; f ; f = f->next) { + if ((f->id == F_HOLDCONFER) && (f->val[2] == IFKNOWN)) { + srcob[nobs] = o; + fttogive[nobs] = F_HOLDCONFER; + nobs++; + } else if ((f->id == F_EQUIPCONFER) && (f->val[2] == IFKNOWN) && isequipped(o)) { + srcob[nobs] = o; + fttogive[nobs] = F_EQUIPCONFER; + nobs++; + } else if ((f->id == F_ACTIVATECONFER) && (f->val[2] == IFKNOWN) && isactivated(o)) { + srcob[nobs] = o; + fttogive[nobs] = F_ACTIVATECONFER; + nobs++; + } + } + } + } + } + } + for (k = knowledge; k ; k = k->next) { if (k->id == otid) { k->known = B_TRUE; } } + + for (i = 0; i < nobs; i++) { + giveobflags(player, srcob[i], fttogive[i]); + } } object_t *moveob(object_t *src, obpile_t *dst, int howmany) { - object_t *o, *oo, *existob; + object_t *o, *existob; int i; - int db = B_FALSE; + int db = B_TRUE; reason = E_OK; @@ -1329,7 +4635,7 @@ object_t *moveob(object_t *src, obpile_t *dst, int howmany) { if (db) dblog("DB: moveob() - no stack to join"); // space in destination pile? - if (getnextletter(dst, NULL) == '-') { + if (getnextletter(dst, NULL) == '\0') { reason = E_NOSPACE; return NULL; } @@ -1370,13 +4676,37 @@ object_t *moveob(object_t *src, obpile_t *dst, int howmany) { o = relinkob(tempop->first, dst); } free(tempop); - } + } + + if (dst->where && !dst->where->lf && haslos(player, dst->where)) { + needredraw = B_TRUE; + drawscreen(); + } + //o = newobeffects(o); + return o; } +void obaction(object_t *o, char *text) { + char obname[BUFLEN]; + getobname(o, obname, o->amt); + if (o->pile->owner) { + if (isplayer(o->pile->owner)) { + msg("Your %s %s!", noprefix(obname), text); + } else if (haslos(player, o->pile->owner->cell)) { + char lfname[BUFLEN]; + getlfname(o->pile->owner, lfname); + msg("%s%s %s %s!", lfname, getpossessive(lfname), + noprefix(obname), text); + } + } else if (haslos(player, o->pile->where)) { // on ground + msg("%s %s!", obname, text); + } +} + object_t *obexists(enum OBTYPE obid) { map_t *m; int x,y; @@ -1405,6 +4735,113 @@ object_t *obexists(enum OBTYPE obid) { return NULL; } +void obdie(object_t *o) { + char obname[BUFLEN]; + flag_t *f; + cell_t *obloc; + + f = hasflag(o->flags, F_DIECONVERT); + if (f) { + flag_t *f2; + char desc[BUFLEN]; + // announce the change + real_getobname(o, obname, o->amt, B_FALSE, B_TRUE, B_TRUE); + + f2 = NULL; + if (o->amt > 1) { + f2 = hasflag(o->flags, F_DIECONVERTTEXTPL); + } + if (!f2) { + f2 = hasflag(o->flags, F_DIECONVERTTEXT); + } + if (f2) { + sprintf(desc, "%s", f2->text); + } else if (oblastdamtype(o) == DT_DECAY) { + sprintf(desc, "%s completed rotted away", (o->amt == 1) ? "has" : "have"); + } else { + sprintf(desc, "%s destroyed", (o->amt == 1) ? "is" : "are"); + } + if (strstr(o->type->name, "stain") || (o->type->id == OT_ROASTMEAT)) { + assert(0 == 1); + } + + if (o->pile->owner) { + if (o->pile->owner->controller == C_PLAYER) { + msg("Your %s %s!",noprefix(obname), desc); + } else if (haslos(player, o->pile->owner->cell)) { + char monname[BUFLEN]; + getlfname(o->pile->owner, monname); + msg("%s's %s %s!",monname, noprefix(obname), desc); + } + } else if (haslos(player, o->pile->where)) { + capitalise(obname); + msg("%s %s.",obname, desc); + } + + // change into something else + addob(o->pile, f->text); + } else { + char desc[BUFLEN]; + + real_getobname(o, obname, o->amt, B_FALSE, B_TRUE, B_TRUE); + if (!hasflag(o->flags, F_NOOBDIETEXT)) { + // announce the death + f = hasflag(o->flags, F_DIETEXT); + if (f) { + sprintf(desc, "%s", f->text); + } else if (oblastdamtype(o) == DT_DECAY) { + sprintf(desc, "%s completely rotted away", (o->amt == 1) ? "has" : "have" ); + } else { + sprintf(desc, "%s destroyed", (o->amt == 1) ? "is" : "are"); + } + + if (o->pile->owner) { + if (o->pile->owner->controller == C_PLAYER) { + msg("Your %s %s!",noprefix(obname), desc); + } else if (haslos(player, o->pile->owner->cell)) { + char monname[BUFLEN]; + getlfname(o->pile->owner, monname); + msg("%s's %s %s!",monname, noprefix(obname), desc); + } + } else if (haslos(player, o->pile->where)) { + msg("%s %s.",obname, desc); + } + } + + // explodes? + f = hasflag(o->flags, F_EXPLODEONDEATH); + if (f) { + if (f->val[2] == B_IFACTIVATED) { + if (isactivated(o)) { + explodeob(o, f, (f->val[1] == B_BIG) ? 1 : 0); + } + } else { + explodeob(o, f, (f->val[1] == B_BIG) ? 1 : 0); + } + } + + // flashes? + f = hasflag(o->flags, F_FLASHONDEATH); + if (f) { + if (f->val[2] == B_IFACTIVATED) { + if (isactivated(o)) { + brightflash(getoblocation(o),f->val[0], NULL); + } + } else { + brightflash(getoblocation(o),f->val[0], NULL); + } + } + } + + obloc = o->pile->where; + killob(o); + // redraw + if (obloc && !obloc->lf && haslos(player, obloc)) { + needredraw = B_TRUE; + drawscreen(); + } +} + int obfits(object_t *o, obpile_t *op) { if (countobs(op) >= MAXPILEOBS) { return B_FALSE; @@ -1412,6 +4849,28 @@ int obfits(object_t *o, obpile_t *op) { return B_TRUE; } +enum DAMTYPE oblastdamtype(object_t *o) { + flag_t *f; + f = hasflag(o->flags, F_LASTDAMTYPE); + if (f) { + return f->val[0]; + } + return DT_NONE; +} + +flag_t *obproduceslight(object_t *o) { + flag_t *f; + f = hasflag(o->flags, F_PRODUCESLIGHT); + if (f) { + if (f->val[2] == IFACTIVE) { + if (isactivated(o)) return f; + } else { + return f; + } + } + return NULL; +} + // has this object changed proerties from its // parent objecttype? int obpropsmatch(object_t *a, object_t *b) { @@ -1419,11 +4878,327 @@ int obpropsmatch(object_t *a, object_t *b) { if (a->material != b->material) return B_FALSE; if (a->weight != b->weight) return B_FALSE; if (a->inscription || b->inscription) return B_FALSE; - if (a->blessed != b->blessed) return B_FALSE; - if (a->blessknown != b->blessknown) return B_FALSE; + // only really need to check one of them, because at this point + // we know they are of the same type. + if (!hasflag(a->flags, F_NOBLESS) && !hasflag(b->flags, F_NOBLESS)) { + if (a->blessed != b->blessed) return B_FALSE; + if (isblessknown(a) != isblessknown(b)) return B_FALSE; + } return B_TRUE; } +int operate(lifeform_t *lf, object_t *o) { + char buf[BUFLEN],obname[BUFLEN]; + int playercansee; + cell_t *where = NULL; + flag_t *f; + + getobname(o, obname, 1); + + if ((lf->controller == C_PLAYER) || haslos(player, lf->cell)) { + playercansee = B_TRUE; + } else { + playercansee = B_FALSE; + } + + + // must know what a tool is before you can use it + if (!isknown(o)) { + if (lf->controller == C_PLAYER) { + msg("You don't know how to use that (yet)!"); + } + return B_TRUE; + } + + + // ask for target, if required + f = hasflag(o->flags, F_OPERNEEDTARGET); + if (f) { + where = askcoords(f->text, f->val[0]); + if (!where) { + // cancel. + msg("Cancelled."); + return B_TRUE; + } else { + if ((f->val[1] & TR_NEEDLOS) && !haslos(lf, where)) { + msg("You can't see there!"); + return B_TRUE; + } + if ((f->val[1] & TR_NEEDLOF) && !haslof(lf, where)) { + msg("You have no line of fire to there!"); + return B_TRUE; + } + } + } + + + touch(lf, o); + if (hasflag(o->flags, F_DEAD)) return B_TRUE; + + // TODO: change to be based on item type + // TODO: move this to the end in case 'operate' fails + taketime(lf, getmovespeed(lf)); + + /* + if (lf->controller != C_PLAYER) { + + if (haslos(player, lf->cell)) { + getlfname(lf, buf); + capitalise(buf); + msg("%s operates %s.", buf, obname); + } + } + */ + + // objects with charges... + if (hasflag(o->flags, F_OPERUSECHARGE)) { // operating toggles on/off + int chargesleft; + chargesleft = getcharges(o); + if (chargesleft > 0) { + chargesleft = usecharge(o); + // TODO: notify if getting low + } else { + if (isplayer(lf)) { + nothinghappens(); + // you know it's out + f = hasflag(o->flags, F_CHARGES); + f->known = B_TRUE; + return B_FALSE; + } + } + } + + + if (hasflag(o->flags, F_OPERONOFF)) { // operating toggles on/off + flag_t *f; + f = hasflag(o->flags, F_ACTIVATED); + if (f) { + turnoff(lf, o); + } else { + turnon(lf, o); + } + } else if (hasflag(o->flags, F_FIREARM)) { // special case - change ammo + object_t *oo; + // construct list of possible ammo + clearretobs(); + for (oo = lf->pack->first ; oo ; oo = oo->next) { + if (isammofor(oo, o)) { + retobs[nretobs] = oo; + nretobs++; + } + } + if (nretobs <= 0) { + sprintf(buf, "You have no ammo for your %s!",noprefix(obname)); + msg(buf); + return B_TRUE; + } else { + sprintf(buf, "Load %s with what ammo",obname); + oo = askobject(lf->pack, buf, NULL, AO_SPECIFIED); + if (oo) { + setammo(lf, oo); + } + } + } else if (o->type->id == OT_INSECTICIDE) { + int seen = B_FALSE; + // if above half charges, big spray + f = hasflag(o->flags, F_CHARGES); + if (f->val[0] >= (f->val[1] / 2)) { + // big spray + int dir; + cell_t *c; + for (dir = DC_N; dir <= DC_W; dir += 2) { + c = getcellindir(where, dir); + if (c && cellwalkable(NULL, c, NULL)) { + o = addob(c->obpile, "puff of gas"); + } + } + // big spray + addob(where->obpile, "cloud of gas"); + if (isplayer(lf)) { + msg("Psssssssst!"); + seen = B_TRUE; + } else if (haslos(player, lf->cell)) { + getlfname(lf, buf); + msg("%s%s %s emits a spray of gas.", buf, getpossessive(buf), noprefix(obname)); + seen = B_TRUE; + } + } else { + // little spray + addob(where->obpile, "puff of gas"); + if (isplayer(lf)) { + msg("Psst!"); + seen = B_TRUE; + } else if (haslos(player, lf->cell)) { + getlfname(lf, buf); + msg("%s%s %s emits a puff of gas.", buf, getpossessive(buf), noprefix(obname)); + seen = B_TRUE; + } + } + // announce + if (!seen) { + youhear(where, "something spraying."); + } + } else if (o->type->id == OT_POCKETWATCH) { + if (lf->controller == C_PLAYER) { + // TODO: if above ground, use wantpm (ie. can see the sun) + gettimetextfuzzy(buf, B_FALSE); + msg("It is currently %s.",buf); + } else if (haslos(player, lf->cell)) { + getlfname(lf, buf); + msg("%s looks at %s.",buf, obname); + } + } else if (o->type->id == OT_DIGITALWATCH) { + if (lf->controller == C_PLAYER) { + gettimetext(buf); + msg("It is currently %s.",buf); + } else if (haslos(player, lf->cell)) { + getlfname(lf, buf); + capitalise(buf); + msg("%s looks at %s.",buf, obname); + } + } else if ((o->type->id == OT_LOCKPICK) + || (o->type->id == OT_PAPERCLIP) + || (o->type->id == OT_CREDITCARD)) { + char ch; + int dir; + // ask direction + ch = askchar("Lockpick in which direction (- to cancel)", "yuhjklbn-","-", B_FALSE); + dir = chartodir(ch); + if (dir == D_NONE) { + clearmsg(); + return B_TRUE; + } else { + cell_t *c; + c = getcellindir(player->cell, dir); + if (c) { + object_t *targ; + // something to lockpick there? + targ = hasobwithflag(c->obpile, F_LOCKED); + if (targ) { + lockpick(player, targ, o); + } else { + // fail + msg("There is nothing locked there!"); + } + } else { + clearmsg(); + return B_TRUE; + } + } + } else if (o->type->id == OT_LOCKHACKER) { + char ch; + int dir; + // ask direction + ch = askchar("Manipulate lock in which direction (- to cancel)", "yuhjklbn-","-", B_FALSE); + dir = chartodir(ch); + if (dir == D_NONE) { + clearmsg(); + return B_TRUE; + } else { + cell_t *c; + c = getcellindir(lf->cell, dir); + if (c) { + object_t *oo,*nextoo; + // lock/unlock everything there + for (oo = c->obpile->first ; oo ; oo = nextoo) { + nextoo = oo->next; + if (hasflag(oo->flags, F_LOCKABLE)) { + flag_t *f; + f = hasflag(oo->flags, F_LOCKED); + if (f) { + killflag(f); + if (isplayer(lf)) { + msg("Your %s beeps.", noprefix(obname)); + } else if (haslos(player, lf->cell)) { + char lfname[BUFLEN]; + getlfname(lf, lfname); + msg("%s%s %s beeps.", lfname, getpossessive(lfname), + noprefix(obname)); + } + } else { + addflag(oo->flags, F_LOCKED, B_TRUE, NA, NA, NULL); + if (isplayer(lf)) { + msg("Your %s buzzes.", noprefix(obname)); + } else if (haslos(player, lf->cell)) { + char lfname[BUFLEN]; + getlfname(lf, lfname); + msg("%s%s %s buzzes.", lfname, getpossessive(lfname), + noprefix(obname)); + } + } + } + } + } else { + clearmsg(); + return B_TRUE; + } + } + } else if (o->type->id == OT_PICKAXE) { + int ch,dir; + cell_t *c; + ch = askchar("Dig in which direction (- to cancel)", "yuhjklbn-","-", B_FALSE); + dir = chartodir(ch); + c = getcellindir(player->cell, dir); + if (c) { + if (isdiggable(c)) { + if (isplayer(lf)) { + msg("You dig through the wall."); + } else if (haslos(player, lf->cell)) { + char lfname[BUFLEN]; + getlfname(lf, lfname); + msg("%s digs through a wall.",lfname); + } + // replace wall + setcelltype(c, getemptycelltype(c->map->habitat)); + // redraw screen + drawscreen(); + // takes extra time + taketime(lf, getmovespeed(lf)*9); + } else { + if (isplayer(lf)) { + msg("This wall is too hard to dig."); + } + } + } else { + if (isplayer(lf)) { + msg("You swing your %s through the air.",noprefix(obname)); + } + taketime(lf, getmovespeed(lf)); + } + } else if (o->type->id == OT_TELEPAD) { + map_t *m; + cell_t *c,*dst = NULL; + int x,y; + int closest = 99999; + m = lf->cell->map; + // find closest pad + for (y = 0; y < m->h; y++) { + for (x = 0; x < m->w; x++) { + c = getcellat(m, x, y); + if (hasob(c->obpile, OT_TELEPAD)) { + int thisdist; + thisdist = getcelldist(lf->cell, c); + if (thisdist < closest) { + closest = thisdist; + dst = c; + } + } + } + } + + if (dst) { + // teleport there + teleportto(lf, dst); + } else { + // nothing happens + if (isplayer(lf)) { + nothinghappens(); + } + } + } + return B_FALSE; +} + int pilehasletter(obpile_t *op, char let) { object_t *o; @@ -1438,11 +5213,149 @@ int pilehasletter(obpile_t *op, char let) { return found; } +int pour(lifeform_t *lf, object_t *o) { + char buf[BUFLEN],obname[BUFLEN],lfname[BUFLEN],dstname[BUFLEN]; + int playercansee; + char ch; + object_t *dst; + + getobname(o, obname, 1); + getlfname(lf, lfname); + + if (isplayer(lf) || haslos(player, lf->cell)) { + playercansee = B_TRUE; + } else { + playercansee = B_FALSE; + } + + // tip onto what? + sprintf(buf, "Pour %s onto the ground", obname); + ch = askchar(buf, "yn", "y", B_TRUE); + if (ch == 'y') { + dst = NULL; + } else { + sprintf(buf, "Pour %s onto what", obname); + // tip onto another object + dst = askobject(lf->pack, buf, NULL, AO_NONE); + if (!dst) { + msg("Cancelled."); + return B_TRUE; + } else if (dst->type->obclass->id == OC_POTION) { + getobname(dst, buf, dst->amt); + msg("%s can't hold any more liquid!",buf); + return B_TRUE; + } + } + taketime(lf, SPEED_MOVE); + + if (dst) { + flag_t *refillflag; + + // pour 'o' onto 'dst' + getobname(dst, dstname, dst->amt); + + // specal cases first... + refillflag = hasflag(dst->flags, F_REFILLWITH); + if (refillflag) { + flag_t *f; + + if (refillflag->val[0] == o->type->id) { + // refill destination + f = hasflag(dst->flags, F_CHARGES); + if (f) { + f->val[0] = f->val[1]; + if (isplayer(lf)) { + msg("You refill your %s.", noprefix(dstname)); + // we now know what the potion was + if (!isknown(o)) makeknown(o->type->id); + } else if (haslos(player, lf->cell)) { + msg("%s refills %s with %s.", lfname, dstname, obname); + // we now know what the potion was + if (!isknown(o)) makeknown(o->type->id); + } + } + } else { + // nothing happens + if (isplayer(lf)) { + msg("You refill your %s with %s. It doesn't seem to do much.", obname); + } else if (haslos(player, lf->cell)) { + msg("%s refills %s with %s.", lfname, dstname, obname); + } + } + } else if ((o->type->id == OT_POT_WATER) && (o->blessed == B_BLESSED)) { // holy water! + if (isplayer(lf)) { + msg("You pour %s onto %s.", obname,dstname); + } + o->blessknown = B_TRUE; + // bless whatever we poured onto + blessob(dst); + // we now know that this is holy water + if (!isknown(o)) makeknown(o->type->id); + } else if (o->type->id == OT_POT_INVULN) { + flag_t *f; + f = hasflag(dst->flags, F_DAMAGABLE); + if (f) { + if (isplayer(lf)) { + msg("Your %s looks invulnerable!",noprefix(dstname)); + if (!isknown(o)) makeknown(o->type->id); + appendinscription(dst, "invuln"); + } + killflag(f); + } + } else if (o->type->id == OT_POT_RESTORATION) { + flag_t *f, *nextf; + if (isplayer(lf)) { + msg("Your %s looks as good as new!",noprefix(dstname)); + } + // restore orig material + if (dst->material != dst->type->material) { + changemat(dst, dst->type->material->id); + } + // remove blessings/curses + setblessed(o, B_UNCURSED); + o->blessknown = B_TRUE; + // remove bonuses + killflagsofid(o->flags, F_BONUS); + // remove temporary flags + for (f = o->flags->first ; f ; f = nextf) { + nextf = f->next; + if (f->lifetime > 0) { + killflag(f); + } + } + + if (!isknown(o)) makeknown(o->type->id); + } else { // default + if (isplayer(lf)) { + msg("You pour %s onto %s.", obname,dstname); + msg("%s gets wet.", dstname); + } + takedamage(dst, 0, DT_WATER); + } + } else { + // pour onto ground + if (isplayer(lf)) { + msg("You pour %s onto the ground.", obname); + } else if (haslof(player, lf->cell)) { + msg("%s pours %s onto the ground.", lfname, obname); + } + addob(lf->cell->obpile, "small puddle of water"); + } + + // empty the flask + addemptyob(lf->pack, o); + // remove src + removeob(o, 1); + + return B_FALSE; +} + void quaff(lifeform_t *lf, object_t *o) { - flag_t *f; char buf[BUFLEN],obname[BUFLEN]; int willid = B_FALSE; int playercansee; + int forcedrop = B_FALSE; + int seen; getobname(o, obname, 1); @@ -1454,6 +5367,16 @@ void quaff(lifeform_t *lf, object_t *o) { taketime(lf, SPEED_DRINK); + touch(lf, o); + if (hasflag(o->flags, F_DEAD)) return; + + if (o->material->id == MT_ICE) { + if (lf->controller == C_PLAYER) { + msg("You can't drink this, it's frozen!"); + } + return; + } + if (lf->controller != C_PLAYER) { if (haslos(player, lf->cell)) { getlfname(lf, buf); @@ -1467,17 +5390,21 @@ void quaff(lifeform_t *lf, object_t *o) { if (playercansee) { switch (o->type->id) { case OT_POT_HEALING: + case OT_POT_HEALINGMIN: if (lf->hp < lf->maxhp) { willid = B_TRUE; } break; + default: + willid = B_TRUE; + break; } } if (!isknown(o) && willid) { // id the potion makeknown(o->type->id); - getobname(o, obname, 1); + real_getobname(o, obname, 1, B_TRUE, B_FALSE, B_FALSE); // don't adjust for blindness if (lf->controller == C_PLAYER) { // tell the player msg("This is %s!",obname); @@ -1485,46 +5412,373 @@ void quaff(lifeform_t *lf, object_t *o) { drawmsg(); } } - switch (o->type->id) { - case OT_POT_HEALING: - if (lf->hp < lf->maxhp) { - gainhp(lf, rnd(10,20)); - if (lf->controller == C_PLAYER) { - msg("Your wounds close themselves!"); - } else if (haslos(player, lf->cell)) { - getlfname(lf, buf); - capitalise(buf); - msg("%s looks healthier!", buf); - } - } else { - if (lf->controller == C_PLAYER) { - msg("Nothing seems to happen."); + + + // handle special cases where the quaff effect + // is different to the throw effect. + if (o->type->id == OT_POT_WATER) { + switch (o->blessed) { + case B_BLESSED: + if (hasflag(lf->flags, F_UNDEAD)) { + if (isplayer(lf)) { + msg("This tastes like water, but burns like acid!"); + } else if (haslos(player, lf->cell)) { + getlfname(lf, buf); + msg("%s writhes in agony!", buf); + } + losehp(lf, rnd(5,15), DT_HOLY, NULL, "drinking holy water"); + // we now know that it is blessed + o->blessknown = B_TRUE; + } else { + msg("Mmm, holy water."); + // we now know that it is blessed + o->blessknown = B_TRUE; } + break; + case B_UNCURSED: + msg("Mmm, water."); + break; + case B_CURSED: + msg("Yuck! Something is wrong with this water."); + break; + } + if (isplayer(lf) || haslos(player, lf->cell)) { + seen = B_TRUE; + } + modhunger(lf, -pctof(0.05, (float)HUNGERCONST)); + } else if (o->type->id == OT_POT_JUICE) { + if (isplayer(lf)) { + switch (o->blessed) { + case B_BLESSED: + msg("Mmm, fruit juice!"); + break; + case B_UNCURSED: + msg("Mmm, fruit juice!"); + break; + case B_CURSED: + msg("Yuck! This tastes like rotten fruit."); + break; } - break; + seen = B_TRUE; + } + if (o->blessed != B_CURSED) { + modhunger(lf, -pctof(10, (float)HUNGERCONST)); + } + } else { + potioneffects(lf, o->type->id, o->blessed, &seen); + } + + if (seen) { + o->blessknown = B_TRUE; + makeknown(o->type->id); + } + + if (forcedrop) { + // try to add an empty container to the ground + addemptyob(lf->cell->obpile, o); + } else { + // try to add an empty container to our pack + addemptyob(lf->pack, o); } // lose the potion removeob(o, 1); - // gain an empty flask - if (!addob(lf->pack, "empty flask")) { - addob(lf->cell->obpile, "empty flask"); - if (lf->controller == C_PLAYER) { - msg("You drop the empty potion flask on the ground."); - } else if (haslos(player, lf->cell)) { - getlfname(lf, buf); - capitalise(buf); - msg("%s drops the empty potion flask on the ground.", buf); - } - } } +void potioneffects(lifeform_t *lf, enum OBTYPE oid, enum BLESSTYPE isblessed, int *seen) { + char buf[BUFLEN]; + unsigned int dam; + int i; + int first,dir; + int amt; + int failed; + int seenbyplayer; -void read(lifeform_t *lf, object_t *o) { + if (isplayer(lf)) { + seenbyplayer = B_TRUE; + } else if (haslos(player, lf->cell)) { + seenbyplayer = B_TRUE; + } else { + seenbyplayer = B_FALSE; + } + + if (seen) { + *seen = seenbyplayer; + } + + switch (oid) { + case OT_POT_ACID: + dam = rnd(5,15); + losehp(lf, dam, DT_ACID, NULL, "drinking acid"); + if (lf->controller == C_PLAYER) { + msg("Your suffer massive internal burning!"); + } else if (haslos(player, lf->cell)) { + getlfname(lf, buf); + capitalise(buf); + msg("%s writhes in agony!", buf); + } + break; + case OT_POT_ACROBATICS: + if (hasmr(lf)) { + if (isplayer(lf)) { + msg("You feel momentarily jumpy."); + } + break; + } + + // how long for? + i = geteffecttime(5,10, isblessed); + + if (lfhasflagval(lf, F_CANWILL, OT_A_JUMP, NA, NA, NULL)) { + nothinghappens(); + seenbyplayer = B_FALSE; + if (seen) *seen = B_FALSE; + } else { + addtempflag(lf->flags, F_CANWILL, OT_A_JUMP, NA, NA, NULL, i); + } + break; + case OT_POT_AMBROSIA: + // fix hunger + i = gethungerlevel(gethungerval(lf)); + if (i > 0) { + modhunger(lf, -i); + } + // fix hp + if ((lf->hp < lf->maxhp) && !hasmr(lf)) { + gainhp(lf, lf->maxhp); // ie. full hp + if (lf->controller == C_PLAYER) { + msg("You feel completely healed!"); + } else if (haslos(player, lf->cell)) { + getlfname(lf, buf); + msg("%s looks completely healed!", buf); + } + } else { + if (isplayer(lf)) { + msg("This makes you feel incredible!"); + } + } + break; + case OT_POT_COMPETENCE: + failed = B_TRUE; + if (hasmr(lf)) { + if (isplayer(lf)) { + msg("You feel momentarily %s.", (isblessed == B_CURSED) ? "incompetent" : "more competent"); + } + break; + } + if (isblessed == B_CURSED) { + amt = -1; + } else { + amt = 1; + } + // select a random attribute + if (isblessed == B_BLESSED) { + // modify all attributes + if (!modattr(lf, A_STR, amt)) failed = B_FALSE; + if (!modattr(lf, A_DEX, amt)) failed = B_FALSE; + if (!modattr(lf, A_IQ, amt)) failed = B_FALSE; + } else { + // modify just one attribute + i = rnd(1,3); + switch (i) { + case 1: + if (!modattr(lf, A_STR, amt)) failed = B_FALSE; + break; + case 2: + if (!modattr(lf, A_DEX, amt)) failed = B_FALSE; + break; + case 3: + if (!modattr(lf, A_IQ, amt)) failed = B_FALSE; + break; + } + } + if (failed) { + if (isplayer(lf)) { + nothinghappens(); + } + if (seen) *seen = B_FALSE; + } else { + if (seen) *seen = B_TRUE; + } + break; + case OT_POT_ELEMENTENDURE: + if (hasmr(lf)) { + if (isplayer(lf)) { + msg("You feel momentarily resistant to the elements."); + } + break; + } + // how long for? + i = geteffecttime(15,25,isblessed); + + if (!lfhasflagval(lf, F_DTRESIST, DT_FIRE, NA, NA, NULL)) { + addtempflag(lf->flags, F_DTRESIST, DT_FIRE, NA, NA, NULL, i); + } + if (!lfhasflagval(lf, F_DTRESIST, DT_COLD, NA, NA, NULL)) { + addtempflag(lf->flags, F_DTRESIST, DT_COLD, NA, NA, NULL, i); + } + break; + case OT_POT_ELEMENTIMMUNE: + if (hasmr(lf)) { + if (isplayer(lf)) { + msg("You feel momentarily immune to the elements."); + } + break; + } + // how long for? + i = geteffecttime(15,25,isblessed); + + if (!lfhasflagval(lf, F_DTIMMUNE, DT_FIRE, NA, NA, NULL)) { + addtempflag(lf->flags, F_DTIMMUNE, DT_FIRE, NA, NA, NULL, i); + } + if (!lfhasflagval(lf, F_DTIMMUNE, DT_COLD, NA, NA, NULL)) { + addtempflag(lf->flags, F_DTIMMUNE, DT_COLD, NA, NA, NULL, i); + } + break; + case OT_POT_GASEOUSFORM: + dospelleffects(lf, OT_S_GASEOUSFORM, lf, NULL, NULL, isblessed, seen); + break; + case OT_POT_HEALING: + dospelleffects(lf, OT_S_HEALING, lf, NULL, NULL, isblessed, seen); + break; + case OT_POT_HEALINGMIN: + dospelleffects(lf, OT_S_HEALINGMIN, lf, NULL, NULL, isblessed, seen); + break; + case OT_POT_INVULN: + if (hasmr(lf)) { + if (isplayer(lf)) { + msg("You feel momentarily invulnerable."); + } + break; + } + i = geteffecttime(5,15,isblessed); + + if (!lfhasflagval(lf, F_INVULNERABLE, B_TRUE, NA, NA, NULL)) { + addtempflag(lf->flags, F_INVULNERABLE, B_TRUE, NA, NA, NULL, i); + } + break; + case OT_POT_MAGIC: + if (hasmr(lf)) { + if (isplayer(lf)) { + msg("You feel your magical energy temporarily pulse."); + } + break; + } + + if (lf->maxmp > 0) { + msg("Your magical energy is restored."); + lf->mp = lf->maxmp; + } else { + nothinghappens(); + if (seen) *seen = B_FALSE; + } + + break; + case OT_POT_OIL: + if (isplayer(lf)) { + char buf[BUFLEN]; + switch (rnd(1,5)) { + case 1: strcpy(buf, "cooking"); break; + case 2: strcpy(buf, "olive"); break; + case 3: strcpy(buf, "peanut"); break; + case 4: strcpy(buf, "grapefruit"); break; + case 5: strcpy(buf, "vegetable"); break; + } + msg("Mmm, %s oil.", buf); + } + break; + case OT_POT_POLYMORPH: + if (isblessed == B_BLESSED) { + // controlled polymorph + dospelleffects(lf, OT_S_POLYMORPH, lf, NULL, NULL, isblessed, NULL); + } else { + // random polymorph + dospelleffects(lf, OT_S_POLYMORPHRND, lf, NULL, NULL, isblessed, NULL); + } + break; + case OT_POT_RESTORATION: + failed = B_TRUE; + if (hasmr(lf)) { + if (isplayer(lf)) { + msg("You feel momentarily restored."); + } + break; + } + if (getattr(lf,A_STR) < lf->baseatt[A_STR]) { + setattr(lf, A_STR, lf->baseatt[A_STR]); + if (isplayer(lf)) msg("Your strength is restored!"); + failed = B_FALSE; + } + if (getattr(lf,A_DEX) < lf->baseatt[A_DEX]) { + setattr(lf, A_DEX, lf->baseatt[A_DEX]); + if (isplayer(lf)) msg("Your dexterity is restored!"); + failed = B_FALSE; + } + if (getattr(lf,A_IQ) < lf->baseatt[A_IQ]) { + setattr(lf, A_IQ, lf->baseatt[A_IQ]); + if (isplayer(lf)) msg("Your intelligence is restored!"); + failed = B_FALSE; + } + + if (failed) { + if (isplayer(lf)) nothinghappens(); + if (seen) *seen = B_FALSE; + } else { + if (seen) *seen = B_TRUE; + } + break; + case OT_POT_SANCTUARY: + // how long for? + //i = gethealtime(lf); // TODO: change... + if (hasmr(lf)) { + if (isplayer(lf)) { + nothinghappens(); + } + break; + } + i = 15; + first = B_TRUE; + + // add holy barriers all around + for (dir = DC_N; dir <= DC_NW; dir++) { + cell_t *c; + c = getcellindir(lf->cell, dir); + if (c && isempty(c)) { + object_t *newob; + newob = addob(c->obpile, "magical barrier"); + addflag(newob->flags, F_OBHP, i, i, NA, NULL); + if (first && haslos(player, c)) { + msg("A magical barrier appears!"); + first = B_FALSE; + } + } + } + break; + case OT_POT_SPEED: + if (isblessed == B_BLESSED) { + dospelleffects(lf, OT_S_HASTE, lf, NULL, NULL, B_BLESSED, NULL); + } else if (isblessed == B_CURSED) { + dospelleffects(lf, OT_S_SLOW, lf, NULL, NULL, B_UNCURSED, NULL); + } else { // uncursed + dospelleffects(lf, OT_S_HASTE, lf, NULL, NULL, B_UNCURSED, NULL); + } + if (seen) *seen = B_TRUE; + break; + case OT_POT_WATER: + // this should never happen + msg("DB: OT_POT_WATER triggered in poteffects."); + break; + default: // nothing happens + break; + } +} + +void readsomething(lifeform_t *lf, object_t *o) { flag_t *f; char buf[BUFLEN],obname[BUFLEN]; int playercansee; int willid = B_FALSE; + int needsob = B_FALSE; getobname(o, obname, 1); @@ -1534,8 +5788,16 @@ void read(lifeform_t *lf, object_t *o) { playercansee = B_FALSE; } + taketime(lf, SPEED_READ); + // some checks first... + touch(lf, o); + if (hasflag(o->flags, F_DEAD)) { + return; + } + + if (lf->controller != C_PLAYER) { if (haslos(player, lf->cell)) { getlfname(lf, buf); @@ -1548,16 +5810,30 @@ void read(lifeform_t *lf, object_t *o) { willid = B_FALSE; if (playercansee) { switch (o->type->id) { + case OT_SCR_IDENTIFY: // only id if it does something + case OT_SCR_CREATEMONSTER: // only id if it does something + willid = B_FALSE; + break; default: willid = B_TRUE; break; } } + // ask for a target object of any type if scroll is unknown? + switch (o->type->id) { + case OT_SCR_IDENTIFY: + needsob = B_TRUE; + break; + default: + needsob = B_FALSE; + break; + } + if (!isknown(o) && willid) { // id the scroll makeknown(o->type->id); - getobname(o, obname, 1); + real_getobname(o, obname, 1, B_TRUE, B_FALSE, B_FALSE); // don't adjust for blindness if (lf->controller == C_PLAYER) { // tell the player msg("This is %s!",obname); @@ -1568,19 +5844,37 @@ void read(lifeform_t *lf, object_t *o) { if (o->type->obclass->id == OC_SCROLL) { // cast linked spell + object_t *targob = NULL; f = hasflag(o->flags, F_LINKSPELL); if (f) { + int seen = B_FALSE; + + // for unidentified scrolls which target an object, + // let player select ANY object (even if it won't + // work). + if (needsob && isplayer(lf) && !isknown(o)) { + targob = askobject(lf->pack, "Target which object", NULL, AO_NONE); + } + // TODO: castspell the spell with blessed status - dospelleffects(lf, f->val[0], lf); + dospelleffects(lf, f->val[0], NULL, targob, NULL, o->blessed, &seen); + if (seen) { + // id the scroll now + makeknown(o->type->id); + } + + // removeob one of the object + if (isplayer(lf)) msg("The scroll crumbles to dust."); + removeob(o, 1); } else if (o->type->id == OT_MAP) { if (lf->controller == C_PLAYER) { msg("You study your map for a while."); } - } - - if (o->type->id != OT_MAP) { + } else if (o->type->id == OT_SCR_NOTHING) { + if (isplayer(lf)) { + msg("The scroll crumbles to dust."); + } // removeob one of the object - msg("The scroll crumbles to dust."); removeob(o, 1); } } @@ -1590,14 +5884,34 @@ object_t *relinkob(object_t *src, obpile_t *dst) { flag_t *f,*nextf; if (!obfits(src, dst)) return NULL; + if (src->pile->owner) { + // previous owner loses all flags conferred by this object + loseobflags(src->pile->owner, src, ALLCONFERRED); + } + // unweild for (f = src->flags->first ; f ; f = nextf) { nextf = f->next; if (f->id == F_EQUIPPED) { killflag(f); + } else if (f->id == F_CURAMMO) { + killflag(f); } } + // adjust letter... + // gold should always have letter '$' + if (src->type->obclass->id == OC_MONEY) { + src->letter = '$'; + } + + // adjust letter if going to player? + if (dst->owner && (dst->owner->controller == C_PLAYER)) { + src->letter = getnextletter(dst, &src->letter); + } + + + // unlink this object from the current list if (src->prev == NULL) { // first @@ -1633,19 +5947,34 @@ object_t *relinkob(object_t *src, obpile_t *dst) { src->pile = dst; src->next = NULL; - // gold should always have letter '$' - if (src->type->obclass->id == OC_MONEY) { - src->letter = '$'; + if (src->pile->owner) { + // new owner gains "hold confer" flags conferred by this object + giveobflags(src->pile->owner, src, F_HOLDCONFER); + // new owner gains "activate confer" flags conferred by this object if it's active + if (isactivated(src)) { + giveobflags(src->pile->owner, src, F_ACTIVATECONFER); + } } - // adjust letter if going to player - if (dst->owner && (dst->owner->controller == C_PLAYER)) { - src->letter = getnextletter(dst, &src->letter); - } + if (obproduceslight(src)) { + calclight((getoblocation(src))->map); + drawscreen(); + } return src; } +void removedeadobs(obpile_t *op) { + object_t *o, *nexto; + for (o = op->first ; o ; o = nexto) { + nexto = o->next; + if (hasflag(o->flags, F_DEAD)) { + obdie(o); + continue; + } + } +} + // returns the amount left int removeob(object_t *o,int howmany) { if (howmany == ALL) { @@ -1662,131 +5991,1053 @@ int removeob(object_t *o,int howmany) { return o->amt; } -void throwat(lifeform_t *thrower, object_t *o, cell_t *where) { +void setblessed(object_t *o, enum BLESSTYPE wantbless) { + o->blessed = wantbless; + if (wantbless != B_BLESSED) { + flag_t *f,*nextf; + // remove glowing from blessings + for (f = o->flags->first ; f ; f = nextf) { + nextf = f->next; + if (f->lifetime == FROMBLESSING) { + killflag(f); + } + } + } +} + +void setinscription(object_t *o, char *text) { + if (o->inscription) { + free(o->inscription); + } + o->inscription = strdup(text); +} + +object_t *splitob(object_t *o) { + object_t *newob; + // decrease count on original stack temporarily, in case we + // can't place the new object (at our weight limit?). + // doesn't matter if it goes down to zero, as we will put it back up soon. + o->amt--; + // give new object + newob = addobject(o->pile, o->type->name, B_NOSTACK); + // restore count + o->amt++; + if (newob) { + copyobprops(newob, o); + killflagsofid(newob->flags, F_STACKABLE); + // remove old ob + removeob(o, 1); + } + return newob; +} + +// returns amount of damage taken +int takedamage(object_t *o, unsigned int howmuch, int damtype) { + char predamname[BUFLEN],postdamname[BUFLEN]; + char obname[BUFLEN]; + flag_t *hpflag, *f; + int damtaken = 0; + + // some checks need to happen before + // making sure the damage will happen. + // for example, even if an object is + // immune to water damage, water will + // still put out fire + + // water puts out fire + if (damtype == DT_WATER) { + extinguish(o); + } + + adjustdamob(o, &howmuch, damtype); + if (howmuch <= 0) { + return 0; + } + + // update lastdamtype + f = hasflag(o->flags, F_LASTDAMTYPE); + if (f) { + f->val[0] = damtype; + } else { + addflag(o->flags, F_LASTDAMTYPE, damtype, NA, NA, NULL); + } + + real_getobname(o, obname, o->amt, B_FALSE, B_TRUE, B_TRUE); + getobconditionname(o, predamname); + hpflag = hasflag(o->flags, F_OBHP); + if (hpflag) { + damtaken = MAXOF(hpflag->val[0], howmuch); + // object loses hp + hpflag->val[0] -= howmuch; + } + + if (!hpflag || (hpflag->val[0] <= 0)) { + // special cases.... + if (damtype == DT_FIRE) { + if (o->material->id == MT_FLESH) { // fire roasts flesh + object_t *meat; + meat = addob(o->pile, "chunk of roast meat"); + // purposely don't use getweight! + meat->weight = o->weight; + } else { // fire turns other things to ash + addob(o->pile, "pile of ash"); + } + } else if (damtype == DT_BASH) { + if (o->material->id == MT_GLASS) { // bashing damage breaks glass + int nshards; + char buf[BUFLEN]; + nshards = getnumshards(o); + sprintf(buf, "%d pieces of broken glass", nshards); + addob(o->pile, buf); + } else if (o->material->id == MT_ICE) { // bashing breaks ice + int nshards; + char buf[BUFLEN]; + nshards = getnumshards(o) / 15; + sprintf(buf, "%d chunks of ice", nshards); + addob(o->pile, buf); + } + } + + // object dies! + addflag(o->flags, F_DEAD, B_TRUE, NA, NA, NULL); + } else if (hpflag) { + flag_t *f; + // object was just damaged + getobconditionname(o, postdamname); + + + // was it enough to change the status + if (!hasflag(o->flags, F_NOOBDAMTEXT) && strcmp(predamname, postdamname)) { + // if it was melting, drop some water here + if (damtype == DT_MELT) { + if (hasflag(o->flags, F_EQUIPPED) ) { + addob(o->pile->owner->cell->obpile, "small puddle of water"); + } else { + // melts into the ob pile + addob(o->pile, "small puddle of water"); + } + } + + if (o->pile->owner) { + if (o->pile->owner->controller == C_PLAYER) { + msg("Your %s %s!",noprefix(obname), getobhurtname(o, damtype)); + } else if (haslos(player, o->pile->owner->cell)) { + char monname[BUFLEN]; + getlfname(o->pile->owner, monname); + msg("%s's %s %s!",monname, noprefix(obname), getobhurtname(o, damtype)); + } + } else if (haslos(player, o->pile->where)) { + capitalise(obname); + msg("%s %s!", obname, getobhurtname(o, damtype)); + } + } + + + // catches on fire? + if (damtype == DT_FIRE) { + if (isflammable(o)) { + f = hasflag(o->flags, F_ONFIRE); + if (!f) { + // on fire for 2 turns + addtempflag(o->flags, F_ONFIRE, B_TRUE, NA, NA, NULL, 2); + } + } + } + + // explodes? + f = hasflag(o->flags, F_EXPLODEONDAM); + if (f) { + if (f->val[2] == B_IFACTIVATED) { + if (hasflag(o->flags, F_ACTIVATED)) { + if (hasflag(o->flags, F_EXPLODEONDEATH)) { + // object dies! + addflag(o->flags, F_DEAD, B_TRUE, NA, NA, NULL); + } else { + // explode + explodeob(o, f, (f->val[1] == B_BIG) ? 1 : 0); + } + + } + } else { + if (hasflag(o->flags, F_EXPLODEONDEATH)) { + // object dies! + addflag(o->flags, F_DEAD, B_TRUE, NA, NA, NULL); + } else { + // explode + explodeob(o, f, (f->val[1] == B_BIG) ? 1 : 0); + } + } + } + + // flashes? + f = hasflag(o->flags, F_FLASHONDAM); + if (f) { + if (f->val[2] == B_IFACTIVATED) { + if (hasflag(o->flags, F_ACTIVATED)) { + // flash, then object dies + brightflash(getoblocation(o),f->val[0], NULL); + addflag(o->flags, F_DEAD, B_TRUE, NA, NA, NULL); + } + } else { + // flash, then object dies + brightflash(getoblocation(o),f->val[0], NULL); + addflag(o->flags, F_DEAD, B_TRUE, NA, NA, NULL); + } + } + } + return damtaken; +} + +// throw speed is the damage multiplier +int fireat(lifeform_t *thrower, object_t *o, cell_t *where, int speed, object_t *firearm) { char throwername[BUFLEN]; + char throwernamea[BUFLEN]; char obname[BUFLEN]; char targetname[BUFLEN]; char buf[BUFLEN]; lifeform_t *target; + cell_t *srcloc; + int seen; + int shattered = B_FALSE; + char throwverbpast[BUFLEN]; + char throwverbpres[BUFLEN]; + int acc; + int youhit; + reason = E_OK; + + if (firearm) { + strcpy(throwverbpres, "fire"); + strcpy(throwverbpast, "fired"); + } else { + strcpy(throwverbpres, "throw"); + strcpy(throwverbpast, "thrown"); + } + + + if (isblind(player)) { + if (isplayer(thrower)) { + getobname(o, obname, 1); + } else { + strcpy(obname, "something"); + } + } else { + getobname(o, obname, 1); + } getlfname(thrower, throwername); + if (isplayer(thrower)) { + strcpy(throwernamea, throwername); + } else { + if (isvowel(*(noprefix(throwername)))) { + strcpy(throwernamea, "an "); + } else { + strcpy(throwernamea, "a "); + } + strcat(throwernamea, noprefix(throwername)); + } + + srcloc = getoblocation(o); + + // can't throw weilded cursed objects + if ((o->blessed == B_CURSED) && (!firearm)) { + // is object in thrower's pack? we need to check this + // because of things like telekenises which let us throw + // things we don't have. + if (o->pile->owner == thrower) { + // object equipped? + if (hasflag(o->flags, F_EQUIPPED)) { + // throw will fail! + if (isplayer(thrower)) { + msg("You can't release your %s - it %s cursed!", noprefix(obname), + isblessknown(o) ? "is" : "must be"); + o->blessknown = B_TRUE; + } else if (haslos(player, thrower->cell)) { + msg("%s tries to throw %s but can't!", throwername, obname); + o->blessknown = B_TRUE; + } + // take time anyway + //taketime(thrower, SPEED_THROW); + // fail. + reason = E_CURSED; + return B_TRUE; + } + } + // otherwise does player have haslos? + + // identify as cursed! + } + + if (haslos(player, where)) { + seen = B_TRUE; + } else { + seen = B_FALSE; + } + target = where->lf; if (target) { getlfname(target, targetname); } - // announce it ("xx throws xx" "at yy") - getobname(o, obname, 1); - if (thrower->controller == C_PLAYER) { - if (target) { - msg("You throw %s at %s.", obname, targetname); - } else { - msg("You throw %s.",obname); + // touch effects + if (thrower && !firearm) { + if (o->pile == thrower->pack) { + touch(thrower, o); } - } else { } - if (haslos(player, thrower->cell)) { + // announce it ("xx throws xx" "at yy") + if (isplayer(thrower)) { + if (target) { + msg("You %s %s at %s.", throwverbpres, obname, targetname); + } else { + msg("You %s %s.",throwverbpres, obname); + } + } else if (haslos(player, srcloc) && (srcloc == thrower->cell)) { char throwstring[BUFLEN]; - char *throwercaps; - throwercaps = strdup(throwername); - capitalise(throwercaps); - sprintf(throwstring, "%s throw%s %s",throwercaps, - (thrower->controller == C_PLAYER) ? "" : "s", + + sprintf(throwstring, "%s %ss %s", throwername, throwverbpres, obname); if (target && haslos(player, where)) { - strcat(throwstring, " at"); + strcat(throwstring, " at "); strcat(throwstring, targetname); } strcat(throwstring, "."); - - free(throwercaps); + msg("%s", throwstring); + } else if (seen) { + char throwstring[BUFLEN]; + /* + if (target) { + msg("Something %ss %s at %s.", throwverbpres, obname, targetname); + } else { + msg("Something %ss %s.",throwverbpres, obname); + } + */ + sprintf(throwstring, "%s %s through the air", obname, (o->amt == 1) ? "flies" : "fly"); + if (target && haslos(player, where)) { + strcat(throwstring, " towards "); + strcat(throwstring, targetname); + } + strcat(throwstring, "."); + msg("%s", throwstring); } - taketime(thrower, SPEED_THROW); + //taketime(thrower, SPEED_THROW); - // TODO: figure out if you miss or not, based on distance + // some obejcts will die when thrown. + if (o->type->id == OT_ASH) { + if (haslos(player, srcloc)) { + msg("%s disperses into the air.", obname); + } + removeob(o, 1); + return B_FALSE; + } + + // gravboost? + if (lfhasflag(thrower, F_GRAVBOOSTED) && (srcloc == thrower->cell)) { + if (isplayer(thrower) || haslos(player, srcloc)) { + msg("%s drops and sticks to the ground!", obname); + } + + moveob(o, thrower->cell->obpile, 1); + return B_FALSE; + } // do throw animation - anim(thrower->cell, where, getglyph(o)); + if (seen) { + anim(srcloc, where, getglyph(o)); + } + + // find out your chances of hitting + acc = getmissileaccuracy(thrower, where, o, firearm, A_DEX); + + // roll for hit + // metal weapon versus magnetic shield? + if (lfhasflag(target, F_MAGSHIELD) && ismetal(o->material->id)) { + // announce + if (seen) { + msg("%s is repelled from %s!", obname, targetname); + } + youhit = B_FALSE; + } else if (rnd(1,100) <= acc) { + youhit = B_TRUE; + } else { + youhit = B_FALSE; + } + // if someone is there, they take damage and the object might die + // this should be "if target && youhit" if (target) { - int dam = 0,shatterdam = 0; - char damstring[BUFLEN]; - // damage is kilograms / 5. - // ie. 5 kg object does 1 damage - // ie. 100 kg object does 20 damage (person) - // ie. 1 tonne object does 200 damage (car) - dam = (int)ceil((double)o->weight / 5.0); - if (willshatter(o->material->id)) { - int maxshatterdam; - // deal extra cutting damage afterwards - maxshatterdam = ceil(o->weight); - if (maxshatterdam < 1) maxshatterdam = 1; - - shatterdam = rnd(1, maxshatterdam); - } + if (youhit) { + int dam = 0,shatterdam = 0; + char damstring[BUFLEN]; + dam = getthrowdam(o) * speed; + // special case + if (o->type->id == OT_RUBBERBULLET) { + dam = 1; + } - // announce - if (haslos(player, where)) { - char *obcaps; - obcaps = strdup(obname); - capitalise(obcaps); - strrep(obcaps, "A ", "The "); + // deal extra cutting damage afterwards? + shatterdam = getshatterdam(o); + if (shatterdam > 0) { + shattered = B_TRUE; + } + + // announce + if (seen) { + char buf2[BUFLEN]; + sprintf(buf2, "%s hits %s%s",obname,targetname, + (willshatter(o->material->id)) ? " and shatters!" : "." + ); + if (lfhasflag(player, F_EXTRAINFO)) { + char damstring[BUFLEN]; + sprintf(damstring, " [%d dmg]",dam); + strcat(buf2, damstring); + } + msg("%s", buf2); + } else { + if (willshatter(o->material->id)) { + youhear(where, "shattering glass."); + } + } + sprintf(damstring, "%s (%s by %s)",obname,throwverbpast, throwernamea); + + // TODO: at the moment you won't get experience if you telekenetically + // throw an object at something. is this okay? + losehp(target, dam, DT_PROJECTILE, (thrower->cell == srcloc) ? thrower : NULL, damstring); - msg("%s hits %s%s",obcaps,targetname, - (willshatter(o->material->id)) ? " and shatters!" : "." - ); - free(obcaps); + if (shatterdam && !isdead(target)) { + // extra glass damage + if (seen) { + msg("%s %s showered in glass shards!", targetname, isplayer(target) ? "are" : "is"); + } + sprintf(damstring, "%s (%s by %s)",obname,throwverbpast, throwernamea); + losehp(target, shatterdam, DT_SLASH, thrower, damstring); + } + } else { + if (isplayer(thrower)) { + msg("Your %s misses %s.", noprefix(obname), targetname); + } else if (haslos(player, where)) { + msg("%s misses %s.", obname, targetname); + } } - sprintf(damstring, "%s (thrown by %s)",obname,throwername); - losehp(target, dam, DT_PROJECTILE, thrower, damstring); - - if (shatterdam && !isdead(target)) { - // extra glass damage - sprintf(damstring, "%s (thrown by %s)",obname,throwername); - losehp(target, shatterdam, DT_SLASH, thrower, damstring); - } } else { // no target if (willshatter(o->material->id)) { if (haslos(player, where)) { char *obcaps; obcaps = strdup(obname); capitalise(obcaps); - strrep(obcaps, "An ", "The "); - strrep(obcaps, "A ", "The "); + obcaps = strrep(obcaps, "An ", "The ", NULL); + obcaps = strrep(obcaps, "A ", "The ", NULL); msg("%s shatters!",obcaps); free(obcaps); + } else { + youhear(where, "shattering glass."); } + shattered = B_TRUE; } } // either remove or move the object - if (willshatter(o->material->id)) { + if (shattered) { if (o->material->id == MT_GLASS) { - int numshards,maxshards; - removeob(o, 1); - maxshards = ceil(o->weight) * 10; - if (maxshards < 1) maxshards = 1; - numshards = rnd(1,maxshards); + int numshards; + numshards = getnumshards(o); // place glass shards sprintf(buf, "%d pieces of broken glass",numshards); addob(where->obpile, buf); } else if (o->material->id == MT_ICE) { - // puddle of water - addob(where->obpile, "small puddle of water"); - } else { - // just remove the object + int numshards; + numshards = getnumshards(o) / 15; + if (numshards < 1) numshards = 1; + + // ice + sprintf(buf, "%d chunks of ice",numshards); + addob(where->obpile, buf); + } + + // potion effects? + if (shattered) { + if (o->type->obclass->id == OC_POTION) { + int observed; + switch (o->type->id) { + case OT_POT_ACID: // take acid damage + if (seen) { + makeknown(o->type->id); + } + if (target) { + if (seen) { + msg("%s %s splashed with acid!", targetname, + isplayer(target) ? "are" : "is"); + } + losehp(target, rnd(1,5), DT_ACID, thrower, "a splash of acid"); + } else { + // all objects take damage + object_t *oo,*nextoo; + // announce + if (seen) { + msg("Acid splashes all over the floor!"); + } + // everything here takes acid damage + for (oo = where->obpile->first ; oo ; oo = nextoo) { + nextoo = oo->next; + takedamage(oo, rnd(5,15), DT_ACID); + } + } + break; + case OT_POT_ELEMENTENDURE: + case OT_POT_ELEMENTIMMUNE: + case OT_POT_GASEOUSFORM: + case OT_POT_POLYMORPH: + case OT_POT_SANCTUARY: // always make them known + if (target) { + if (seen) { + makeknown(o->type->id); + } + potioneffects(target, o->type->id, o->blessed, &observed); + } + break; + case OT_POT_HEALING: + case OT_POT_HEALINGMIN: // only make them known if it had an effect + if (target) { + potioneffects(target, o->type->id, o->blessed, &observed); + if (observed) { + makeknown(o->type->id); + } + } + break; + case OT_POT_WATER: + if (seen) { + makeknown(o->type->id); + } + if (target) { + if (seen) { + msg("%s %s splashed with water.", targetname, + isplayer(target) ? "are" : "is"); + } + + if (hasflag(target->flags, F_UNDEAD) && isblessed(o)) { + if (isplayer(target)) { + msg("The water burns like acid!"); + } else if (haslos(player, target->cell)) { + msg("%s writhes in agony!", targetname); + } + losehp(target, rnd(5,10), DT_HOLY, NULL, "holy water"); + if (seen) { + // we now know that it is blessed + o->blessknown = B_TRUE; + } + } else { + losehp(target, 0, DT_WATER, thrower, "a splash of water"); + } + } else { + // all objects take damage + object_t *oo,*nextoo; + // announce + if (seen) { + msg("Water splashes onto the floor."); + } + //TODO: holy water blesses everything? + // everything here takes water damage + for (oo = where->obpile->first ; oo ; oo = nextoo) { + nextoo = oo->next; + takedamage(oo, 0, DT_WATER); + } + addob(where->obpile, "small puddle of water"); + } + + break; + default: + break; + } + } + } + + + // now remove the object + removeob(o, 1); + } else { + object_t *newob; + newob = moveob(o, where->obpile, 1); + // fake its birth time so that it can be damaged + newob->birthtime = -1; + takedamage(newob, speed, DT_BASH); + } + return B_FALSE; +} + +void timeeffectsob(object_t *o) { + flag_t *f, *nextf; + cell_t *location; + lifeform_t *owner; + char obname[BUFLEN]; + + if (hasflag(o->flags, F_DEAD)) return; + + getobname(o, obname, o->amt); + + if (o->pile->where) { + location = o->pile->where; + } else { + location = NULL; + } + + if (o->pile->owner) { + owner = o->pile->owner; + } else { + owner = NULL; + } + + // expire flags + timeeffectsflags(o->flags); + + // blessed weapons glow when held near undead + if (o->blessed && isweapon(o)) { + cell_t *ourcell; + flag_t *glowflag = NULL; + int nearundead = B_FALSE; + + // are we glowing? + for (f = o->flags->first ; f ; f = nextf) { + nextf = f->next; + if ((f->id == F_PRODUCESLIGHT) && (f->lifetime == FROMBLESSING)) { + glowflag = f; + break; + } + } + if (isequipped(o)) { + // do we need to start/stop glowing? + ourcell = getoblocation(o); + if (ourcell) { + int x,y; + // check if we are near undead (ie. within 2 sq) + for (y = ourcell->y - 2; y <= ourcell->y + 2; y++) { + for (x = ourcell->x - 2; x <= ourcell->x + 2; x++) { + cell_t *c; + c = getcellat(ourcell->map, x, y); + if (c && haslf(c) && hasflag(c->lf->flags, F_UNDEAD)) { + nearundead = B_TRUE; + break; + } + } + } + + if (nearundead) { + if (!glowflag) { + // start glowing + glowflag = addtempflag(o->flags, F_PRODUCESLIGHT, 2, NA, NA, NULL, FROMBLESSING); + /* + if (isplayer(o->pile->owner)) { + msg("Your %s start%s glowing!",noprefix(obname), (o->amt == 1) ? "s" : ""); + if (!o->blessknown) o->blessknown = B_TRUE; + } else if (haslos(player, ourcell)) { + msg("%s start%s glowing!",obname, (o->amt == 1) ? "s" : ""); + if (!o->blessknown) o->blessknown = B_TRUE; + } + */ + if (haslos(player, ourcell)) { + if (!o->blessknown) o->blessknown = B_TRUE; + } + calclight(ourcell->map); + } + } else { // not near undead + if (glowflag) { + killflag(glowflag); + glowflag = NULL; + /* + if (isplayer(o->pile->owner)) { + msg("Your %s stop%s glowing.",noprefix(obname), (o->amt == 1) ? "s" : ""); + if (!o->blessknown) o->blessknown = B_TRUE; + } else if (haslos(player, ourcell)) { + msg("%s stop%s glowing.",obname, (o->amt == 1) ? "s" : ""); + if (!o->blessknown) o->blessknown = B_TRUE; + } + */ + } + } + } + } else { // not equipped + if (glowflag) { // if not equipped and glowing... + // stop glowing + killflag(glowflag); + glowflag = NULL; + } + } + } + + if (location) { + // does object's material change cell type? + if (o->material->id == MT_FIRE) { + if (hasflag(location->type->material->flags, F_FLAMMABLE)) { + // burn! + // TODO: change to celltype of nearby floor + // OR to default map empty type. + if (haslos(player, location)) { + msg("The %s burns!", location->type->name); + } + setcelltype(location, CT_CORRIDOR); + addob(location->obpile, "pile of ash"); + } + } + } + + // check each flag for this object... + for (f = o->flags->first ; f ; f = nextf) { + object_t *oo,*nextoo; + nextf = f->next; + + // CHECKS FOR CURRENT OBJECT + if (f->id == F_ACTIVATED) { + if (o->type->id == OT_JETPACK) { + // activated jetpack on the ground? + if (location) { + if (haslos(player, location)) { + char obname[BUFLEN]; + getobname(o, obname, 1); + msg("%s shoots up into the roof and explodes!",obname); + } + removeob(o, o->amt); + return; + } else { + int chargeleft; + // use up power + chargeleft = usecharge(o); + + // out of power? + if (chargeleft <= 0) { + if (owner) { + // announce power loss + if (isplayer(owner)) { + msg("Your %s is out of power!",noprefix(obname)); + // you know it's out + f = hasflag(o->flags, F_CHARGES); + f->known = B_TRUE; + } + } + + turnoff(NULL, o); + + if (owner) { + // user will fall to the ground if not flying in some + // other way + if (!lfhasflag(owner, F_FLYING)) { + if (haslos(player, owner->cell)) { + char lfname[BUFLEN]; + getlfname(owner, lfname); + msg("%s crash%s to the ground!",lfname, + isplayer(owner) ? "" : "es"); + } + losehp(owner, rnd(1,4), DT_BASH, NULL, "falling"); + } + } + } else if (chargeleft <= 10) { // about to run out of power? + if (isplayer(owner)) { + msg("Your %s splutters.", noprefix(obname)); + } + // TODO: add smoke! + } + } + } else if (hasflag(o->flags, F_GRENADE)) { + flag_t *f2; + // countdown... + f2 = hasflag(o->flags, F_CHARGES); + if (f2) { + f2->val[0]--; + if (f2->val[0] <= 0) { + // blow up! + takedamage(o, 999, DT_DIRECT); + return; + } + } + } else if (o->type->id == OT_LANTERNOIL) { + flag_t *f2; + // countdown... + f2 = hasflag(o->flags, F_CHARGES); + if (f2) { + f2->val[0]--; + if (f2->val[0] <= 0) { + // turnoff + turnoff(NULL, o); + obaction(o, "goes out"); + return; + } else if (f2->val[0] <= 50) { + if (rnd(1,3)) { + obaction(o, "flickers"); + } + } + } + } + } + + if (f->id == F_OBHPDRAIN) { + enum DAMTYPE damtype; + //takedamage(o, f->val[0] * firstlftime, DT_DIRECT); + if (f->val[1] == NA) { + damtype = DT_DIRECT; + } else { + damtype = f->val[1]; + } + takedamage(o, f->val[0], damtype); + if (hasflag(o->flags, F_DEAD)) return; + } + + + // damaging objects here will damage other objects + if (f->id == F_WALKDAM) { + // everything here takes damage + //damageallobs(o, o->pile, f->val[0] * timespent, f->val[1]); + damageallobs(o, o->pile, f->val[0], f->val[1]); + //if (hasflag(o->flags, F_DEAD)) return; + } + + // is object on fire? + if (f->id == F_ONFIRE) { + // water puts out fire + for (oo = o->pile->first ; oo ; oo = nextoo) { + nextoo = oo->next; + if ((oo != o) && (oo->material->id == MT_WATER)) { + extinguish(o); + continue; + } + } + // if it hasn't been extinguished, fire burns + takedamage(o, 2, DT_FIRE); // TODO: don't hardcode + if (hasflag(o->flags, F_DEAD)) return; + } + + + + // will current object convert other obs to something else? + if (f->id == F_MATCONVERT) { + enum MATERIAL mat; + mat = f->val[0]; + + for (oo = o->pile->first ; oo ; oo = nextoo) { + flag_t *f2; + nextoo = oo->next; + if ((oo != o) && (oo->material->id == mat)) { + char buf[BUFLEN]; + object_t *newob; + // TODO: remove the old object first + // in case the obpile doesn't have space + // to fit both the new and old ones. + // place item of this type here! + sprintf(buf, "%d %s", o->amt, f->text); + newob = addob(o->pile, buf); + if (newob) { + int cansee; + // make the weight match. + newob->weight = o->weight; + // announce it? + cansee = B_FALSE; + if (location && haslos(player, location)) { + cansee = B_TRUE; + } else if (o->pile->owner == player) { + cansee = B_TRUE; + } + + if (cansee) { + f2 = NULL; + if (o->amt > 1) { + f2 = hasflagval(o->flags, F_MATCONVERTTEXTPL, mat, NA, NA,NULL); + } + if (!f2) { + f2 = hasflagval(o->flags, F_MATCONVERTTEXT, mat, NA, NA, NULL); + } + + if (f2) { + char *locbuf; + getobname(o, buf, o->amt); + locbuf = strdup(buf); + capitalise(locbuf); + if (o->pile->owner == player) { + // Remove prefix + locbuf = strrep(locbuf, "An ", "", NULL); + locbuf = strrep(locbuf, "A ", "", NULL); + } + msg("%s%s %s.", (o->pile->owner == player) ? "Your " : "", locbuf, f2->text); + free(locbuf); + } + } + // remove original object + removeob(o, o->amt); + return; + } + } + } + } + + + } // end for each object flag +} + +void turnoff(lifeform_t *lf, object_t *o) { + char obname[BUFLEN]; + flag_t *f; + + f = hasflag(o->flags, F_ACTIVATED); + if (!f) { + // already off + return; + } + + // reset charges + if (hasflag(o->flags, F_RECHARGEWHENOFF)) { + f = hasflag(o->flags, F_CHARGES); + if (f) { + f->val[0] = f->val[1]; + } + } + + getobname(o, obname, 1); + if (lf) { + if (isplayer(lf)) { + msg("You deactivate your %s.",noprefix(obname)); + } else if (haslos(player, lf->cell)) { + char lfname[BUFLEN]; + getlfname(lf, lfname); + msg("%s deactivates %s.",lfname, obname); + } + } + + if (hasflag(o->flags, F_GRENADE)) { + object_t *stackob; + // make it stackable again + addflag(o->flags, F_STACKABLE, B_TRUE, NA, NA, NULL); + // other stacks to join? + stackob = canstackob(o->pile, o); + if (stackob) { + char stackname[BUFLEN]; + // remove it, and inc amt on the stack removeob(o, 1); + stackob->amt++; + getobname(stackob, stackname, stackob->amt); + msglower("%c - %s.",stackob->letter, stackname); + } else { + // just turn off + killflag(f); } } else { - moveob(o, where->obpile, 1); + killflag(f); } + + if (o->pile->owner) { + loseobflags(o->pile->owner, o, F_ACTIVATECONFER); + } +} + +void turnon(lifeform_t *lf, object_t *o) { + char obname[BUFLEN]; + flag_t *f; + + + f = hasflag(o->flags, F_ACTIVATED); + if (f) { + // already on + if (isplayer(lf)) { + msg("Your %s is already activated!\n", noprefix(obname)); + } + return; + } + + // check charges + f = hasflag(o->flags, F_CHARGES); + if (f && (f->val[0] <= 0)) { + // out of power + if (isplayer(lf)) { + nothinghappens(); + } + return; + } + + getobname(o, obname, 1); + if (isplayer(lf)) { + msg("You activate your %s.",noprefix(obname)); + } else if (haslos(player, lf->cell)) { + char lfname[BUFLEN]; + getlfname(lf, lfname); + msg("%s activates %s.",lfname, obname); + } + + // for grenades, give a new object which is activated + if (hasflag(o->flags, F_GRENADE)) { + object_t *newob; + + newob = splitob(o); + + if (newob) { + char newobname[BUFLEN]; + // announce new ob + addflag(newob->flags, F_ACTIVATED, B_TRUE, NA, NA, NULL); + getobname(newob, newobname, 1); + msglower("%c - %s [activated].",newob->letter, newobname); + } else { + if (isplayer(lf)) { + msg("You don't have room for an activated %s!",noprefix(obname)); + } + } + } else { + addflag(o->flags, F_ACTIVATED, B_TRUE, NA, NA, NULL); + } + + giveobflags(lf, o, F_ACTIVATECONFER); +} + + +// returns charges remaining, -1 if object doesn't have the flag +int usecharge(object_t *o) { + flag_t *f; + f = hasflag(o->flags, F_CHARGES); + if (f) { + f->val[0]--; + return f->val[0]; + } + return -1; +} + +int validateobs(void) { + objecttype_t *ot; + int foundspells = B_FALSE; + int goterror = B_FALSE; + for (ot = objecttype ; ot ; ot = ot->next) { + if ((ot->obclass->id == OC_SPELL) || (ot->obclass->id == OC_ABILITY)) { + if (!foundspells) foundspells = B_TRUE; + if (!hasflag(ot->flags, F_SPELLSCHOOL)) { + printf("ERROR - spell %s doesn't have F_SPELLSCHOOL.\n", ot->name); + goterror = B_TRUE; + } + /* + if (!hasflag(ot->flags, F_SPELLLETTER)) { + printf("ERROR - spell %s doesn't have F_SPELLLETTER.\n", ot->name); + goterror = B_TRUE; + } + */ + + if ((ot->obclass->id == OC_SPELL) && !hasflag(ot->flags, F_SPELLLEVEL)) { + printf("ERROR - spell %s doesn't have F_SPELLLEVEL.\n", ot->name); + goterror = B_TRUE; + } + } else if (ot->obclass->id == OC_SCROLL) { + if (foundspells) { + printf("ERROR in object '%s' - all Scrolls must be defined before Spells.", ot->name); + goterror = B_TRUE; + } + } + if (hasflagval(ot->flags, F_PICKLOCKS, NA, B_BLUNTONFAIL, NA, NULL) && hasflag(ot->flags, F_STACKABLE)) { + printf("ERROR in object '%s' - cannot have F_BLUNTONFAIL on stackable objects.", ot->name); + goterror = B_TRUE; + } + if (hasflag(ot->flags, F_FIREARM) && !hasflag(ot->flags, F_RANGE)) { + printf("ERROR in object '%s' - firearms need to have F_RANGE.", ot->name); + goterror = B_TRUE; + } + } + + return goterror; } int willshatter(enum MATERIAL mat) { @@ -1794,6 +7045,80 @@ int willshatter(enum MATERIAL mat) { case MT_GLASS: case MT_ICE: return B_TRUE; + default: break; } return B_FALSE; } + +// determine how long a conferred effect should last, based on its blessed/cursed status. +// blessed: always max +// uncursed: random number between min & max +// cursed: always min +int geteffecttime(int min, int max, enum BLESSTYPE isblessed) { + int howlong; + // how long for? + switch (isblessed) { + case B_BLESSED: + howlong = 15; + break; + case B_CURSED: + howlong = 5; + break; + default: // ie. B_UNCURSED + howlong = rnd(5,15); + break; + } + return howlong; +} + +int getmissileaccuracy(lifeform_t *thrower, cell_t *where, object_t *missile, object_t *firearm, enum ATTRIB whichatt) { + int acc,maxrange,howfar; + // figure out if you miss or not, based on distance and + // dexterity + // base: + // if throwing, 50% + // if firing, gun accuracy + // adjust for range: + // pointblank = +30% + // max = -30% + // then modify using dexterity/int/whatever + // then penalise for throwing non-missiles + + // base accuracy + if (firearm) { + acc = getobaccuracy(firearm); + } else { + acc = 50; + } + + // adjust for range + if (firearm || missile) { + if (firearm) { + maxrange = getfirearmrange(firearm); + } else { + maxrange = getmaxthrowrange(thrower, missile); + } + } else { + maxrange = getvisrange(thrower); + } + + howfar = getcelldist(thrower->cell, where); + + if (howfar == 1) { + acc += 30; + } else if (howfar == maxrange) { + acc -= 30; + } + + + // modify for dexterity + if (whichatt != A_NONE) { + acc += getstatmod(thrower, whichatt); + } + + // penalty for throwing non-missiles + if (missile && !firearm && !ismissile(missile)) { + acc -= 20; + } + return acc; +} diff --git a/objects.h b/objects.h index c032104..28bf7cd 100644 --- a/objects.h +++ b/objects.h @@ -2,57 +2,151 @@ #define __OBJECTS_H #include "defs.h" +object_t *addemptyob(obpile_t *where, object_t *o); knowledge_t *addknowledge(enum OBCLASS id, char *hiddenname, int known); -material_t *addmaterial(enum MATERIAL id, char *name); +material_t *addmaterial(enum MATERIAL id, char *name, float weightrating); objectclass_t *addoc(enum OBCLASS id, char *name, char *desc, char glyph); object_t *addob(obpile_t *where, char *name); object_t *addobject(obpile_t *where, char *name, int canstack); obpile_t *addobpile(lifeform_t *owner, cell_t *where); objecttype_t *addot(int id, char *name, char *description, int material, float weight, int obclassid); +void adjustdammaterial(unsigned int *dam, enum DAMTYPE damtype, enum MATERIAL mat); +void adjustdamob(object_t *o, unsigned int *dam, enum DAMTYPE damtype); +//void adjustprice(objecttype_t *ot, float *price ); +void appendinscription(object_t *o, char *text); +int blessob(object_t *o); +void brightflash(cell_t *centre, int range, lifeform_t *immunelf); object_t *canstackob(obpile_t *op, object_t *match); object_t *canstacknewot(obpile_t *op, objecttype_t *match); +int changemat(object_t *o, enum MATERIAL mat); void copyobprops(object_t *dst, object_t *src); int countnames(char **list); int countobs(obpile_t *op); +int curseob(object_t *o); +void damageallobs(object_t *exception, obpile_t *op, int howmuch, int damtype); +void explodeob(object_t *o, flag_t *f, int bigness); +void extinguish(object_t *o); material_t *findmaterial(int id); objectclass_t *findoc(int id); object_t *findobl(obpile_t *op, char let); // find object by letter objecttype_t *findot(enum OBTYPE id); objecttype_t *findotn(char *name); // find objecttype by name void genhiddennames(void); +int getcharges(object_t *o); +int geteffecttime(int min, int max, enum BLESSTYPE isblessed); +int getmissileaccuracy(lifeform_t *thrower, cell_t *where, object_t *missile, object_t *firearm, enum ATTRIB whichatt); +int getobaccuracy(object_t *wep); +int getobvalue(object_t *o); +//int getobtypevalue(objecttype_t *ot); +char *getaccuracyname(int accpct); +object_t *getammo(lifeform_t *lf); +object_t *getrandomammo(lifeform_t *lf); char *getdamname(enum DAMTYPE damtype); +char *getdamnamenoun(enum DAMTYPE damtype); +char *getfillingname(int nutrition); +int getfirearmrange(object_t *o); +int getfirearmspeed(object_t *o); char getglyph(object_t *o); char *genhiddenname(enum OBCLASS id); char *gethiddenname(object_t *o); int getobattackspeed(object_t *o); int getletindex(char let); +int getmaterialvalue(enum MATERIAL mat ); +int getmaxthrowrange(lifeform_t *lf, object_t *o); char getnextletter(obpile_t *op, char *wantletter); +int getnumshards(object_t *o); +int getnutritionbase(object_t *o); +int getnutrition(object_t *o); +char *getobdesc(object_t *o, char *buf); +cell_t *getoblocation(object_t *o); char *getobname(object_t *o, char *buf, int count); +char *real_getobname(object_t *o, char *buf, int count, int wantcondition, int adjustforblind, int wantblesscurse); +float getobpileweight(obpile_t *op); +char *getobconditionname(object_t *o, char *buf); +char *getobhurtname(object_t *o, enum DAMTYPE damtype); +float getobweight(object_t *o); +float getobunitweight(object_t *o); +objecttype_t *getoppositestairs(objecttype_t *ot); +char *real_getrandomob(map_t *map, char *buf, int cond, int cval, int forcedepth); char *getrandomob(map_t *map, char *buf); char *getrandomobwithdt(map_t *map, enum DAMTYPE damtype, char *buf); +char *getrandomobwithclass(map_t *map, enum OBCLASS cid, char *buf); +char *getschoolname(enum SPELLSCHOOL sch); +int getshatterdam(object_t *o); +int getthrowdam(object_t *o); +int hasedibleob(obpile_t *op); object_t *hasknownob(obpile_t *op, enum OBTYPE oid); object_t *hasob(obpile_t *op, enum OBTYPE oid); +object_t *hasobofclass(obpile_t *op, enum OBCLASS cid); +object_t *hasobmulti(obpile_t *op, enum OBTYPE *oid, int noids); +object_t *hasobwithflag(obpile_t *op, enum FLAG flagid); +object_t *hasobwithflagval(obpile_t *op, enum FLAG flagid, int val0, int val1, int val2, char *text); object_t *hasobid(obpile_t *op, int id); +void identify(object_t *o); void initobjects(void); +flag_t *isarmour(object_t *o); +int isactivated(object_t *o); +int isammofor(object_t *ammo, object_t *gun); +int isbetterarmourthan(object_t *a, object_t *b); +int isbetterwepthan(object_t *a, object_t *b); +int isblessed(object_t *o); +int isblessknown(object_t *o); +int iscorpse(object_t *o); +int iscursed(object_t *o); int isdrinkable(object_t *o); +int isedible(object_t *o); +flag_t *isequipped(object_t *o); +int isequippedon(object_t *o, enum BODYPART bp); +int isfirearm(object_t *o); +int isflammable(object_t *o); int isknown(object_t *o); +int isidentified(object_t *o); +int ismetal(enum MATERIAL mat); +int ismissile(object_t *o); +int isoperable(object_t *o); int isplainob(object_t *o); +int ispourable(object_t *o); +int ispushable(object_t *o); int isreadable(object_t *o); +int isrotting(object_t *o); +int isweapon(object_t *o); +int iswearable(object_t *o); void killmaterial(material_t *m); void killob(object_t *o); +void killobpile(obpile_t *o); void killoc(objectclass_t *oc); void killot(objecttype_t *ot); +lifeform_t *makeanimated(lifeform_t *lf, object_t *o, int level); void makeknown(enum OBTYPE otid); object_t *moveob(object_t *src, obpile_t *dst, int howmany); +object_t *newobeffects(object_t *o); +void obaction(object_t *o, char *text); object_t *obexists(enum OBTYPE obid); +void obdie(object_t *o); int obfits(object_t *o, obpile_t *op); +enum DAMTYPE oblastdamtype(object_t *o); +flag_t *obproduceslight(object_t *o); int obpropsmatch(object_t *a, object_t *b); +int obotpropsmatch(object_t *a, objecttype_t *b); +int operate(lifeform_t *lf, object_t *o); int pilehasletter(obpile_t *op, char let); +void potioneffects(lifeform_t *lf, enum OBTYPE oid, enum BLESSTYPE isblessed, int *seen); +int pour(lifeform_t *lf, object_t *o); void quaff(lifeform_t *lf, object_t *o); -void read(lifeform_t *lf, object_t *o); +void readsomething(lifeform_t *lf, object_t *o); +void removedeadobs(obpile_t *op); int removeob(object_t *o, int howmany); object_t *relinkob(object_t *src, obpile_t *dst); -void throwat(lifeform_t *thrower, object_t *o, cell_t *where); +void setblessed(object_t *o, enum BLESSTYPE wantbless); +void setinscription(object_t *o, char *text); +object_t *splitob(object_t *o); +int takedamage(object_t *o, unsigned int howmuch, int damtype); +int fireat(lifeform_t *thrower, object_t *o, cell_t *where, int speed, object_t *firearm); +void timeeffectsob(object_t *o); +void turnoff(lifeform_t *lf, object_t *o); +void turnon(lifeform_t *lf, object_t *o); +int usecharge(object_t *o); +int validateobs(void); int willshatter(enum MATERIAL mat); #endif diff --git a/save.c b/save.c index c255613..621a30f 100644 --- a/save.c +++ b/save.c @@ -3,7 +3,10 @@ #include #include #include +#include #include "defs.h" +#include "flag.h" +#include "io.h" #include "lf.h" #include "map.h" #include "move.h" @@ -11,6 +14,8 @@ #include "objects.h" #include "save.h" +extern long curtime; + extern lifeform_t *player; extern map_t *firstmap; extern knowledge_t *knowledge; @@ -20,8 +25,6 @@ int loading = B_FALSE; int loadall(void) { DIR *dir; struct dirent *ent; - char *filename; - FILE *f; loading = B_TRUE; @@ -52,6 +55,42 @@ int loadall(void) { return B_FALSE; } +int loadflagpile(FILE *f, flagpile_t *fp) { + flag_t tempflag; + flag_t *fl; + char buf[BUFLEN]; + int rv; + int db = B_TRUE; + + rv = fscanf(f, "%d,%d,%d,%d,%d,%d,%d,%ld\n", + &tempflag.id, &tempflag.nvals, &tempflag.val[0], &tempflag.val[1], &tempflag.val[2],&tempflag.lifetime, &tempflag.known,&tempflag.obfrom); + + while (tempflag.id != -1) { + dblog("got flag id=%d\n",tempflag.id); + // get flag text + fgets(buf, BUFLEN, f); + buf[strlen(buf)-1] = '\0'; // strip newline + + fl = addflag_real(fp, tempflag.id, + tempflag.val[0], + tempflag.val[1], + tempflag.val[2], strcmp(buf, "^^^") ? buf : NULL, tempflag.lifetime, tempflag.known); + + fl->obfrom = tempflag.obfrom; + + if (db) { + dblog("--> added flag id=%d. v0=%d, v1=%d, v2=%d, text=%s, lifetime=%d, known=%d, obfrom=%ld\n",fl->id, + fl->val[0], fl->val[1], fl->val[2], fl->text ? fl->text : "(null)", fl->lifetime, fl->known,fl->obfrom); + } + + // load next one + rv = fscanf(f, "%d,%d,%d,%d,%d,%d,%d,%ld\n", + &tempflag.id, &tempflag.nvals, &tempflag.val[0], &tempflag.val[1], &tempflag.val[2],&tempflag.lifetime, &tempflag.known,&tempflag.obfrom); + //dblog("fscanf returned %d\n",rv); + } + return B_FALSE; +} + int loadknowledge(FILE *f) { int db = B_FALSE; char buf[BUFLEN]; @@ -74,6 +113,16 @@ int loadknowledge(FILE *f) { return B_FALSE; } +int loadvars(FILE *f) { + int db = B_FALSE; + if (db) dblog("--> Loading knowledge...\n"); + fscanf(f, "startvars\n"); + fscanf(f, "curtime:%ld\n",&curtime); + fscanf(f, "endvars\n"); + + return B_FALSE; +} + // load and allocate one lifeform from given file lifeform_t *loadlf(FILE *f, cell_t *where) { lifeform_t *l; @@ -117,9 +166,15 @@ lifeform_t *loadlf(FILE *f, cell_t *where) { l->y = y; // load rest of this lf + fscanf(f, "str: %d/%d\n",&l->att[A_STR],&l->baseatt[A_STR]); + fscanf(f, "dex: %d/%d\n",&l->att[A_DEX],&l->baseatt[A_DEX]); + fscanf(f, "int: %d/%d\n",&l->att[A_IQ],&l->baseatt[A_IQ]); + fscanf(f, "xp: %ld\n",&l->xp); fscanf(f, "contr: %d\n",&l->controller); fscanf(f, "hp: %d/%d\n",&l->hp, &l->maxhp); + fscanf(f, "mp: %d/%d\n",&l->mp, &l->maxmp); fscanf(f, "alive: %d\n",&l->alive); + fscanf(f, "lastdamtype: %d\n",(int *)&l->lastdamtype); fgets(buf, BUFLEN, f); // lastdam buf[strlen(buf)-1] = '\0'; // strip newline @@ -128,9 +183,15 @@ lifeform_t *loadlf(FILE *f, cell_t *where) { fscanf(f, "timespent: %d\n",&l->timespent); fscanf(f, "sorted: %d\n",&l->sorted); + fscanf(f, "polyrevert: %d\n",&l->polyrevert); fscanf(f, "forgettimer: %f\n",&l->forgettimer); - if (db) dblog("--> Got hp=%d/%d. timespend=%d. sorted=%d. Now loading ob list.",l->hp,l->maxhp,l->timespent,l->sorted); + if (db) dblog("--> Got hp=%d/%d. timespend=%d. sorted=%d. Now loading flags.",l->hp,l->maxhp,l->timespent,l->sorted); + + // lf flags + loadflagpile(f, l->flags); + + if (db) dblog("--> now loading objects"); // load object list obcount = 0; @@ -165,6 +226,9 @@ lifeform_t *loadlf(FILE *f, cell_t *where) { if (l->controller == C_PLAYER) { player = l; } + + sortlf(l->cell->map, l); + return l; } @@ -173,13 +237,12 @@ map_t *loadmap(char *basefile) { FILE *f; char filename[BUFLEN]; char buf[BUFLEN]; - char buf2[BUFLEN]; int obcount; int i; int x,y; int db = B_TRUE; lifeform_t *l; - object_t *o,*nexto; + object_t *o; map_t *m; cell_t *dummycell; @@ -202,13 +265,13 @@ map_t *loadmap(char *basefile) { // load map info if (db) dblog("--> Loading map info...\n"); fscanf(f, "id:%d\n",&m->id); // map id + fscanf(f, "depth:%d\n",&m->depth); // map depth fgets(buf, BUFLEN, f); // map name buf[strlen(buf)-1] = '\0'; // strip newline m->name = strdup(buf + 5); // after 'name:' fscanf(f, "habitat:%d\n",(int *)&m->habitat); // habitat fscanf(f, "seed:%d\n",&m->seed); // seed fscanf(f, "dims:%d,%d\n",&m->w, &m->h); // map dimensons - fscanf(f, "nextlfid:%ld\n",&m->nextlfid); fscanf(f, "nextmaps:\n"); for (i = 0; i < MAXDIR_ORTH; i++) { fscanf(f, "%d\n",&m->nextmap[i]); // map dimensons @@ -253,8 +316,8 @@ map_t *loadmap(char *basefile) { */ // cell info - fscanf(f, "%d,%d,%d,%d\n", - &c->roomid, &celltypeid, &c->known, &c->visited); + fscanf(f, "%d,%d,%d,%d,%d\n", + &c->roomid, &celltypeid, &c->known, &c->visited, &c->lit); ct = findcelltype(celltypeid); @@ -286,7 +349,6 @@ map_t *loadmap(char *basefile) { // create all objects in a dummy cell for (i = 0; i < obcount; i++) { - int n; long thisid; if (db) dblog("-----> loading into dummycell: mapob %d/%d...\n",i+1,obcount); if (loadob(f, dummycell->obpile, &thisid)) { @@ -398,9 +460,6 @@ int loadob(FILE *f, obpile_t *op, long *id) { long obid; int otid,matid; char buf[BUFLEN]; - int flagid; - flag_t tempflag; - int rv; int db = B_TRUE; fscanf(f, "id:%ld\n",&obid); @@ -413,7 +472,7 @@ int loadob(FILE *f, obpile_t *op, long *id) { ot = findot(otid); if (!ot) { - dblog("ERROR loading objects - can't find obtype id %ld\n",obid); + dblog("ERROR loading objects - can't find obtype id %d (obj id %ld)\n",otid,obid); return B_TRUE; } // create the object @@ -442,29 +501,20 @@ int loadob(FILE *f, obpile_t *op, long *id) { fscanf(f, "bless:%d\n",&o->blessed); fscanf(f, "blessknown:%d\n",&o->blessknown); fscanf(f, "amt:%d\n",&o->amt); + fscanf(f, "birthtime:%ld\n",&o->birthtime); + + // now remove ALL obejct flags (which were inherited + // from the obtype during addobject() ). these will be + // loaded in instead. + + while (o->flags->first) { + killflag(o->flags->first); + } fscanf(f, "flags:\n"); dblog("About to start loading object flags..."); - rv = fscanf(f, "%d,%d,%d,%d,%d\n", - &tempflag.id, &tempflag.nvals, &tempflag.val[0], &tempflag.val[1], &tempflag.val[2]); - - while (tempflag.id != -1) { - dblog("got flag id=%d\n",tempflag.id); - // get flag text - fgets(buf, BUFLEN, f); - buf[strlen(buf)-1] = '\0'; // strip newline - - - addflag(o->flags, tempflag.id, - tempflag.val[0], - tempflag.val[1], - tempflag.val[2], strcmp(buf, "^^^") ? buf : NULL); - // load next one - rv = fscanf(f, "%d,%d,%d,%d,%d\n", - &tempflag.id, &tempflag.nvals, &tempflag.val[0], &tempflag.val[1], &tempflag.val[2]); - //dblog("fscanf returned %d\n",rv); - } + loadflagpile(f, o->flags); fscanf(f, "endob\n"); return B_FALSE; } @@ -504,6 +554,10 @@ int loadsavegame(void) { printf("Error loading knowledge from file '%s'",ent->d_name); exit(1); } + if (loadvars(f)) { + printf("Error loading game variables from file '%s'",ent->d_name); + exit(1); + } fclose(f); // successful load - kill the savegame now @@ -512,14 +566,38 @@ int loadsavegame(void) { } } closedir(dir); + + return B_FALSE; +} + +int savevars(FILE *f) { + int db = B_FALSE; + if (db) dblog("--> Saving knowledge...\n"); + fprintf(f, "startvars\n"); + fprintf(f, "curtime:%ld\n",curtime); + fprintf(f, "endvars\n"); + return B_FALSE; +} + + +int saveflagpile(FILE *f, flagpile_t *fp) { + flag_t *fl; + fprintf(f, "flags:\n"); + for (fl = fp->first ; fl ; fl = fl->next) { + fprintf(f, "%d,%d,%d,%d,%d,%d,%d,%ld\n", + fl->id, fl->nvals, fl->val[0], fl->val[1], fl->val[2],fl->lifetime,fl->known,fl->obfrom); + if (!fl->text || !strcmp(fl->text, "")) { + fprintf(f, "%s\n","^^^"); + } else { + fprintf(f, "%s\n",fl->text); + } + } + fprintf(f, "-1,-1,-1,-1,-1,-1,-1,-1\n"); return B_FALSE; } int saveknowledge(FILE *f) { int db = B_FALSE; - char buf[BUFLEN]; - int otid,known; - char hiddenname[BUFLEN]; knowledge_t *k; if (db) dblog("--> Saving knowledge...\n"); fprintf(f, "startknowledge\n"); @@ -542,14 +620,25 @@ int savelf(FILE *f, lifeform_t *l) { fprintf(f, "map: %d\n",l->cell->map->id); fprintf(f, "pos: %d,%d\n",l->cell->x, l->cell->y); fprintf(f, "level: %d\n",l->level); - // liefform will be cfeated after loading the above. + // liefform will be created after loading the above. + fprintf(f, "str: %d/%d\n",l->att[A_STR],l->baseatt[A_STR]); + fprintf(f, "dex: %d/%d\n",l->att[A_DEX],l->baseatt[A_DEX]); + fprintf(f, "int: %d/%d\n",l->att[A_IQ],l->baseatt[A_IQ]); + fprintf(f, "xp: %ld\n",l->xp); fprintf(f, "contr: %d\n",l->controller); fprintf(f, "hp: %d/%d\n",l->hp, l->maxhp); + fprintf(f, "mp: %d/%d\n",l->mp, l->maxmp); fprintf(f, "alive: %d\n",l->alive); + fprintf(f, "lastdamtype: %d\n",l->lastdamtype); fprintf(f, "lastdam: %s\n",l->lastdam); fprintf(f, "timespent: %d\n",l->timespent); fprintf(f, "sorted: %d\n",l->sorted); + fprintf(f, "polyrevert: %d\n",l->polyrevert); fprintf(f, "forgettimer: %f\n",l->forgettimer); + + // lf flags + saveflagpile(f, l->flags); + // lifeform objects obcount = 0; for (o = l->pack->first ; o ; o = o->next) { @@ -568,6 +657,33 @@ int savelf(FILE *f, lifeform_t *l) { return B_FALSE; } +int savegame(void) { + map_t *m; + FILE *f; + char buf[BUFLEN]; + int rv; + for (m = firstmap; m ; m = m->next) { + // save world + rv = savemap(m); + if (rv) { + msg("Could not save map '%s'",m->name); + return B_TRUE; + } + // save player + their objects + sprintf(buf, "%s/game.sav",SAVEDIR); + f = fopen(buf, "wt"); + if (!f) { + msg("Could not open save file!"); + return B_TRUE; + } + savelf(f, player); + saveknowledge(f); + savevars(f); + fclose(f); + } + + return B_FALSE; +} int savemap(map_t *m) { FILE *f; @@ -584,11 +700,11 @@ int savemap(map_t *m) { // save map info fprintf(f, "id:%d\n",m->id); // map id + fprintf(f, "depth:%d\n",m->depth); // map depth fprintf(f, "name:%s\n",m->name); // map name fprintf(f, "habitat:%d\n",m->habitat); // habitat fprintf(f, "seed:%d\n",m->seed); // seed fprintf(f, "dims:%d,%d\n",m->w, m->h); // map dimensons - fprintf(f, "nextlfid:%ld\n",m->nextlfid); fprintf(f, "nextmaps:\n"); for (i = 0; i < MAXDIR_ORTH; i++) { fprintf(f, "%d\n",m->nextmap[i] ); // map dimensons @@ -610,8 +726,8 @@ int savemap(map_t *m) { cell_t *c; c = getcellat(m, x, y); // cell info - fprintf(f, "%d,%d,%d,%d\n", - c->roomid, c->type->id, c->known, c->visited); + fprintf(f, "%d,%d,%d,%d,%d\n", + c->roomid, c->type->id, c->known, c->visited,c->lit); // cell objects for (o = c->obpile->first ; o ; o = o->next) { fprintf(f, "ob:%ld\n",o->id); @@ -641,7 +757,6 @@ int savemap(map_t *m) { int saveob(FILE *f, object_t *o) { - flag_t *fl; fprintf(f, "id:%ld\n",o->id); fprintf(f, "type:%d\n",o->type->id); fprintf(f, "material:%d\n",o->material->id); @@ -651,17 +766,8 @@ int saveob(FILE *f, object_t *o) { fprintf(f, "bless:%d\n",o->blessed); fprintf(f, "blessknown:%d\n",o->blessknown); fprintf(f, "amt:%d\n",o->amt); - fprintf(f, "flags:\n"); - for (fl = o->flags->first ; fl ; fl = fl->next) { - fprintf(f, "%d,%d,%d,%d,%d\n", - fl->id, fl->nvals, fl->val[0], fl->val[1], fl->val[2]); - if (!fl->text || !strcmp(fl->text, "")) { - fprintf(f, "%s\n","^^^"); - } else { - fprintf(f, "%s\n",fl->text); - } - } - fprintf(f, "-1,-1,-1,-1,-1\n"); + fprintf(f, "birthtime:%ld\n",o->birthtime); + saveflagpile(f, o->flags); fprintf(f, "endob\n"); return B_FALSE; } diff --git a/save.h b/save.h index d8f16c7..aeb6e9c 100644 --- a/save.h +++ b/save.h @@ -1,12 +1,15 @@ #include "defs.h" int loadall(void); +int loadflagpile(FILE *f, flagpile_t *fp); int loadknowledge(FILE *f); lifeform_t *loadlf(FILE *f, cell_t *where); map_t *loadmap(char *basefile); int loadob(FILE *f, obpile_t *op, long *id); int loadsavegame(void); +int saveflagpile(FILE *f, flagpile_t *fp); int saveknowledge(FILE *f); int savelf(FILE *f, lifeform_t *l); +int savegame(void); int savemap(map_t *m); int saveob(FILE *f, object_t *o); diff --git a/spell.c b/spell.c index 4307d02..64dc42b 100644 --- a/spell.c +++ b/spell.c @@ -5,34 +5,1028 @@ #include #include "defs.h" #include "flag.h" +#include "io.h" +#include "lf.h" #include "map.h" +#include "move.h" +#include "nexus.h" #include "objects.h" +#include "spell.h" #include "text.h" extern lifeform_t *player; -void dospelleffects(lifeform_t *caster, enum OBTYPE spellid, lifeform_t *target) { +extern WINDOW *msgwin; + +int abilityeffects(lifeform_t *user, enum OBTYPE abilid) { + char username[BUFLEN]; char buf[BUFLEN]; - if (spellid == OT_S_RNDTELEPORT) { + getlfname(user, username); + + if (abilid == OT_A_JUMP) { + lifeform_t *victim = NULL; + char victimname[BUFLEN]; + int dodged = B_FALSE; + cell_t *where = NULL, *origcell; + sprintf(buf, "Jump where (max distance 2)?"); + while (!where) { + // ask where + where = askcoords(buf, TT_NONE); + if (!where) { + return B_TRUE; + } else if (getcelldist(user->cell, where) > 2) { + where = NULL; + sprintf(buf, "You can't jump that far! Jump where (max distance 2)?"); + } else if (!haslos(user, where)) { + where = NULL; + sprintf(buf, "You can't see where to land! Jump where (max distance 2)?"); + } + } + + // we now have a cell - go there! + taketime(user, getmovespeed(user)); + origcell = user->cell; + + // did you land on anyone? + victim = haslf(where); + if (victim) { + cell_t *c; + int acc; + + getlfname(victim,victimname); + + // TODO: if jumper is smaller, move them out of the way instead + // move them out of the way + c = getrandomadjcell(victim->cell, WE_EMPTY); + // nowhere to move? move to player's cell! + if (!c) { + c = user->cell; + } + movelf(victim, c); + + // see if you actually landed on them or they dodge... + acc = 100 - getevasion(victim); + if (rnd(1,100) > acc) { + // dodged! + dodged = B_TRUE; + } + } + movelf(user, where); + + // announce + if (isplayer(user)) { + if (victim && !dodged) { + msg("You leap high in the air and land on %s!",victimname); + } else { + msg("You leap high in the air!"); + } + } else if (haslos(player, origcell)) { + if (haslos(player, user->cell)) { + if (victim && !dodged) { + msg("%s leaps high in the air and lands on %s!", username,victimname); + } else { + msg("%s leaps high in the air and lands nearby!", username); + } + } else { + msg("%s leaps high in the air!", username); + } + } else if (haslos(player, user->cell)) { + if (victim && !dodged) { + msg("%s drops from the air and lands nearby!", username); + } else { + msg("%s drops from the air and lands on %s!", username,victimname); + } + } + + if (victim) { + if (dodged) { + if (haslos(player, user->cell)) { + msg("%s dodges out of the way!", victimname); + } + } else { + int dam; + // they take damage based on the jumper's weight + // 1hp per 15 kg + // TODO: make divisor be dependant on difference in lf size + dam = getlfweight(user, B_WITHOBS) / 15; + if (dam > 0) { + if (lfhasflag(user, F_EXTRAINFO) || lfhasflag(user, F_OMNIPOTENT)) { + msg("[%s takes %d damage]",victimname,dam); + } + sprintf(buf, "a falling %s", user->race->name); + losehp(victim, dam, DT_BASH, user, buf); + } + } + } + + } + return B_FALSE; +} + + +// returns TRUE on error +int dospelleffects(lifeform_t *caster, enum OBTYPE spellid, lifeform_t *target, object_t *targob, cell_t *targcell, int blessed, int *seenbyplayer) { + char buf[BUFLEN]; + char castername[BUFLEN]; + int rv = B_FALSE; + + getlfname(caster, castername); + + if (seenbyplayer) *seenbyplayer = B_FALSE; + + if (spellid == OT_S_ABSORBMETAL) { + int i; + float totalmass = 0; + object_t *o; + int howmuch; + // works on all metal in sight + if (isplayer(caster)) { + if (seenbyplayer) *seenbyplayer = B_FALSE; + msg("You draw power from nearby metal!"); + } else if (haslos(player, caster->cell)) { + if (seenbyplayer) *seenbyplayer = B_FALSE; + msg("%s draws power from nearby metal!",castername); + } + totalmass = 0; + + // destroy WORN metal objects by the caster (not CARRIED ones) + if (!hasmr(caster)) { + for (o = caster->pack->first ; o ; o = o->next) { + if (isequipped(o) && ismetal(o->material->id)) { + takedamage(o, 9999, DT_DIRECT); + if (hasflag(o->flags, F_DEAD)) { + totalmass += getobweight(o); + } + } + } + // destroy objects right away + removedeadobs(caster->pack); + } + + for (i = 0; i < caster->nlos; i++) { + targcell = caster->los[i]; + for (o = targcell->obpile->first ; o ; o = o->next) { + // destroy metal items on the ground + if (ismetal(o->material->id)) { + takedamage(o, 9999, DT_DIRECT); + if (hasflag(o->flags, F_DEAD)) { + totalmass += getobweight(o); + } + } + } + // destroy objects right away + removedeadobs(targcell->obpile); + if (targcell->lf && !hasmr(targcell->lf)) { + // destroy only WORN metal objects, not CARRIED ones + for (o = targcell->lf->pack->first ; o ; o = o->next) { + if (isequipped(o) && ismetal(o->material->id)) { + takedamage(o, 9999, DT_DIRECT); + if (hasflag(o->flags, F_DEAD)) { + totalmass += getobweight(o); + } + } + } + // destroy objects right away + removedeadobs(targcell->lf->pack); + } + } + + if (totalmass > 0) { + if (hasmr(caster)) { + if (isplayer(caster)) { + msg("You feel a surge of magic, but it quickly dampens."); + } + } else { + // heal 1 mp per kilo + howmuch = floor(totalmass); + gainmp(caster, howmuch); + } + } else { + fizzle(caster); + } + } else if (spellid == OT_S_ANIMATEMETAL) { + object_t *o; + o = getweapon(caster); + if (o) { + char obname[BUFLEN]; + lifeform_t *newlf; + + getobname(o, obname, 1); + + if (!ismetal(o->material->id)) { + if (isplayer(caster)) { + msg("Your %s is not metal, therefore unaffected.", noprefix(obname)); + } else { + fizzle(caster); + } + return B_FALSE; + } else if (o->amt != 1) { + if (isplayer(caster)) { + msg("Your %s wobble a little.", obname); + } else { + fizzle(caster); + } + return B_FALSE; + } + + newlf = makeanimated(caster, o, caster->level); + if (newlf) { + if (isplayer(caster)) { + msg("Your %s leaps into the air!", noprefix(obname)); + if (seenbyplayer) *seenbyplayer = B_TRUE; + } else if (haslos(player, caster->cell)) { + msg("%s%s %s leaps into the air!",castername, getpossessive(castername), + noprefix(obname)); + if (seenbyplayer) *seenbyplayer = B_TRUE; + } + } else { + fizzle(caster); + } + } else { + fizzle(caster); + } + } else if (spellid == OT_S_CONECOLD) { + char lfname[BUFLEN]; + int acc; + if (!validatespellcell(caster, &targcell, TT_MONSTER, B_TRUE)) return B_TRUE; + // animation + anim(caster->cell, targcell, '}'); + if (isplayer(caster) || haslos(player, caster->cell)) { + msg("%s shoot%s a blast of coldness.",castername,isplayer(caster) ? "" : "s"); + if (seenbyplayer) *seenbyplayer = B_TRUE; + } + + target = haslf(targcell); + if (target) { + getlfname(target, lfname); + // target takes magical damage + // check if it hits + acc = getmissileaccuracy(caster, target->cell, NULL, NULL, A_IQ); + if (rnd(1,100) <= acc) { + // hit + if (haslos(caster, target->cell)) { + msg("A blast of coldness ray hits %s.",lfname); + } + losehp(target, rnd(2,6), DT_COLD, caster, "a blast of coldness"); + } else { + // miss + if (haslos(caster, target->cell)) { + msg("A blast of coldness misses %s.",lfname); + } + } + } + } else if (spellid == OT_S_CREATEMONSTER) { + cell_t *where; + lifeform_t *newlf; + race_t *r = NULL; + // create a monster nearby + + if (blessed) { + // ask what kind of monster + askstring("Create what kind of monster", '?', buf, BUFLEN, NULL); + r = findracebyname(buf); + if (!r) { + if (caster->controller == C_PLAYER) { + nothinghappens(); + } + return B_TRUE; + } + } + + // get random adjacent cell + where = getrandomadjcell(caster->cell, WE_EMPTY); + if (!where) { + if (caster->controller == C_PLAYER) { + nothinghappens(); + } + return B_TRUE; + } + // create random monster in cell + if (blessed) { + //newlf = addlf(where, r->id, getrandommonlevel(where->map->depth)); + newlf = addmonster(where, r->id); + } else { + newlf = addmonster(where, R_RANDOM); + } + if (newlf) { + if (haslos(player, where)) { + char *newbuf; + getlfname(newlf, buf); + newbuf = strdup(buf); + // newbuf will be "the xxx" + if (isvowel(newbuf[4])) { + newbuf = strrep(newbuf, "the ", "an ", NULL); + } else { + newbuf = strrep(newbuf, "the ", "a ", NULL); + } + capitalise(newbuf); + msg("%s appears!", newbuf); + free(newbuf); + if (seenbyplayer) *seenbyplayer = B_TRUE; + } + rv = B_FALSE; + } else { + // didn't work for some reason + if (caster->controller == C_PLAYER) { + nothinghappens(); + } + return B_TRUE; + } + } else if (spellid == OT_S_DETECTAURA) { + if (isplayer(caster)) { + object_t *o; + char obname[BUFLEN]; + int somethinghappened = B_FALSE; + for (o = caster->pack->first ; o ; o = o->next) { + if (o->blessed == B_BLESSED) { + getobname(o, obname, o->amt); + msg("Your %s flash%s white!", noprefix(obname), (o->amt == 1) ? "es" : ""); + somethinghappened = B_TRUE; + } else if (o->blessed == B_CURSED) { + getobname(o, obname, o->amt); + msg("Your %s flash%s black!", noprefix(obname), (o->amt == 1) ? "es" : ""); + somethinghappened = B_TRUE; + } + } + + // now check objects on the ground... + for (o = caster->cell->obpile->first ; o ; o = o->next) { + if (o->blessed == B_BLESSED) { + getobname(o, obname, o->amt); + msg("%s flash%s white!", obname, (o->amt == 1) ? "es" : ""); + somethinghappened = B_TRUE; + } else if (o->blessed == B_CURSED) { + getobname(o, obname, o->amt); + msg("%s flash%s black!", obname, (o->amt == 1) ? "es" : ""); + somethinghappened = B_TRUE; + } + } + if (somethinghappened) { + if (seenbyplayer) *seenbyplayer = B_TRUE; + // we know that everything else is uncursed + for (o = caster->pack->first ; o ; o = o->next) { + o->blessknown = B_TRUE; + } + for (o = caster->cell->obpile->first ; o ; o = o->next) { + o->blessknown = B_TRUE; + } + } else { + nothinghappens(); + } + } else { + // monsters can't use this + } + } else if (spellid == OT_S_DETECTLIFE) { + target = caster; + if (isplayer(caster)) { + int howlong = 15; + switch (blessed) { + case B_BLESSED: + howlong = 20; break; + case B_UNCURSED: + howlong = rnd(10,20); break; + case B_CURSED: + howlong = 2; break; + } + addtempflag(target->flags, F_DETECTLIFE, 10, NA, NA, NULL, howlong); + } else { + // monsters can't use this + } + } else if (spellid == OT_S_DETECTMETAL) { + target = caster; + if (isplayer(caster)) { + int howlong = 15; + switch (blessed) { + case B_BLESSED: + howlong = 20; break; + case B_UNCURSED: + howlong = rnd(10,20); break; + case B_CURSED: + howlong = 2; break; + } + addtempflag(target->flags, F_DETECTMETAL, 10, NA, NA, NULL, howlong); + } else { + // monsters can't use this + } + } else if (spellid == OT_S_DETONATE) { + float totalmass = 0; + object_t *o, *nexto; + int i; + + if (!validatespellcell(caster, &targcell, TT_OBJECT, B_FALSE)) return B_TRUE; + + // how much metal is there? + for (i = 0; i < caster->nlos; i++) { + cell_t *c; + c = caster->los[i]; + for (o = c->obpile->first ; o ; o = nexto) { + nexto = o->next; + // destroy metal items on the ground + if (ismetal(o->material->id)) { + totalmass += getobweight(o); + removeob(o, o->amt); + } + } + } + + // explosion, based on size... + if (totalmass > 0) { + // announce + if (totalmass < 10) { + // little one + explodecells(targcell, totalmass*5, B_FALSE, NULL, 0, B_TRUE); + } else { + explodecells(targcell, totalmass*5, B_TRUE, NULL, 1, B_TRUE); + } + } else { + fizzle(caster); + } + } else if (spellid == OT_S_DISPERSAL) { cell_t *c = NULL; - while (!c || c->type->solid) { - c = getrandomcell(target->cell->map); + object_t *o, *nexto; + + if (!target) { + if (isplayer(caster)) { + sprintf(buf, "Where will you target your dispersal?"); + targcell = askcoords(buf, TT_MONSTER); + // TODO: make this work on objects too, not just lfs! + if (!targcell || (!targcell->lf && (countobs(targcell->obpile) <= 0)) ) { + fizzle(caster); + return B_TRUE; + } + } else { + fizzle(caster); + return B_TRUE; + } } - if ((target->controller != C_PLAYER) && haslos(player, target->cell)) { - getlfname(target, buf); - capitalise(buf); - msg("%s disappears in a puff of smoke!", buf); + + if (isplayer(targcell->lf) || isplayer(caster) || haslos(player, targcell)) { + if (seenbyplayer) *seenbyplayer = B_TRUE; } - // TODO: add smoke - movelf(target, c); - // TODO: add more smoke - if (target->controller == C_PLAYER) { - msg("Suddenly, your surroundings appear different!"); - } else if (haslos(player, target->cell)) { - getlfname(target, buf); - capitalise(buf); - msg("%s appears in a puff of smoke!", buf); + + if (targcell->lf) { + if (hasmr(targcell->lf)) { + if (isplayer(targcell->lf)) { + msg("You flicker."); + if (seenbyplayer) *seenbyplayer = B_TRUE; + } else if (haslos(player, targcell)) { + getlfname(targcell->lf, buf); + msg("%s flickers.",buf); + if (seenbyplayer) *seenbyplayer = B_TRUE; + } + } else { + c = NULL; + while (!c || c->type->solid || haslf(c)) { + c = getrandomcell(targcell->map); + } + + teleportto(target, c); + } } + + for (o = targcell->obpile->first ; o ; o = nexto) { + nexto = o->next; + + getobname(o, buf, o->amt); + + c = NULL; + while (!c || c->type->solid || haslf(c)) { + c = getrandomcell(targcell->map); + } + + if (haslos(player, targcell)) { + msg("%s disappear%s!", buf, (o->amt == 1) ? "s" : ""); + } + moveob(o, c->obpile, o->amt); + if (haslos(player, c)) { + msg("%s appear%s nearby!", buf, (o->amt == 1) ? "s" : ""); + } + } + rv = B_FALSE; + } else if (spellid == OT_S_ENERGYBLAST) { + int range = 3; + int x,y; + // announce + if (isplayer(caster) || haslos(player, caster->cell)) { + msg("%s emit%s a radial blast of energy!",castername,isplayer(caster) ? "" : "s"); + if (seenbyplayer) *seenbyplayer = B_TRUE; + } + + animradial(caster->cell, range, '}'); + + for (y = caster->cell->y - range ; y <= caster->cell->y + range; y++) { + for (x = caster->cell->x - range ; x <= caster->cell->x + range; x++) { + targcell = getcellat(caster->cell->map, x,y); + if (targcell && (getcelldist(caster->cell, targcell) <= range)) { + if (targcell->lf && (targcell->lf != caster) && haslof(caster, targcell)) { + char lfname[BUFLEN]; + // automatic hit + getlfname(targcell->lf, lfname); + if (haslos(caster, targcell)) { + msg("A blast of energy hits %s.",lfname); + } + losehp(targcell->lf, rnd(2,6), DT_MAGIC, caster, "an energy blast"); + } + } + } + } + } else if (spellid == OT_S_FLASH) { + if (isplayer(caster) || haslos(player, caster->cell)) { + if (seenbyplayer) *seenbyplayer = B_TRUE; + } + brightflash(caster->cell, 3, player); + } else if (spellid == OT_S_ENERGYBOLT) { + char lfname[BUFLEN]; + int acc; + if (!validatespellcell(caster, &targcell, TT_MONSTER, B_TRUE)) return B_TRUE; + // animation + anim(caster->cell, targcell, '}'); + if (isplayer(caster) || haslos(player, caster->cell)) { + msg("%s fire%s a bolt of energy.",castername,isplayer(caster) ? "" : "s"); + if (seenbyplayer) *seenbyplayer = B_TRUE; + } + + target = haslf(targcell); + if (target) { + getlfname(target, lfname); + // target takes magical damage + // check if it hits + acc = getmissileaccuracy(caster, target->cell, NULL, NULL, A_IQ); + if (rnd(1,100) <= acc) { + // hit + if (haslos(caster, target->cell)) { + msg("A bolt of energy hits %s.",lfname); + } + losehp(target, rnd(4,10), DT_MAGIC, caster, "an energy bolt"); + } else { + // miss + if (haslos(caster, target->cell)) { + msg("A bolt of energy misses %s.",lfname); + } + } + } + } else if (spellid == OT_S_FIREBALL) { + cell_t *where; + int failed = B_FALSE; + // ask for a target cell + sprintf(buf, "Where will you target your fireball?"); + where = askcoords(buf, TT_MONSTER); + if (where && haslof(caster, where)) { // need line of FIRE for this, not just sight + if (!where->type->solid || hasflag(where->type->material->flags, F_FLAMMABLE)) { + int dir; + cell_t *c; + // centre fireball here... + if (caster->controller == C_PLAYER) { + msg("You launch an enormous ball of fire!"); + if (seenbyplayer) *seenbyplayer = B_TRUE; + } else if (haslos(player, caster->cell)) { + msg("%s launches an enormous ball of fire!",castername); + if (seenbyplayer) *seenbyplayer = B_TRUE; + } else if (haslos(player, where)) { + msg("An enormous ball of fire explodes!"); + } + + anim(caster->cell, where, '^'); + + // add fires as follows (3 = large, 2 = medium, 1 = smell) + // + // 1 + // 232 + // 13331 + // 232 + // 1 + // add large fires to surrounding cells + addob(where->obpile, "large fire"); + for (dir = D_N; dir <= D_W; dir++) { + c = getcellindir(where, dir); + if (c && (!c->type->solid || hasflag(c->type->material->flags, F_FLAMMABLE)) ) { + addob(c->obpile, "large fire"); + } + } + for (dir = DC_NE; dir <= DC_NW; dir += 2) { + cell_t *c; + c = getcellindir(where, dir); + if (c && (!c->type->solid || hasflag(c->type->material->flags, F_FLAMMABLE)) ) { + addob(c->obpile, "medium fire"); + } + } + for (dir = D_N; dir <= D_W; dir++) { + cell_t *c; + c = getcellindir(where, dir); + if (c) { + c = getcellindir(c, dir); + if (c && (!c->type->solid || hasflag(c->type->material->flags, F_FLAMMABLE)) ) { + addob(c->obpile, "small fire"); + } + } + } + + } else { + failed = B_TRUE; + } + } else { + if (caster->controller == C_PLAYER) { + msg("You have no line of fire to there!"); + } + failed = B_TRUE; + } + + if (failed) { + fizzle(caster); + } + } else if (spellid == OT_S_FIREDART) { + char lfname[BUFLEN]; + int acc; + if (!validatespellcell(caster, &targcell,TT_MONSTER, B_TRUE)) return B_TRUE; + // animation + anim(caster->cell, targcell, '}'); + if (isplayer(caster) || haslos(player, caster->cell)) { + msg("%s shoot%s a dart of flame.",castername,isplayer(caster) ? "" : "s"); + if (seenbyplayer) *seenbyplayer = B_TRUE; + } + + target = haslf(targcell); + if (target) { + getlfname(target, lfname); + // target takes magical damage + // check if it hits + acc = getmissileaccuracy(caster, target->cell, NULL, NULL, A_IQ); + if (rnd(1,100) <= acc) { + // hit + if (haslos(caster, target->cell)) { + msg("A dart of flame hits %s.",lfname); + } + losehp(target, rnd(2,6), DT_FIRE, caster, "a dart of flame"); + } else { + // miss + if (haslos(caster, target->cell)) { + msg("A dart of flame misses %s.",lfname); + } + } + } + } else if (spellid == OT_S_FLAMEPILLAR) { + cell_t *where; + int failed = B_FALSE; + // ask for a target cell + sprintf(buf, "Where will you create a flame pillar?"); + where = askcoords(buf, TT_MONSTER); + if (where && haslos(caster, where)) { + if (!where->type->solid || hasflag(where->type->material->flags, F_FLAMMABLE)) { + // create flame there + if (haslos(player, where)) { + msg("A raging pillar of flame appears!"); + if (seenbyplayer) *seenbyplayer = B_TRUE; + } + addob(where->obpile, "large fire"); + } else { + failed = B_TRUE; + } + } else { + failed = B_TRUE; + } + + if (failed) { + fizzle(caster); + } + } else if (spellid == OT_S_FREEZEOB) { + object_t *o; + + if (targob) { + o = targob; + } else { + if (hasmr(caster)) { + if (isplayer(caster)) { + msg("Your hands feel cold for a second."); + } + return B_FALSE; + } else { + // rings? + o = hasobwithflagval(caster->pack, F_EQUIPPED, BP_RIGHTHAND, NA, NA, NULL); + if (!o) o = hasobwithflagval(caster->pack, F_EQUIPPED, BP_LEFTHAND, NA, NA, NULL); + // gloves? + if (!o) o = hasobwithflagval(caster->pack, F_EQUIPPED, BP_HANDS, NA, NA, NULL); + // weapon? + if (!o) o = hasobwithflagval(caster->pack, F_EQUIPPED, BP_WEAPON, NA, NA, NULL); + // next thing touched + if (!o) { + addflag(caster->flags, F_FREEZINGTOUCH, 1, NA, NA, NULL); + if (caster->controller == C_PLAYER) { + msg("Your hands begin to glow blue!"); + if (seenbyplayer) *seenbyplayer = B_TRUE; + } else if (haslos(player, caster->cell)) { + getlfname(caster, buf); + msg("%s's hands begin to glow blue!", buf); + if (seenbyplayer) *seenbyplayer = B_TRUE; + } + return B_FALSE; + } + } + } + + if (!o) { + fizzle(caster); + return B_TRUE; + } + + // object will turn to ice immediately... + if (isplayer(caster)) { + msg("Your hands feel freezing cold!"); + } + + if (o->material->id == MT_ICE) { // already made of ice? + if (caster->controller == C_PLAYER) { + nothinghappens(); + } + return B_TRUE; + } else { + int rv; + getobname(o, buf, o->amt); + rv = changemat(o, MT_ICE); + if (rv) { + if (rv == E_NOEFFECT) { + if (o->pile->owner) { + if (o->pile->owner->controller == C_PLAYER) { + msg("Your %s glows blue for a moment.",noprefix(buf)); + if (seenbyplayer) *seenbyplayer = B_TRUE; + } else if (haslos(player, o->pile->owner->cell)) { + char buf2[BUFLEN]; + getlfname(o->pile->owner, buf2); + msg("%s%s %s glows blue for a moment.", noprefix(buf2),getpossessive(buf2), buf); + if (seenbyplayer) *seenbyplayer = B_TRUE; + } + } else if (haslos(player, o->pile->where)) { + msg("%s glows blue for a moment.", buf); + if (seenbyplayer) *seenbyplayer = B_TRUE; + } + } else { + if (caster->controller == C_PLAYER) { + nothinghappens(); + } + } + return B_TRUE; + } else { + if (o->pile->owner) { + if (o->pile->owner->controller == C_PLAYER) { + msg("Your %s turn%s to ice!",noprefix(buf), (o->amt == 1) ? "s" : ""); + if (seenbyplayer) *seenbyplayer = B_TRUE; + } else if (haslos(player, o->pile->owner->cell)) { + getlfname(o->pile->owner, buf); + msg("A small cloud of vapour rises up from %s.", buf); + if (seenbyplayer) *seenbyplayer = B_TRUE; + } + } else if (haslos(player, o->pile->where)) { + msg("%s turns to ice!", buf); + if (seenbyplayer) *seenbyplayer = B_TRUE; + } + } + } + } else if (spellid == OT_S_GASEOUSFORM) { + target = caster; + if (hasmr(target)) { + if (isplayer(target)) { + msg("You feel momentarily insubstantial."); + if (seenbyplayer) *seenbyplayer = B_TRUE; + } + } else { + if (isplayer(caster) || haslos(player, target->cell)) { + if (seenbyplayer) *seenbyplayer = B_TRUE; + } + // if this is the player, remember the original race and job... + addflag(target->flags, F_ORIGRACE, target->race->id, NA, NA, NULL); + // polymorph will be temporary... + addtempflag(target->flags, F_POLYMORPHED, B_TRUE, NA, NA, NULL, 10); + setrace(target, R_GASCLOUD); + } + } else if (spellid == OT_S_HASTE) { + int howlong = 15; + if (!validatespelllf(caster, &target)) return B_TRUE; + + if (!isplayer(target) && haslos(player, target->cell)) { + if (seenbyplayer) *seenbyplayer = B_TRUE; + } + + if (hasmr(target)) { + if (isplayer(target) || haslos(player, target->cell)) { + getlfname(target, buf); + msg("%s blur%s for a moment.",buf, isplayer(target) ? "" : "s"); + if (seenbyplayer) *seenbyplayer = B_TRUE; + } + } else { + switch (blessed) { + case B_BLESSED: + howlong = 25; + break; + case B_UNCURSED: + howlong = rnd(5,25); + break; + case B_CURSED: + howlong = 5; + break; + } + addtempflag(target->flags, F_FASTMOVE, 5, NA, NA, NULL, howlong); + } + } else if (spellid == OT_S_HEALING) { + target = caster; + + if (hasmr(target)) { + if (isplayer(target) || haslos(player, target->cell)) { + getlfname(target, buf); + msg("%s %s briefly healthier.",buf, isplayer(target) ? "feel" : "looks"); + if (seenbyplayer) *seenbyplayer = B_TRUE; + } + return B_FALSE; + } + if (target->hp < target->maxhp) { + switch (blessed) { + case B_BLESSED: + gainhp(target, 20); + break; + case B_UNCURSED: + gainhp(target, rnd(10,20)); + break; + case B_CURSED: + gainhp(target, 10); + break; + } + if (isplayer(target)) { + if (target->hp >= target->maxhp) { + msg("Your wounds close themselves!"); + } else { + msg("Some of your wounds close themselves!"); + } + if (seenbyplayer) *seenbyplayer = B_TRUE; + } else if (haslos(player, target->cell)) { + getlfname(target, buf); + msg("%s looks healthier!", buf); + if (seenbyplayer) *seenbyplayer = B_TRUE; + } + } else { + if (isplayer(target)) { + nothinghappens(); + } + } + } else if (spellid == OT_S_HEALINGMIN) { + target = caster; + if (hasmr(target)) { + if (isplayer(target) || haslos(player, target->cell)) { + getlfname(target, buf); + msg("%s %s briefly healthier.",buf, isplayer(target) ? "feel" : "looks"); + if (seenbyplayer) *seenbyplayer = B_TRUE; + } + return B_FALSE; + } + if (target->hp < target->maxhp) { + switch (blessed) { + case B_BLESSED: + gainhp(target, 8); + break; + case B_UNCURSED: + gainhp(target, rnd(1,8)); + break; + case B_CURSED: + gainhp(target, 1); + break; + } + if (isplayer(target)) { + msg("%s of your scrapes and bruises are healed!", + (target->hp >= target->maxhp) ? "All" : "Some"); + if (seenbyplayer) *seenbyplayer = B_TRUE; + } else if (haslos(player, target->cell)) { + getlfname(target, buf); + msg("%s looks a little healthier!", buf); + if (seenbyplayer) *seenbyplayer = B_TRUE; + } + } else { + if (isplayer(target)) { + nothinghappens(); + } + } + } else if (spellid == OT_S_IDENTIFY) { + object_t *o; + + if (targob) { + o = targob; + } else { + // ask for an object + o = askobject(caster->pack, "Identify which object", NULL, AO_NOTIDENTIFIED); + } + if (!o) { + fizzle(caster); + return B_TRUE; + } + + if (caster->controller == C_PLAYER) { + if (isidentified(o)) { // already identified? + nothinghappens(); + return B_TRUE; + } else { + int charges; + identify(o); + getobname(o, buf, o->amt); + + // charges + charges = getcharges(o); + if (charges == -1) { + msglower("%c - %s.",o->letter, buf); + } else { + msglower("%c - %s (%d charges left).",o->letter, buf, charges); + } + if (seenbyplayer) *seenbyplayer = B_TRUE; + } + } else { + // monsters can't id things! + } + } else if (spellid == OT_S_INFINITEDEATH) { + lifeform_t *l; + if (caster->controller == C_PLAYER) { + msg("A wave of incalculable evil blasts outwards from you!"); + if (seenbyplayer) *seenbyplayer = B_TRUE; + } else if (haslos(player, caster->cell)) { + getlfname(caster, buf); + msg("A wave of incalculable evil blasts outwards from %s!", buf); + if (seenbyplayer) *seenbyplayer = B_TRUE; + } else if (player->cell->map == caster->cell->map) { // should always be true + msg("Oh no! A wave of incalculable evil washes over you!"); + } + for (l = caster->cell->map->lf ; l ; l = l->next) { + if (l != caster) { + + if (hasmr(l)) { + if (isplayer(l)) { + msg("Luckily, the evil doesn't seem to harm you."); + if (seenbyplayer) *seenbyplayer = B_TRUE; + } + } else { + losehp(l, 9999, DT_DIRECT, NULL, "an infinite death spell"); + } + } + } + } else if (spellid == OT_S_MANASPIKE) { + char lfname[BUFLEN]; + int acc; + + if (!validatespellcell(caster, &targcell,TT_MONSTER, B_TRUE)) return B_TRUE; + // animation + anim(caster->cell, targcell, '}'); + if (isplayer(caster) || haslos(player, caster->cell)) { + msg("%s fire%s a spike of mana.",castername,isplayer(caster) ? "" : "s"); + if (seenbyplayer) *seenbyplayer = B_TRUE; + } + + target = haslf(targcell); + if (target) { + getlfname(target, lfname); + // target takes magical damage + // check if it hits + acc = getmissileaccuracy(caster, target->cell, NULL, NULL, A_IQ); + if (rnd(1,100) <= acc) { + // hit + if (haslos(caster, target->cell)) { + msg("A spike of mana hits %s.",lfname); + } + losehp(target, rnd(1,4), DT_MAGIC, caster, "a mana spike"); + } else { + // miss + if (haslos(caster, target->cell)) { + msg("A spike of mana misses %s.",lfname); + } + } + } + } else if (spellid == OT_S_MAGSHIELD) { + object_t *o,*nexto; + flag_t *f; + // wearing metal? + for (o = caster->pack->first ; o ; o = nexto) { + nexto = o->next; + if (ismetal(o->material->id)) { + f = isequipped(o); + if (f) { + if ((f->val[0] == BP_WEAPON) || (f->val[0] == BP_SECWEAPON)) { + } else if ((f->val[0] == BP_RIGHTHAND) || (f->val[0] == BP_LEFTHAND)) { + if (isplayer(caster)) { + getobname(o, buf, 1); + msg("Your %s slides off your %s!", buf, getbodypartname(f->val[0])); + } else if (haslos(player, caster->cell)) { + getobname(o, buf, 1); + msg("%s%s %s slides off its %s!", castername, + getpossessive(castername), buf, getbodypartname(f->val[0])); + } + moveob(o, caster->cell->obpile, o->amt); + } else { + if (isplayer(caster)) { + getobname(o, buf, 1); + msg("Your %s pulls away from you a little.", noprefix(buf)); + } + fizzle(caster); + return B_FALSE; + } + } + } + } + + // add the magnetic field! + addtempflag(caster->flags, F_MAGSHIELD, B_TRUE, NA, NA, NULL, 25); + } else if (spellid == OT_S_MAPPING) { int x,y; map_t *m; @@ -46,8 +1040,784 @@ void dospelleffects(lifeform_t *caster, enum OBTYPE spellid, lifeform_t *target) } } - if (target->controller == C_PLAYER) { + if (caster->controller == C_PLAYER) { msg("An image of your surroundings appears in your mind!"); + if (seenbyplayer) *seenbyplayer = B_TRUE; + } + rv = B_FALSE; + } else if (spellid == OT_S_MINDSCAN) { + cell_t *where; + int failed = B_FALSE; + if (caster->controller == C_PLAYER) { + // ask for a target cell + sprintf(buf, "Whose mind will you scan?"); + where = askcoords(buf, TT_MONSTER); + if (where && haslos(caster, where) && haslf(where)) { + showlfstats(where->lf, B_TRUE); + } else { + failed = B_TRUE; + } + if (seenbyplayer) *seenbyplayer = B_TRUE; + } + + if (failed) { + fizzle(caster); + } + } else if (spellid == OT_S_ACCELMETAL) { + if (!targob) { + // ask for an object + targob = askobject(caster->pack, "Fire which object", NULL, AO_NONE); + } + if (!targob || !ismetal(targob->material->id) ) { + fizzle(caster); + return B_TRUE; + } + + 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; + } + + if (!validatespellcell(caster, &targcell, TT_MONSTER, B_TRUE)) return B_TRUE; + + // 4 is the same as ST_TITANIC strength + fireat(caster, targob, targcell, 4 , NULL); + } else if (spellid == OT_S_PULLMETAL) { + if (!validatespellcell(caster, &targcell,TT_OBJECT, B_TRUE)) return B_TRUE; + + if (targcell->lf) { + object_t *o; + int failed = B_FALSE; + int gotmetal = B_FALSE; + float metalweight = 0; + object_t *wep; + + // if they are weilding a metal weapon... + wep = getweapon(targcell->lf); + if (wep && ismetal(wep->material->id)) { + // pull their weapon from them + pullobto(wep, caster); + } else { + // if they're wearing metal... + for (o = targcell->lf->pack->first ; o ; o = o->next) { + if (ismetal(o->material->id)) { + flag_t *f; + f = isequipped(o); + if ((f->val[0] != BP_WEAPON) && (f->val[0] != BP_SECWEAPON)) { + gotmetal = B_TRUE; + metalweight += getobweight(o); + break; + } + } + } + if (gotmetal) { + // include the target lf's weight since we will be pulling on them + target = targcell->lf; + metalweight += getlfweight(target, B_WITHOBS); + + if (hasmr(target)) { + failed = B_TRUE; + } else if (metalweight <= getmaxliftweight(caster)) { + // they get pulled towards caster + failed = pullnextto(target, caster->cell); + } else { + // caster gets pulled towards them + failed = pullnextto(caster, target->cell); + } + + if (isplayer(target) || haslos(player, target->cell)) { + if (seenbyplayer) *seenbyplayer = B_TRUE; + } + + if (failed) { + if (isplayer(target) || haslos(player, target->cell)) { + char buf[BUFLEN]; + getlfname(target, buf); + msg("%s %s pulled forward slightly.", buf, isplayer(target) ? "are" : "is"); + if (seenbyplayer) *seenbyplayer = B_TRUE; + } + return B_FALSE; + } + } else { + fizzle(caster); + } + } + } else if (targcell->obpile->first) { // no lifeform there + targob = NULL; + // select object from cell... + if (countobs(targcell->obpile) == 1) { + targob = targcell->obpile->first; + } else { + targob = askobject(targcell->obpile, "Target which object", NULL, AO_NONE); + } + if (targob) { + if (ismetal(targob->material->id)) { + + if (isplayer(caster)) { + if (seenbyplayer) *seenbyplayer = B_TRUE; + } else if (haslos(player, caster->cell)) { + if (seenbyplayer) *seenbyplayer = B_TRUE; + } + if (getobweight(targob) < getmaxliftweight(caster) ) { + // move it to the player + pullobto(targob, caster); + } else { + // move player to it + pullnextto(caster, targcell); + } + } else { + fizzle(caster); + } + } else { + fizzle(caster); + } + } + } else if (spellid == OT_S_LEVTELEPORT) { + int newdepth; + // ask which level + askstring("Teleport to which level", '?', buf, BUFLEN, NULL); + newdepth = atoi(buf); + if (newdepth <= 0) { + fizzle(caster); + } else if (hasmr(caster)) { + if (isplayer(caster)) { + msg("You flicker."); + if (seenbyplayer) *seenbyplayer = B_TRUE; + } else if (haslos(player, caster->cell)) { + getlfname(caster, buf); + msg("%s flickers.",buf); + if (seenbyplayer) *seenbyplayer = B_TRUE; + } + return B_FALSE; + } else { + map_t *newmap; + cell_t *newcell; + + // announce + if (isplayer(caster)) { + msg("There is a blinding flash of light..."); + wrefresh(msgwin); + } + + // teleport there! + newmap = findmapofdepth(newdepth); + if (!newmap) { + // create new map + newmap = addmap(); + createmap(newmap, newdepth, caster->cell->map->habitat, NULL, findot(OT_STAIRSUP)); + } + + // find a random cell there + newcell = getrandomcell(newmap); + while (!cellwalkable(caster, newcell, NULL)) { + newcell = getrandomcell(newmap); + } + + // announce + if (isplayer(caster)) { + msg("You find yourself on level %d.", newcell->map->depth); + } + + // go there! + moveto(caster, newcell); + if (seenbyplayer) *seenbyplayer = B_TRUE; + } + } else if (spellid == OT_S_INSCRIBE) { + char buf[BUFLEN]; + if (isplayer(caster)) { + if (seenbyplayer) *seenbyplayer = B_TRUE; + // ask what to inscribe + askstring("What will you inscribe here", '?', buf, BUFLEN, NULL); + if (strlen(buf) > 0) { + char *p; + if (isblind(caster)) { + // if blind, garble text somewhat + for (p = buf ; *p; p++) { + if (*p != ' ') { + if (rnd(1,4) == 1) { + if (rnd(1,2) == 1) { + *p = rnd('a','z'); + } else { + *p = rnd('A','Z'); + } + } + } + } + msg("You feel something stirring in the air around you."); + } else { + msg("Magical writing appears before you!"); + } + if (caster->cell->writing) { + free(caster->cell->writing); + } + caster->cell->writing = strdup(buf); + } else { + fizzle(caster); + } + } else { + // monsters can't cast + } + } else if (spellid == OT_S_LIGHT) { + // centre light on the caster + makelitradius(caster->cell, 10, B_PERM); + if (isplayer(caster) || haslos(player, caster->cell)) { + msg("The area is lit by a magical light!"); + if (seenbyplayer) *seenbyplayer = B_TRUE; + } + } else if (spellid == OT_S_GRAVBOOST) { + // ask for target + if (!target) { + if (isplayer(caster)) { + cell_t *where; + sprintf(buf, "Where will you target your spell?"); + where = askcoords(buf, TT_MONSTER); + if (where && haslos(caster, where) && haslf(where)) { + target = haslf(where); + } else { + fizzle(caster); + } + } + } + if (target) { + int howlong = 15; + + if (hasmr(target)) { + if (isplayer(target)) { + msg("You feel momentarily heavier."); + if (seenbyplayer) *seenbyplayer = B_TRUE; + } + return B_FALSE; + } + + switch (blessed) { + case B_BLESSED: + howlong = 10; + break; + case B_UNCURSED: + howlong = rnd(2,10); + break; + case B_CURSED: + howlong = 2; + break; + } + addtempflag(target->flags, F_GRAVBOOSTED, B_TRUE, NA, NA, NULL, howlong); + } else { + fizzle(caster); + } + } else if ((spellid == OT_S_POLYMORPHRND) || (spellid == OT_S_POLYMORPH)) { + race_t *r; + + // ask for target if required + if (!target && isplayer(caster)) { + cell_t *where; + where = askcoords("Who will you polymorph?", TT_MONSTER); + if (haslos(caster, where)) { + target = where->lf; + } else { + target = NULL; + } + } + + if (!target) { + fizzle(caster); + return B_TRUE; + } + + if (hasmr(target)) { + if (isplayer(target)) { + msg("You feel momentarily different."); + if (seenbyplayer) *seenbyplayer = B_TRUE; + } else if (haslos(player, target->cell)) { + getlfname(target, buf); + msg("%s looks momentarily different.", buf); + if (seenbyplayer) *seenbyplayer = B_TRUE; + } + return B_FALSE; + } + + if (isplayer(caster) && (spellid == OT_S_POLYMORPH)) { + if (isplayer(target)) { + askstring("What will you become", '?', buf, BUFLEN, NULL); + } else { + char buf2[BUFLEN]; + char targname[BUFLEN]; + sprintf(buf2, "What will you transform %s into", targname); + askstring(buf2, '?', buf, BUFLEN, NULL); + } + r = findracebyname(buf); + + // make sure race is valid: + // - can't turn into monsters which aren't randomly generated. + // - can't turn into unique monsters + if (!appearsrandomly(r->id)) { + r = NULL; + } + } else { + // random race, but not the same! + r = target->race; + while (r == target->race) { + r = getrandomrace(NULL); + } + } + + if (r == target->race) { + fizzle(caster); + return B_TRUE; + } + + if (r) { + getlfname(target, buf); + + // if this is the player, remember the original race and job... + if (isplayer(target) && !hasflag(target->flags, F_ORIGRACE)) { + int howlong; + addflag(target->flags, F_ORIGRACE, target->race->id, NA, NA, NULL); + // polymorph will be temporary... + howlong = rnd(20,50); + addtempflag(target->flags, F_POLYMORPHED, B_TRUE, NA, NA, NULL, howlong); + } + + // become the new race! + setrace(target, r->id); + } else { + fizzle(caster); + return B_TRUE; + } + } else if (spellid == OT_S_SLOW) { + int howlong = 15; + if (!validatespelllf(caster, &target)) return B_TRUE; + + if (hasmr(target)) { + if (isplayer(target)) { + msg("You feel momentarily slower."); + if (seenbyplayer) *seenbyplayer = B_TRUE; + } else if (haslos(player, target->cell)) { + getlfname(target, buf); + msg("%s looks momentarily slower.", buf); + if (seenbyplayer) *seenbyplayer = B_TRUE; + } + return B_FALSE; + } + + switch (blessed) { + case B_BLESSED: + howlong = 5; + break; + case B_UNCURSED: + howlong = rnd(5,25); + break; + case B_CURSED: + howlong = 25; + break; + } + addtempflag(target->flags, F_SLOWMOVE, 5, NA, NA, NULL, howlong); + /* + if (!isplayer(target) && haslos(player, target->cell)) { + getlfname(target, buf); + msg("%s seems to slow down.",buf); + } + */ + } else if (spellid == OT_S_TELEPORT) { + cell_t *c = NULL; + + // target is always the caster + target = caster; + + if (hasmr(target)) { + if (isplayer(target)) { + msg("You flicker."); + if (seenbyplayer) *seenbyplayer = B_TRUE; + } else if (haslos(player, target->cell)) { + getlfname(target, buf); + msg("%s flickers.", buf); + if (seenbyplayer) *seenbyplayer = B_TRUE; + } + return B_FALSE; + } + + sprintf(buf, "Where will you teleport to?"); + while (!c) { + int ch; + c = askcoords(buf, TT_NONE); + if (!c->known) { + // confirm + ch = askchar("Are you sure to want to teleport into the unknown?", "yn", "n", B_TRUE); + if (ch != 'y') c = NULL; + } else if (c->type->solid) { + // confirm + ch = askchar("Are you sure to want to teleport into solid rock?", "yn", "n", B_TRUE); + if (ch != 'y') c = NULL; + } + } + + if (isplayer(target) || haslos(player, target->cell)) { + if (seenbyplayer) *seenbyplayer = B_TRUE; + } + teleportto(target, c); + rv = B_FALSE; + } else if (spellid == OT_S_TELEPORTRND) { + cell_t *c = NULL; + + // target is always the caster + target = caster; + + if (hasmr(target)) { + if (isplayer(target)) { + msg("You flicker."); + if (seenbyplayer) *seenbyplayer = B_TRUE; + } else if (haslos(player, target->cell)) { + getlfname(target, buf); + msg("%s flickers.", buf); + if (seenbyplayer) *seenbyplayer = B_TRUE; + } + return B_FALSE; + } + + while (!c || c->type->solid || haslf(c)) { + c = getrandomcell(target->cell->map); + } + if (isplayer(target) || haslos(player, target->cell)) { + if (seenbyplayer) *seenbyplayer = B_TRUE; + } + teleportto(target, c); + rv = B_FALSE; + } else if (spellid == OT_S_TELEKINESIS) { + cell_t *where; + int failed = B_FALSE; + float maxweight; + + // if no target object... + if (!targob) { + // ask for a target cell (to take objects from) + sprintf(buf, "Where will you focus your telekinetic power?"); + where = askcoords(buf, TT_OBJECT | TT_DOOR); + if (where && haslos(caster, where)) { + if (where->obpile->first) { + // select object from cell... + if (countobs(where->obpile) == 1) { + targob = where->obpile->first; + } else { + targob = askobject(where->obpile, "Target which object", NULL, AO_NONE); + if (!targob) { + failed = B_TRUE; + } + } + // TODO: check object weight! + } else { + failed = B_TRUE; + } + } else { + failed = B_TRUE; + } + } + + if (!failed) { + // is this a door? + if (hasflag(targob->flags, F_DOOR)) { + if (hasflag(targob->flags, F_OPEN)) { + closedoorat(caster, where); + } else { + opendoorat(caster, where); + } + return B_FALSE; // don't do rest of telekenesis code + } + + // if no target cell, ask where to throw object + if (!targcell) { + char obname[BUFLEN]; + getobname(targob, obname, 1); + sprintf(buf, "Where will you move %s to?", obname); + targcell = askcoords(buf, TT_MONSTER | TT_PLAYER); + } + + // not liftable? + if (hasflag(targob->flags, F_NOPICKUP)) { + if (isplayer(caster)) { + nothinghappens(); + if (seenbyplayer) *seenbyplayer = B_TRUE; + } + return B_FALSE; + } + + // too heavy? max weight is now based on our race's weight and intelligence + maxweight = getlfweight(caster, B_NOOBS) + + (getlfweight(caster, B_NOOBS) * (getstatmod(caster, A_IQ) / 100)); + + if (getobweight(targob) > maxweight) { + cell_t *obloc; + char obname[BUFLEN]; + obloc = getoblocation(targob); + getobname(targob, obname, targob->amt); + if (haslos(player, obloc)) { + msg("%s lifts slightly, then drops again.",obname); + if (seenbyplayer) *seenbyplayer = B_TRUE; + } + return B_FALSE; + } + + + if (targcell && haslos(caster, targcell)) { + // if it is on us, then take theobject + if (targcell == caster->cell) { + pullobto(targob, caster); + } else { + // otherwise throw it there - but speed is based on + // caster's INTELLIGENCE, not strength like normal. + fireat(caster, targob, targcell, getthrowspeed(getattr(caster, A_IQ)), NULL); + // note that we use fireat() rather than throwat() to avoid + // calling taketime() twice. + } + } else { + failed = B_TRUE; + } + } + + if (failed) { + fizzle(caster); + } + } else if (spellid == OT_S_TURNUNDEAD) { + int i; + // works on all undead in sight + for (i = 0; i < caster->nlos; i++) { + targcell = caster->los[i]; + target = targcell->lf; + if (target && hasflag(target->flags, F_UNDEAD)) { + int howlong = 10; + int worked = B_TRUE; + // TODO: does it work? depends on caster level & intelligence + worked = B_TRUE; + // TODO: how long for? depends on caster level & intelligence + howlong = rnd(10,20); + if (worked) { + // don't use scare() since it will fail due to them being undead. + addtempflag(target->flags, F_FLEEFROM, caster->id, NA, NA, NULL,howlong); + } + } + } + } else if (spellid == OT_S_WEAKEN) { + // ask for target + if (!validatespelllf(caster, &target)) return B_TRUE; + + if (hasmr(target)) { + if (isplayer(target)) { + msg("You feel momentarily weaker."); + if (seenbyplayer) *seenbyplayer = B_TRUE; + } else if (haslos(player, target->cell)) { + getlfname(target, buf); + msg("%s looks momentarily weaker.", buf); + if (seenbyplayer) *seenbyplayer = B_TRUE; + } + return B_FALSE; + } + + if (target) { + int howlong = 30; + switch (blessed) { + case B_BLESSED: + howlong = 30; + break; + case B_UNCURSED: + howlong = rnd(10,30); + break; + case B_CURSED: + howlong = 10; + break; + } + addtempflag(target->flags, F_ATTRMOD, A_STR, -6, NA, NULL, howlong); + } else { + fizzle(caster); + } + } else if (spellid == OT_S_WISH) { + object_t *o; + if (caster->controller == C_PLAYER) { + if (seenbyplayer) *seenbyplayer = B_TRUE; + // ask for an object + askstring("For what do you wish", '?', buf, BUFLEN, NULL); + o = addob(caster->cell->obpile, buf); + if (o) { + if (!hasflag(o->flags, F_IMPASSABLE) && canpickup(caster, o)) { + relinkob(o, caster->pack); // move to pack + getobname(o, buf, o->amt); + msglower("%c - %s.", o->letter, buf); + } else { + // couldn't pick it up - try to place on ground! + // impassable? + if (hasflag(o->flags, F_IMPASSABLE)) { + cell_t *newloc; + // if so, don't put it where the player is! + newloc = getrandomadjcell(caster->cell, WE_NOTSOLID); + o = relinkob(o, newloc->obpile); + } + if (o) { + if (isblind(caster)) { + youhear(caster->cell, "something hitting the ground."); + } else { + getobname(o, buf, o->amt); + msg("%s appear%s on the ground!", buf, (o->amt == 1) ? "s" : ""); + } + } else { + // couldn't make it appear + msg("The air in front of you seems to ripple for a moment."); + } + } + } else { + // couldn't make it appear + msg("The air in front of you seems to ripple for a moment."); + } + } else { + // monsters can't wish } } + return rv; +} + +void fizzle(lifeform_t *caster) { + char buf[BUFLEN]; + if (isplayer(caster)) { + msg("Your spell fizzles."); + } else if (haslos(player, caster->cell)) { + getlfname(caster, buf); + capitalise(buf); + msg("%s's spell fizzles.", buf); + } +} + +// magically propel an object into lf's hands. +// if it's too big it'll hit them! +void pullobto(object_t *o, lifeform_t *lf) { + char obname[BUFLEN]; + char lfname[BUFLEN]; + + anim(getoblocation(o), lf->cell, getglyph(o)); + + getobname(o, obname, o->amt); + getlfname(lf, lfname); + if (isplayer(lf) || haslos(player, lf->cell)) { + msg("%s %s towards %s!", obname, (o->amt == 1) ? "flies" : "fly", + lfname); + } + + // can we pick up the object? + if (hasflag(o->flags, F_NOPICKUP) || hasflag(o->flags, F_IMPASSABLE) || !canpickup(lf, o)) { + char buf[BUFLEN]; + int dir; + cell_t *obloc,*newcell; + + sprintf(buf, "a flying %s", noprefix(obname)); + + if (isplayer(lf) || haslos(player, lf->cell)) { + msg("%s %s into %s!", obname, (o->amt == 1) ? "slams" : "slam", lfname); + } + // where does it end up? + obloc = getoblocation(o); + dir = getdirtowards(lf->cell, obloc, B_FALSE); + newcell = getcellindir(lf->cell, dir); + if (newcell) { + // move next to player + o = moveob(o, newcell->obpile, o->amt); + // lf takes damage + losehp(lf, getthrowdam(o), DT_PROJECTILE, NULL, buf); + } else { + o = moveob(o, lf->cell->obpile, o->amt); + // kill lf straight away! + lf->lastdamtype = DT_PROJECTILE; + setlastdam(lf, buf); + lf->hp = 0; + } + } else { + if (isplayer(lf) || haslos(player, lf->cell)) { + msg("%s %s %s.", lfname, isplayer(lf) ? "catch" : "catches", obname); + } + pickup(lf, o, o->amt); + } +} + +cell_t *validatespellcell(lifeform_t *caster, cell_t **targcell, int targtype, int needlof) { + if (*targcell == NULL) { + // ask for a target cell + if (isplayer(caster)) { + cell_t *where; + char buf[BUFLEN]; + sprintf(buf, "Where will you target your spell?"); + where = askcoords(buf, targtype); + if (where && haslos(caster, where)) { + if (needlof) { + if (haslof(caster, where)) { + *targcell = where; + } else { + fizzle(caster); + return NULL; + } + } else { + *targcell = where; + } + } else { + fizzle(caster); + return NULL; + } + } else { + // TODO: fill in monster code? + fizzle(caster); + return NULL; + } + } + + if (*targcell && isplayer(caster)) { + flag_t *f; + // update last cmd + f = hasflag(caster->flags, F_LASTCMD); + if (f && (f->text[0] == 'm')) { + f->val[0] = (*targcell)->x; + f->val[1] = (*targcell)->y; + } + } + + return *targcell; +} + +int getmpcost(enum OBTYPE oid) { + flag_t *f; + objecttype_t *ot; + int cost = 0; + ot = findot(oid); + if (!ot) { + return 0; + } + f = hasflag(ot->flags, F_MPCOST); + if (f) { + cost = f->val[0]; + } else { + f = hasflag(ot->flags, F_SPELLLEVEL); + if (f) { + cost = f->val[0] * f->val[0]; + } + } + return cost; +} + +lifeform_t *validatespelllf(lifeform_t *caster, lifeform_t **target) { + if (*target) { + return *target; + } + // ask for a target lifeform + if (isplayer(caster)) { + cell_t *where; + char buf[BUFLEN]; + sprintf(buf, "Where will you target your spell?"); + where = askcoords(buf, TT_MONSTER); + if (where && haslos(caster, where) && haslf(where)) { + *target = haslf(where); + } else { + fizzle(caster); + return NULL; + } + } else { + // TODO: fill in monster code? + fizzle(caster); + return NULL; + } + return *target; } diff --git a/spell.h b/spell.h index aba49a4..e0eafc1 100644 --- a/spell.h +++ b/spell.h @@ -2,7 +2,13 @@ #define __SPELLS_H #include "defs.h" -void dospelleffects(lifeform_t *caster, enum OBTYPE spellid, lifeform_t *target); - +int abilityeffects(lifeform_t *user, enum OBTYPE abilid); +int dospelleffects(lifeform_t *caster, enum OBTYPE spellid, lifeform_t *target, object_t *targob, cell_t *targcell, int blessed, int *seenbyplayer); +void fizzle(lifeform_t *caster); +int getmpcost(enum OBTYPE oid); +void pullobto(object_t *o, lifeform_t *lf); +cell_t *validatespellcell(lifeform_t *caster, cell_t **targcell, int targtype, int needlof); +lifeform_t *validatespelllf(lifeform_t *caster, lifeform_t **lf); #endif + diff --git a/text.c b/text.c index 114c385..ba58c57 100644 --- a/text.c +++ b/text.c @@ -1,14 +1,131 @@ +#include #include #include #include #include "defs.h" +#include "lf.h" #include "objects.h" +#include "text.h" + +extern long curtime; char *capitalise(char *text) { - text[0] = toupper(text[0]); + if (strlen(text) > 0) { + text[0] = toupper(text[0]); + } return text; } +char *getattrname(enum ATTRIB att) { + switch (att) { + case A_STR: + return "strength"; + case A_IQ: + return "intelligence"; + case A_DEX: + return "dexterity"; + default: + break; + } + return "?unknown?"; +} + +char *getpossessive(char *text) { + char lastchar; + // you -> your + if (!strcmp(text, "you")) { + return "r"; + } + + // xxxs -> xxxs' + lastchar = text[strlen(text)-1]; + if (tolower(lastchar) == 's') { + return "'"; + } + // default: 's + return "'s"; +} + +char *getsizetext(enum LFSIZE sz) { + switch (sz) { + case SZ_ENORMOUS: + return "enormous"; + case SZ_HUGE: + return "huge"; + case SZ_LARGE: + return "large"; + case SZ_HUMAN: + return "human-sized"; + case SZ_MEDIUM: + return "medium"; + case SZ_SMALL: + return "small"; + case SZ_MINI: + case SZ_TINY: + return "extremely small"; + default: + return "unknown-sized"; + } + return "unknown-sized"; +} + +char *gettimetext(char *retbuf) { + int hours,mins,secs; + splittime(&hours, &mins, &secs); + + sprintf(retbuf, "%02d:%02d:%02d",hours,mins,secs); + return retbuf; +} + +char *gettimetextfuzzy(char *retbuf, int wantpm) { + int hours,mins,secs; + int pm = B_FALSE; + splittime(&hours, &mins, &secs); + + if (hours > 12) { + hours -= 12; + pm = B_TRUE; + } + + if (mins == 0) { + sprintf(retbuf, "exactly %d o'clock", hours); + } else if (mins <= 15) { + sprintf(retbuf, "a little after %d o'clock", hours); + } else if (mins <= 25) { + sprintf(retbuf, "nearly half past %d", hours); + } else if (mins <= 35) { + sprintf(retbuf, "around half past %d", hours); + } else if (mins <= 45) { + sprintf(retbuf, "comung up to %d o'clock", (hours == 12) ? 1 : (hours+1)); + } else { + sprintf(retbuf, "nearly %d o'clock", (hours == 12) ? 1 : (hours+1)); + } + + if (wantpm) { + strcat(retbuf, " in the "); + if (pm) { + strcat(retbuf, "afternoon"); + } else { + strcat(retbuf, "morning"); + } + } + + return retbuf; +} + +char *getweighttext(float weight, char *buf) { + if (weight >= 1) { + if ((int)weight == weight) { // ie. is weight an integer? + sprintf(buf, "%0.0f kg",weight); + } else { + sprintf(buf, "%0.1f kg",weight); + } + } else { + sprintf(buf, "%0.0f grams", weight * 1000); + } + return buf; +} + int isvowel (char c) { switch (c) { case 'a': @@ -23,23 +140,47 @@ int isvowel (char c) { // allocates and returns new string char *makeplural(char *text) { - int newlen; char lastlet; char *newtext; - char *p; int rv; newtext = strdup(text); // scrolls - rv = strrep(newtext, "scroll ", "scrolls "); + newtext = strrep(newtext, "berry ", "berries ", &rv); if (rv) return newtext; - rv = strrep(newtext, "potion ", "potions "); + newtext = strrep(newtext, "block ", "blocks ", &rv); if (rv) return newtext; - rv = strrep(newtext, "piece ", "pieces "); + newtext = strrep(newtext, "can ", "cans ", &rv); + if (rv) return newtext; + newtext = strrep(newtext, "chunk ", "chunks ", &rv); + if (rv) return newtext; + newtext = strrep(newtext, "gem ", "gems ", &rv); + if (rv) return newtext; + newtext = strrep(newtext, "loaf ", "loaves ", &rv); + if (rv) return newtext; + newtext = strrep(newtext, "lump ", "lumps ", &rv); + if (rv) return newtext; + newtext = strrep(newtext, "piece ", "pieces ", &rv); + if (rv) return newtext; + newtext = strrep(newtext, "pile ", "piles ", &rv); + if (rv) return newtext; + newtext = strrep(newtext, "pool ", "pools ", &rv); + if (rv) return newtext; + newtext = strrep(newtext, "potion ", "potions ", &rv); + if (rv) return newtext; + newtext = strrep(newtext, "puddle ", "puddles ", &rv); + if (rv) return newtext; + newtext = strrep(newtext, "ring ", "rings ", &rv); + if (rv) return newtext; + newtext = strrep(newtext, "scroll ", "scrolls ", &rv); + if (rv) return newtext; + newtext = strrep(newtext, "vial ", "vials ", &rv); if (rv) return newtext; - rv = strrep(newtext, "pair ", "pairs "); + + // + newtext = strrep(newtext, "pair ", "pairs ", &rv); // don't return // default @@ -56,27 +197,50 @@ char *makeplural(char *text) { return newtext; } -int strrep(char *text, char *oldtok, char *newtok) { +char *noprefix(char *obname) { + char *p; + p = strchr(obname, ' '); + if (p) { + p++; + return p; + } else { + return obname; + } +} + +void splittime(int *hours, int *mins, int *secs) { + long left; + left = curtime; + + *hours = left / 3600; + left -= (*hours * 3600); + *mins = left / 60; + left -= (*mins * 60); + *secs = left; +} + +char *strrep(char *text, char *oldtok, char *newtok, int *rv) { char *temp; - int rv; - temp = strdup(" "); - rv = dostrrep(text, &temp, oldtok, newtok); + temp = strdup(" "); // ooooooo is this bad?? + dostrrep(text, &temp, oldtok, newtok, rv); // swap - text = realloc(text, strlen(temp)); + text = realloc(text, strlen(temp)+1); // extra space for NUL strcpy(text, temp); free(temp); - return rv; + return text; } // returns TRUE if any replacements made -int dostrrep(char* in, char** out, char* oldtok, char* newtok) { +char *dostrrep(char* in, char** out, char* oldtok, char* newtok, int *rv) { char *temp; char *found = strstr(in, oldtok); int idx; if(!found) { - *out = realloc(*out, strlen(in) + 1); + *out = realloc(*out, strlen(in) + 1); // oooooooo crashing in realloc strcpy(*out, in); - return B_FALSE; + + if (rv) *rv = B_FALSE; + return *out; } idx = found - in; @@ -90,13 +254,96 @@ int dostrrep(char* in, char** out, char* oldtok, char* newtok) { strncpy(temp,*out,idx+strlen(newtok)); temp[idx + strlen(newtok)] = '\0'; - dostrrep(found + strlen(oldtok), out, oldtok, newtok); + dostrrep(found + strlen(oldtok), out, oldtok, newtok, rv); temp = realloc(temp, strlen(temp) + strlen(*out) + 1); strcat(temp,*out); free(*out); *out = temp; - return B_TRUE; + if (rv) *rv = B_TRUE; + return *out; } +int strpixmatch(char *haystack, char *needle) { + int matched = B_FALSE; + char *hword, *nword, *hcont,*ncont; + if (strchr(needle, ' ') || strchr(haystack, ' ')) { + char lochaystack[BUFLEN], locneedle[BUFLEN]; + strcpy(lochaystack, haystack); + strcpy(locneedle, needle); + + // match word for word + nword = strtok_r(locneedle, " ", &ncont); + hword = strtok_r(lochaystack, " ", &hcont); + while (nword && hword) { + // all typed words must match + if (strcasestr(hword, nword)) { + matched = B_TRUE; + } else { + matched = B_FALSE; + break; + } + + nword = strtok_r(NULL, " ", &ncont); + hword = strtok_r(NULL, " ", &hcont); + if (nword && !hword) { + matched = B_FALSE; + } + } + + /* + if (!matched && !strchr(needle, ' ')) { + // now try matching typed word against second word in spellname + strcpy(lochaystack, haystack); + hword = strtok_r(lochaystack, " ", &hcont); + while (hword) { + if (strcasestr(hword, needle)) { + matched = B_TRUE; + break; + } else { + matched = B_FALSE; + } + + hword = strtok_r(NULL, " ", &hcont); + if (!hword) { + matched = B_FALSE; + } + } + } + */ + } else { + if (strcasestr(haystack, needle)) { + matched = B_TRUE; + } + } + return matched; +} + +char *you(lifeform_t *lf) { + if (isplayer(lf)) { + return "You"; + } + return "It"; +} + +char *you_l(lifeform_t *lf) { + if (isplayer(lf)) { + return "you"; + } + return "it"; +} + +char *your(lifeform_t *lf) { + if (isplayer(lf)) { + return "Your"; + } + return "Its"; +} + +char *your_l(lifeform_t *lf) { + if (isplayer(lf)) { + return "your"; + } + return "its"; +} diff --git a/text.h b/text.h index a7bad53..825110f 100644 --- a/text.h +++ b/text.h @@ -1,8 +1,20 @@ #include "defs.h" char *capitalise(char *text); +char *getattrname(enum ATTRIB att); +char *getpossessive(char *text); +char *getsizetext(enum LFSIZE sz); +char *gettimetext(char *retbuf); +char *gettimetextfuzzy(char *retbuf, int wantpm); +char *getweighttext(float weight, char *buf); int isvowel(char c); char *makeplural(char *text); - -int strrep(char *text, char *oldtok, char *newtok); -int dostrrep(char* in, char** out, char* oldtok, char* newtok); +char *noprefix(char *obname); +void splittime(int *hours, int *mins, int *secs); +char *strrep(char *text, char *oldtok, char *newtok, int *rv); +char *dostrrep(char* in, char** out, char* oldtok, char* newtok, int *rv); +int strpixmatch(char *haystack, char *needle); +char *you(lifeform_t *lf); +char *you_l(lifeform_t *lf); +char *your(lifeform_t *lf); +char *your_l(lifeform_t *lf);