FileAccess *FileAccess::open(const String &p_path, int p_mode_flags, Error *r_error) { //try packed data first FileAccess *ret = NULL; if (!(p_mode_flags & WRITE) && PackedData::get_singleton() && !PackedData::get_singleton()->is_disabled()) { ret = PackedData::get_singleton()->try_open_path(p_path); if (ret) { if (r_error) *r_error = OK; return ret; } } ret = create_for_path(p_path); Error err = ret->_open(p_path, p_mode_flags); if (r_error) *r_error = err; if (err != OK) { memdelete(ret); ret = NULL; } return ret; }