#include<stdlib.h>
#include"object.h"
#include"level.h"
#include"monster.h"
#include"player.h"
#include"io.h"
#include"fejs.h"
#include"monsters.c"

void
monster_clone(unsigned long i, int x, int y, tlevel *l) {
  tmonstertmp pm = pre_mon[i];
  int z;
  tmonster *m;
  
  if (! l->m[y][x].m)
    l->m[y][x].m = malloc(sizeof(tmonster));
  
  m = l->m[y][x].m;
  
  m->x = x;
  m->y = y;
  m->l = pm.l + random()%3 - 1;
  m->d = i;
  m->m = pm.m + random()%21 - 10;
  m->iw = m->il = 0;
  m->i = NULL;
  for (z = 0; z < W_S; z++)
    m->w[z] = NULL;
}

void
monster_paint(tmonster *m) {
  pputch(m->x + sx, m->y + sy, pre_mon[m->d].tr, pre_mon[m->d].cl);
}

int
monster_move(tmonster *m, signed short dx, signed short dy, tlevel *l) {
  int x = m->x + dx,
      y = m->y + dy;

  if (l->m[y][x].t != C_WALL &&
      l->m[y][x].t != C_WATER &&
      l->m[y][x].t != C_CDOOR) {
    
    if (! l->m[y][x].m) {
      l->m[m->y][m->x].m = NULL;
      m->x = x;
      m->y = y;
      l->m[y][x].m = m;
      
    } else {
      return 2;
    }
    
    return 1;
  }
  
  return 0;
}

void
monster_teleport(tmonster *m, int x, int y, tlevel *l) {
  m->x = x;
  m->y = y;
  monster_move(m, 0, 0, l);
}

void
monster_iget(tmonster *m, tobj *o) {
  m->il++;
  m->i = realloc(m->i, m->il * sizeof(tobj *));
  m->i[m->il - 1] = o;
}

void
monster_idrop(tmonster *m, tobj *o) {
  int op;
  
  for (op = 0; op < m->il; op++)
    if (m->i[op] == o) {
      m->i[op] = NULL;
      m->il--;
      
      for (; op < m->il; op++)
       	m->i[op] = m->i[op + 1];
      
      m->i = realloc(m->i, m->il * sizeof(tobj *));
      
      return;
    }
}
