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; } } } } }
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; }
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); }