/*
* This file handles non-fighting player actions.
*/
#include <sys/types.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
/* include main header file */
#include "mud.h"
/* eventually needs loaded via file */
#define HI_XLIMIT 20
#define HI_YLIMIT 20
#define HI_ZLIMIT 3
#define LO_XLIMIT -20
#define LO_YLIMIT -20
#define LO_ZLIMIT -3
void do_movement(D_MOBILE *dMob, int dir)
{
D_MOBILE *xMob;
ITERATOR *pIter;
bool leftr = FALSE;
pIter = AllocIterator(dmobile_list);
while ((xMob = (D_MOBILE *) NextInList(pIter)) != NULL)
{
if (xMob == dMob) continue;
if ((dMob->coordx != xMob->coordx) && (dMob->coordz != xMob->coordz) && (dMob->coordy != xMob->coordy))
leftr = TRUE;
}
switch (dir)
{
case NORTH:
/* North */
stcf(dMob, "You leave for the north.\n\r");
dMob->coordy++;
break;
case SOUTH:
/* South */
stcf(dMob, "You leave for the south.\n\r");
dMob->coordy--;
break;
case EAST:
/* East */
stcf(dMob, "You head eastward.\n\r");
dMob->coordx++;
break;
case WEST:
/* West */
stcf(dMob, "You head westward.\n\r");
dMob->coordx--;
break;
case UP:
/* Up */
stcf(dMob, "You fly upwards.\n\r");
dMob->coordz++;
break;
case DOWN:
/* Down */
stcf(dMob, "You you head downwards.\n\r");
dMob->coordz--;
break;
case NORTHEAST:
/* NorthEast */
dMob->coordy++;
dMob->coordx++;
break;
case SOUTHEAST:
/* SouthEast */
dMob->coordy--;
dMob->coordx++;
break;
case SOUTHWEST:
/* SouthWest */
dMob->coordy--;
dMob->coordx--;
break;
case NORTHWEST:
/* NorthWest */
dMob->coordy++;
dMob->coordx--;
break;
}
if (dMob->coordx > HI_XLIMIT)
{
dMob->coordx--;
text_to_mobile(dMob, "You can't move there!\n\r");
return;
}
if (dMob->coordy > HI_YLIMIT)
{
dMob->coordy--;
text_to_mobile(dMob, "You can't move there!\n\r");
return;
}
if (dMob->coordz > HI_ZLIMIT)
{
dMob->coordz--;
text_to_mobile(dMob, "You can't move there!\n\r");
return;
}
if (dMob->coordx < LO_XLIMIT)
{
dMob->coordx++;
text_to_mobile(dMob, "You can't move there!\n\r");
return;
}
if (dMob->coordy < LO_YLIMIT)
{
dMob->coordy++;
text_to_mobile(dMob, "You can't move there!\n\r");
return;
}
if (dMob->coordz < LO_ZLIMIT)
{
dMob->coordz++;
text_to_mobile(dMob, "You can't move there!\n\r");
return;
}
if (leftr)
stcf(xMob, "%s has left the room.\n\r",dMob->name);
cmd_look(dMob, NULL);
return;
}