// Creates a new creature and places it in the maze void Creature::CBIRTH(dodBYTE typ) { int u, maz_idx; RowCol rndcell; dodBYTE rw, cl; int TCBindex; u = -1; do { ++u; } while (CCBLND[u].P_CCUSE != 0); --CCBLND[u].P_CCUSE; CCBLND[u].creature_id = typ; CCBLND[u].P_CCPOW = CDBTAB[typ].P_CDPOW; CCBLND[u].P_CCMGO = CDBTAB[typ].P_CDMGO; CCBLND[u].P_CCMGD = CDBTAB[typ].P_CDMGD; CCBLND[u].P_CCPHO = CDBTAB[typ].P_CDPHO; CCBLND[u].P_CCPHD = CDBTAB[typ].P_CDPHD; CCBLND[u].P_CCTMV = CDBTAB[typ].P_CDTMV; CCBLND[u].P_CCTAT = CDBTAB[typ].P_CDTAT; do { do { cl = (rng.RANDOM() & 31); rw = (rng.RANDOM() & 31); //printf(" %02X, %02X = %02X\n", rw, cl, dungeon.MAZLND[dungeon.RC2IDX(rw, cl)]); rndcell.setRC(rw, cl); maz_idx = dungeon.RC2IDX(rw, cl); } while (dungeon.MAZLND[maz_idx] == 0xFF); } while (CFIND(rw, cl) == false); //printf("----- %02X: %02X, %02X -----\n", typ, rw, cl); CCBLND[u].P_CCROW = rw; CCBLND[u].P_CCCOL = cl; TCBindex = scheduler.GETTCB(); scheduler.TCBLND[TCBindex].data = u; scheduler.TCBLND[TCBindex].type = Scheduler::TID_CRTMOVE; scheduler.TCBLND[TCBindex].frequency = CCBLND[u].P_CCTMV; }