void player_bump(int dir, int x, int y) { int bump_x = player_entity.x; int bump_y = player_entity.y; switch(dir) { case LEFT: bump_x--; break; case RIGHT: bump_x++; break; case UP: bump_y--; break; case DOWN: bump_y++; break; case UP_LEFT: bump_x--; bump_y--; break; case UP_RIGHT: bump_x++; bump_y--; break; case DOWN_LEFT: bump_x--; bump_y++; break; case DOWN_RIGHT: bump_x++; bump_y++; break; default: break; } u32 meta = map_get_meta(LAYER_MIDDLE, bump_x, bump_y); if(meta & (TILE_ITEM | TILE_WEAPON)) { u16 item = map_get_tile(LAYER_MIDDLE, bump_x, bump_y); map_set_tile(LAYER_MIDDLE, bump_x, bump_y, TILE_NONE); item_select_prompt(bump_x, bump_y, item); } else { iact_set_trigger(IACT_TRIG_BumpTile, 3, bump_x, bump_y, map_get_tile(LAYER_MIDDLE, bump_x, bump_y)); } }
void client_net_block_set(map_t *map, s32 x, s32 y, tile_t tile) { printf("client_net_block_set: %d,%d\n", x, y); if(net_player.sockfd != FD_LOCAL_IMMEDIATE) { net_pack(NULL, PKT_BLOCK_SET, x, y, tile.type, tile.col, tile.chr); } else { map_set_tile(map, x, y, tile); } }
bool player_do_pull(int dir) { if(BUTTON_PUSH_STATE) { switch(dir) { case LEFT: if((map_get_meta(LAYER_MIDDLE, player_entity.x+1,player_entity.y) & (TILE_PUSH_PULL_BLOCK)) && player_entity.x != 0 && map_get_tile(LAYER_MIDDLE, player_entity.x+1,player_entity.y) != TILE_NONE) { map_set_tile(LAYER_MIDDLE, player_entity.x, player_entity.y, map_get_tile(LAYER_MIDDLE, player_entity.x+1,player_entity.y)); int object_index = 0; while(1) { obj_info *object = map_get_object(object_index++, player_entity.x+1, player_entity.y); if (object == NULL) break; if(!object->visible) continue; if(object->type == OBJ_ITEM || object->type == OBJ_WEAPON) { object->visible = false; map_set_tile(LAYER_MIDDLE, player_entity.x+1, player_entity.y, object->arg); return true; } } map_set_tile(LAYER_MIDDLE, player_entity.x+1, player_entity.y, TILE_NONE); return true; } break; case RIGHT: if((map_get_meta(LAYER_MIDDLE, player_entity.x-1,player_entity.y) & (TILE_PUSH_PULL_BLOCK)) && player_entity.x != map_get_width()-1 && map_get_tile(LAYER_MIDDLE, player_entity.x-1,player_entity.y) != TILE_NONE) { map_set_tile(LAYER_MIDDLE, player_entity.x, player_entity.y, map_get_tile(LAYER_MIDDLE, player_entity.x-1,player_entity.y)); int object_index = 0; while(1) { obj_info *object = map_get_object(object_index++, player_entity.x-1, player_entity.y); if (object == NULL) break; if(!object->visible) continue; if(object->type == OBJ_ITEM || object->type == OBJ_WEAPON) { object->visible = false; map_set_tile(LAYER_MIDDLE, player_entity.x-1, player_entity.y, object->arg); return true; } } map_set_tile(LAYER_MIDDLE, player_entity.x-1, player_entity.y, TILE_NONE); return true; } break; case UP: if((map_get_meta(LAYER_MIDDLE,player_entity.x, player_entity.y+1) & (TILE_PUSH_PULL_BLOCK)) && player_entity.y != 0 && map_get_tile(LAYER_MIDDLE, player_entity.x,player_entity.y+1) != TILE_NONE) { map_set_tile(LAYER_MIDDLE, player_entity.x, player_entity.y, map_get_tile(LAYER_MIDDLE, player_entity.x,player_entity.y+1)); int object_index = 0; while(1) { obj_info *object = map_get_object(object_index++, player_entity.x, player_entity.y+1); if (object == NULL) break; if(!object->visible) continue; if(object->type == OBJ_ITEM || object->type == OBJ_WEAPON) { object->visible = false; map_set_tile(LAYER_MIDDLE, player_entity.x, player_entity.y+1, object->arg); return true; } } map_set_tile(LAYER_MIDDLE, player_entity.x, player_entity.y+1, TILE_NONE); return true; } break; case DOWN: if((map_get_meta(LAYER_MIDDLE,player_entity.x, player_entity.y-1) & (TILE_PUSH_PULL_BLOCK)) && player_entity.y != map_get_height()-1 && map_get_tile(LAYER_MIDDLE, player_entity.x,player_entity.y-1) != TILE_NONE) { map_set_tile(LAYER_MIDDLE, player_entity.x, player_entity.y, map_get_tile(LAYER_MIDDLE, player_entity.x,player_entity.y-1)); int object_index = 0; while(1) { obj_info *object = map_get_object(object_index++, player_entity.x, player_entity.y-1); if (object == NULL) break; if(!object->visible) continue; if(object->type == OBJ_ITEM || object->type == OBJ_WEAPON) { object->visible = false; map_set_tile(LAYER_MIDDLE, player_entity.x, player_entity.y-1, object->arg); return true; } } map_set_tile(LAYER_MIDDLE, player_entity.x, player_entity.y-1, TILE_NONE); return true; } break; } } return false; }