Beispiel #1
0
char turn(koordptr_t p0, koordptr_t p1, koordptr_t p2, int* winkel) {
  koord_t x0,y0, x1,y1, x2,y2;
  koord_t a1, a2, b1, b2;
  long a_len, b_len;
  DOUBLE arg;

  GETXY(p0, x0,y0);
  GETXY(p1, x1,y1);
  GETXY(p2, x2,y2);

  a1 = x1-x0;
  a2 = y1-y0;
  b1 = x2-x1;
  b2 = y2-y1;

  a_len = _strecke(p0, p1);
  b_len = _strecke(p1, p2);
  arg = ((DOUBLE)a1*b1+a2*b2)/(a_len*b_len);
  if (arg > 1.0) arg = 0.9999999; /* XXX bessere Lösung? */
  if (arg < -1.0) arg = -0.9999999;
  *winkel = (a_len == 0 || b_len == 0 
	     ? 0 
	     : RAD2DEG(acos(arg)));

  return ((DOUBLE)a1*b2-a2*b1 > 0 ? 'l' : 'r');
}
/**
* check_direction(uint8 dir)
*
* @brief
* @param dir
* @return sboolean  true or false
*/
sbool check_direction(uint8 dir)
{
	uint32 x = player(myindex())->x;
	uint32 y = player(myindex())->y;
	uint32 i = 0;

	switch(dir){
	case DIR_UP: y--; break;
	case DIR_DOWN: y++; break;
	case DIR_LEFT: x--; break;
	case DIR_RIGHT: x++; break;
	}

	if(map()->tile[GETXY(x,y)].type == TILE_TYPE_BLOCKED)
		return TRUE;

	for(i = 0; i < players_on_map(); i++){
		if(player(player_on_map(i))->x == x && player(player_on_map(i))->y == y)
			return TRUE;
	}

	for(i = 0; i < MAX_MAP_NPCS; i++){
		if(map()->npc[i].num){
			if(map()->npc[i].x == x && map()->npc[i].y == y)
				return TRUE;
		}
	}

	return FALSE;
}
/**
* check_movement(void)
*
* @brief
* @param void
* @return void
*/
void check_movement(void)
{
	if(is_trying_to_move()){
		if(can_move()){
			if(tempdata()->shift)
				player(myindex())->moving = MOVEMENT_RUNNING;
			else
				player(myindex())->moving = MOVEMENT_WALKING;

			switch(player(myindex())->dir){
			case DIR_UP:
				send_player_move();
				player(myindex())->offsety = PIC_SIZE;
				player(myindex())->y--;
				break;
			case DIR_DOWN:
				send_player_move();
				player(myindex())->offsety = PIC_SIZE * -1;
				player(myindex())->y++;
				break;
			case DIR_LEFT:
				send_player_move();
				player(myindex())->offsetx = PIC_SIZE;
				player(myindex())->x--;
				break;
			case DIR_RIGHT:
				send_player_move();
				player(myindex())->offsetx = PIC_SIZE * -1;
				player(myindex())->x++;
				break;
			}

			if(player(myindex())->offsetx == 0 && player(myindex())->offsety == 0){
				if(map()->tile[GETXY(player(myindex())->x,player(myindex())->y)].type == TILE_TYPE_WARP){
					tempdata()->gettingmap = TRUE;
					tempdata()->canmovenow = FALSE;
				}
			}
		}
	}
}
Beispiel #4
0
koordptr_t koordptr_by_koord(koord_t x, koord_t y) {
  char *str_p = STR_NAME(str_buf);
  char *str_end = str_buf + str_buf_len;
  int str_len;
  koordlen_t koord_len;
  int i;
  while(str_p < str_end) {
    str_len = strlen(str_p);
    koord_len = KOORDLEN2(str_p, str_len);
    for(i=0; i<koord_len; i++) {
      //      char *netz_p = netz_buf + STR_KOORDPTR2(str_p,str_len,i);
      koordptr_t koordptr = STR_KOORDPTR2(str_p,str_len,i);
      int x1, y1;
      GETXY(koordptr,x1,y1);
      if (x == x1 && y == y1) {
	printf("%s: <%d><%d> <=> <%d><%d>\n", str_p, x, y, x1, y1);
	return koordptr;
      }
    }
    str_p += STR_STRUCTLEN2(str_len,koord_len);
  }
  return -1;
}
void test_map(uint32 mapnum)
{
	uint32 x = 0;
	uint32 y = 0;
	char *path;

	map(mapnum)->name = "A Test Map";
	map(mapnum)->moral = 0;
	map(mapnum)->music = 0;
	map(mapnum)->left = 0;
	map(mapnum)->right = 0;
	map(mapnum)->up = 0;
	map(mapnum)->down = 0;
	map(mapnum)->shop = 0;
	map(mapnum)->bootmap = 1;
	map(mapnum)->bootx = 4;
	map(mapnum)->booty = 4;
	map(mapnum)->revision = 1;

	for( x = 0; x < MAX_MAP_NPCS; x++)
		map(mapnum)->npc[x].num = 0;

	for( y = 0; y < MAX_MAPY; y++){
		for( x = 0; x < MAX_MAPX; x++){
			map(mapnum)->tile[GETXY(x,y)].ground.y = 1;
			map(mapnum)->tile[GETXY(x,y)].ground.x = 1;
			map(mapnum)->tile[GETXY(x,y)].ground.tileset = 1;

			map(mapnum)->tile[GETXY(x,y)].mask.y = 0;
			map(mapnum)->tile[GETXY(x,y)].mask.x = 0;
			map(mapnum)->tile[GETXY(x,y)].mask.tileset = 0;

			map(mapnum)->tile[GETXY(x,y)].anim.y = 0;
			map(mapnum)->tile[GETXY(x,y)].anim.x = 0;
			map(mapnum)->tile[GETXY(x,y)].anim.tileset = 0;

			map(mapnum)->tile[GETXY(x,y)].fringe.y = 0;
			map(mapnum)->tile[GETXY(x,y)].fringe.x = 0;
			map(mapnum)->tile[GETXY(x,y)].fringe.tileset = 0;

			map(mapnum)->tile[GETXY(x,y)].data1 = 0;
			map(mapnum)->tile[GETXY(x,y)].data2 = 0;
			map(mapnum)->tile[GETXY(x,y)].data3 = 0;
			map(mapnum)->tile[GETXY(x,y)].type = TILE_TYPE_WALKABLE;
		}
	}
	path = get_path(MAP_PATH, mapnum, FILE_ENDING);
	write_map(path,mapnum);
}
void mapcache_create(uint32 mapnum)
{
	buffer_t buffer;
	uint32 x = 0, y = 0;

	clear_buffer(&buffer);

	add_opcode(&buffer, SMAPDATA);
	add_buffer(&buffer, &mapnum, SIZE32);
	add_string(&buffer, map(mapnum)->name );
	add_buffer(&buffer, &map(mapnum)->moral,SIZE8);
	add_buffer(&buffer, &map(mapnum)->music,SIZE8);
	add_buffer(&buffer, &map(mapnum)->left,SIZE16);
	add_buffer(&buffer, &map(mapnum)->right,SIZE16);
	add_buffer(&buffer, &map(mapnum)->up,SIZE16);
	add_buffer(&buffer, &map(mapnum)->down,SIZE16);
	add_buffer(&buffer, &map(mapnum)->shop,SIZE16);
	add_buffer(&buffer, &map(mapnum)->bootmap,SIZE32);
	add_buffer(&buffer, &map(mapnum)->bootx,SIZE8);
	add_buffer(&buffer, &map(mapnum)->booty,SIZE8);
	add_buffer(&buffer, &map(mapnum)->revision,SIZE32);

	for( x = 0; x < MAX_MAP_NPCS; x++)
		add_buffer(&buffer, &map(mapnum)->npc[x].num,SIZE16);

	for(x = 0; x < MAX_MAPX; x++){
		for(y = 0; y < MAX_MAPY; y++){
			add_buffer(&buffer,&map(mapnum)->tile[GETXY(x,y)].type, SIZE8);
			add_buffer(&buffer,&map(mapnum)->tile[GETXY(x,y)].data1, SIZE16);
			add_buffer(&buffer,&map(mapnum)->tile[GETXY(x,y)].data2, SIZE16);
			add_buffer(&buffer,&map(mapnum)->tile[GETXY(x,y)].data3, SIZE16);
			add_buffer(&buffer,&map(mapnum)->tile[GETXY(x,y)].ground.y, SIZE8);
			add_buffer(&buffer,&map(mapnum)->tile[GETXY(x,y)].ground.x, SIZE8);
			add_buffer(&buffer,&map(mapnum)->tile[GETXY(x,y)].ground.tileset, SIZE8);
			add_buffer(&buffer,&map(mapnum)->tile[GETXY(x,y)].mask.y, SIZE8);
			add_buffer(&buffer,&map(mapnum)->tile[GETXY(x,y)].mask.x, SIZE8);
			add_buffer(&buffer,&map(mapnum)->tile[GETXY(x,y)].mask.tileset, SIZE8);
			add_buffer(&buffer,&map(mapnum)->tile[GETXY(x,y)].anim.y, SIZE8);
			add_buffer(&buffer,&map(mapnum)->tile[GETXY(x,y)].anim.x, SIZE8);
			add_buffer(&buffer,&map(mapnum)->tile[GETXY(x,y)].anim.tileset, SIZE8);
			add_buffer(&buffer,&map(mapnum)->tile[GETXY(x,y)].fringe.y, SIZE8);
			add_buffer(&buffer,&map(mapnum)->tile[GETXY(x,y)].fringe.x, SIZE8);
			add_buffer(&buffer,&map(mapnum)->tile[GETXY(x,y)].fringe.tileset, SIZE8);
		}
	}

	clear_buffer(&map_array_cache[mapnum]);
	map_array_cache[mapnum] = buffer;
}
Beispiel #7
0
long _strecke(koordptr_t koord1, koordptr_t koord2) {
  koord_t x1,y1, x2,y2;
  GETXY(koord1,x1,y1);
  GETXY(koord2,x2,y2);
  return (long)sqrt(SQR((DOUBLE)x1-x2)+SQR((DOUBLE)y1-y2));
}
void send_map(void)
{
    buffer_t buffer;
    uint32 x = 0 , y = 0;

    clear_buffer(&buffer);

    add_opcode(&buffer, CMAPDATA);
    add_string(&buffer, map()->name);
    add_buffer(&buffer, &map()->moral,SIZE8);
    add_buffer(&buffer, &map()->music,SIZE8);
    add_buffer(&buffer, &map()->left,SIZE16);
    add_buffer(&buffer, &map()->right,SIZE16);
    add_buffer(&buffer, &map()->up,SIZE16);
    add_buffer(&buffer, &map()->down,SIZE16);
    add_buffer(&buffer, &map()->shop,SIZE16);
    add_buffer(&buffer, &map()->bootmap,SIZE32);
    add_buffer(&buffer, &map()->bootx,SIZE8);
    add_buffer(&buffer, &map()->booty,SIZE8);

    for( x = 0; x < MAX_MAP_NPCS; x++) {
        add_buffer(&buffer, &map()->npc[x].num,SIZE16);
    }

    for(x = 0; x < MAX_MAPX; x++) {
        for(y = 0; y < MAX_MAPY; y++) {
            add_buffer(&buffer, &map()->tile[GETXY(x,y)].type, SIZE8);
            add_buffer(&buffer, &map()->tile[GETXY(x,y)].data1, SIZE16);
            add_buffer(&buffer, &map()->tile[GETXY(x,y)].data2, SIZE16);
            add_buffer(&buffer, &map()->tile[GETXY(x,y)].data3, SIZE16);
            add_buffer(&buffer, &map()->tile[GETXY(x,y)].ground.y, SIZE8);
            add_buffer(&buffer, &map()->tile[GETXY(x,y)].ground.x, SIZE8);
            add_buffer(&buffer, &map()->tile[GETXY(x,y)].ground.tileset, SIZE8);
            add_buffer(&buffer, &map()->tile[GETXY(x,y)].mask.y, SIZE8);
            add_buffer(&buffer, &map()->tile[GETXY(x,y)].mask.x, SIZE8);
            add_buffer(&buffer, &map()->tile[GETXY(x,y)].mask.tileset, SIZE8);
            add_buffer(&buffer, &map()->tile[GETXY(x,y)].anim.y, SIZE8);
            add_buffer(&buffer, &map()->tile[GETXY(x,y)].anim.x, SIZE8);
            add_buffer(&buffer, &map()->tile[GETXY(x,y)].anim.tileset, SIZE8);
            add_buffer(&buffer, &map()->tile[GETXY(x,y)].fringe.y, SIZE8);
            add_buffer(&buffer, &map()->tile[GETXY(x,y)].fringe.x, SIZE8);
            add_buffer(&buffer, &map()->tile[GETXY(x,y)].fringe.tileset, SIZE8);
        }
    }

    send_data(&buffer);
}