So, there is this bug that prevents people from talking again to Albie Weekes when quitting the game during the first talk. Fortunately, this bug seems to be resolved since update 4. But for people who couldn't get their hands on it (like me), or who still have that bug, here is the result of my two days of "research" in Hogwarts Legacy's save files.
This resets the broom class with professor Kogawa.
This works on the base game (with no updates), and may work on update 1, 2 and 3, but it doesn't work on update 4 and after because the save format changed.
- An access to you save files. For me, they are in
C:\Users\name\AppData\Local\Phoenix\Saved\SaveGames\571030874
I don’t know how you would do that on other platforms such as PS5, but it may still work.
You can quickly access toC:\Users\name\AppData\Local
by hitting Win+R and typing%localappdata%
(then hit Enter). - SQLite tools to execute SQL commands (download the one named “sqlite-tools-blabla.zip”)
- The save editor (you need to create an account to download it)
- Go to the flight area, in front of the castle. Because if you are not there, you will have to fly there at a very slow speed, and this can take a lot of time. (Here is the area I mean; I already have a broom but don’t pay attention to that). You don’t need to be at a particular place, just not too far away.
- Manually save and exit the game.
- Find your latest save file in your save folder. Warning: your latest save file is not necessarily the file that has the highest number. To find the right file, you can show the “Date created” and “Date modified”.
- Copy (do not cut/move) the file to some other folder, like your downloads folder.
- Optional: sort and group your downloads folder by date modified so you can quickly find the files you are editing
- Copy
sqlite3.exe
from the zip file to the same folder
Copy all your save files to two separate folders, one you may touch but not edit, one you swear to never touch unless you messed up the first one even if I told you not to edit it. The second one can also be on something like your google drive for more safety. This is prevention ;)
In the save file you copied to your downloads folder, there are two databases we are going to edit.
- Download the save editor (it is just a single hsle.html file) and open it (with a web browser) if you haven’t already.
- Upload your save (the one in your downloads folder)
- Go to the “Save file” tab and download database 1 and 2.
From what I’ve understood, database 2 is a backup of the database 1 in case it gets corrupted. It contains information that is a little older than in database 1.
- Open the terminal / console / command line
- Drag and drop
sqlite3.exe
to that window and hit Enter - Copy/paste this and hit enter until everything is executed: (if your database names aren't
sqldb1.sqlite
andsqldb2.sqlite
, make sure to change them in the first two lines)
ATTACH '.\sqldb1.sqlite' AS db1;
ATTACH '.\sqldb2.sqlite' AS db2;
DELETE FROM db1.MissionDynamic WHERE MissionID LIKE 'FLY_%' OR MissionID LIKE 'COM_32';
INSERT INTO db1.MissionDynamic VALUES('FLY_01','MissionEntryPoint','Quest','','None','Default','None',NULL,21600,64800,1,34,0,5,NULL);
INSERT INTO db1.MissionDynamic VALUES('FLY_01','Sublevel','M_FLY_01','Overland',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
INSERT INTO db1.MissionDynamic VALUES('ZAB_01_Kill','Main','FLY Complete','PreActive','',NULL,NULL,NULL,428957,0,0,0,0,0,NULL);
INSERT INTO db1.MissionDynamic VALUES('FLY_01','StepJournal','FLY_01_FlyingClass_QuestAvailable_Journal',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
INSERT INTO db1.MissionDynamic VALUES('FLY_01','ScheduleOverride','ArthurSiggs','Overland','M_FLY_PreClass','M_FLY_PreClass','','',0,1,NULL,NULL,NULL,NULL,NULL);
INSERT INTO db1.MissionDynamic VALUES('FLY_01','ScheduleOverride','CharlotteMorrison','Overland','M_FLY_PreClass','M_FLY_PreClass','','',0,1,NULL,NULL,NULL,NULL,NULL);
INSERT INTO db1.MissionDynamic VALUES('FLY_01','ScheduleOverride','evangelinebardsley','Overland','M_FLY_PreClass','M_FLY_PreClass','','',0,1,NULL,NULL,NULL,NULL,NULL);
INSERT INTO db1.MissionDynamic VALUES('FLY_01','ScheduleOverride','HectorWeasley','Overland','M_FLY_PreClass','M_FLY_PreClass','','',0,1,NULL,NULL,NULL,NULL,NULL);
INSERT INTO db1.MissionDynamic VALUES('FLY_01','ScheduleOverride','LawrenceDavies','Overland','M_FLY_PreClass','M_FLY_PreClass','','',0,1,NULL,NULL,NULL,NULL,NULL);
INSERT INTO db1.MissionDynamic VALUES('FLY_01','ScheduleOverride','MahendraKapoor','Overland','M_FLY_PreClass','M_FLY_PreClass','','',0,1,NULL,NULL,NULL,NULL,NULL);
INSERT INTO db1.MissionDynamic VALUES('FLY_01','ScheduleOverride','SamanthaDale','Overland','M_FLY_PreClass','M_FLY_PreClass','','',0,1,NULL,NULL,NULL,NULL,NULL);
INSERT INTO db1.MissionDynamic VALUES('FLY_01','ScheduleOverride','SophroniaFranklin','Overland','M_FLY_PreClass','M_FLY_PreClass','','',0,1,NULL,NULL,NULL,NULL,NULL);
INSERT INTO db1.MissionDynamic VALUES('FLY_01','ScheduleOverride','ChiyoKogawa','Overland','M_FLY_KogawaNotes','M_FLY_KogawaNotes','','',0,1,NULL,NULL,NULL,NULL,NULL);
INSERT INTO db1.MissionDynamic VALUES('FLY_01','ScheduleOverride','everettclopton','Overland','M_FLY_PreClass','M_FLY_PreClass','','',0,1,NULL,NULL,NULL,NULL,NULL);
INSERT INTO db1.MissionDynamic VALUES('FLY_01','Main','Enter Flying Class','PreActive','',NULL,NULL,NULL,428959,0,0,1,1,428956,NULL);
INSERT INTO db1.MissionDynamic VALUES(NULL,'FocusMission','FLY_01',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
DELETE FROM db1.AchievementDynamic WHERE AchievementID = 'HOMEWORK_Broom_DistanceFlown';
DELETE FROM db2.AchievementDynamic WHERE AchievementID = 'HOMEWORK_Broom_DistanceFlown';
DELETE FROM db1.PlayerStatsDynamic WHERE ActivityName = 'FLY_01' OR ActivityName = 'HOMEWORK_Broom_DistanceFlown';
DELETE FROM db2.PlayerStatsDynamic WHERE ActivityName = 'FLY_01' OR ActivityName = 'HOMEWORK_Broom_DistanceFlown';
DELETE FROM db1.SceneRigCompletedDynamic WHERE Key LIKE '%EverettAfterClass%' OR Key LIKE '%MeetEverett%' OR Key LIKE '%FLY%';
DELETE FROM db2.SceneRigCompletedDynamic WHERE Key LIKE '%EverettAfterClass%' OR Key LIKE '%MeetEverett%' OR Key LIKE '%FLY%';
UPDATE db1.StatsDynamic SET Value = 0 WHERE StatID LIKE '%fly%' OR StatID LIKE '%AlbieWeekes%';
UPDATE db2.StatsDynamic SET Value = 0 WHERE StatID LIKE '%fly%' OR StatID LIKE '%AlbieWeekes%';
UPDATE db1.StatsDynamic SET Value = 1 WHERE StatID LIKE 'M_FLY_AvailableR%';
DELETE FROM db1.StatsDynamic WHERE StatID LIKE 'STAT%Broom%';
DELETE FROM db2.StatsDynamic WHERE StatID LIKE 'STAT%Broom%';
DELETE FROM db1.MiscDataDynamic WHERE DataName = 'AlbieWeekes';
DELETE FROM db2.MiscDataDynamic WHERE DataName = 'AlbieWeekes';
- Exit with
.exit
(and Enter)
- Go back to the save editor (in your browser), reload, and upload your save file
- Go to the “Save file” tab
- Upload
sqldb1.sqlite
andsqldb2.sqlite
respectively as Database 1 and Database 2 - Click “Generate save file”, this will download a file named
hlcustomsave.sav
- Go to your save folder (the one in AppData/Local)
- Delete the save file you found in step 1. Setup
- Replace it with your
hlcustomsave.sav
- Rename
hlcustomsave.sav
to the exact name of the file you just deleted
Start the game and load the latest manual save. You should spawn on a broomstick (or at least the quest for the flying class should be active). If not, you probably loaded the wrong save (in which case you can go to the settings and load another manual save) or worse, you edited the wrong save, in which case you need to copy another save file and start over from step 3: Getting the database.
If you successfully spawned on a broomstick (or the quest for the flying class is active), then DON'T GO THROUGH THE RINGS (except if you want big bugs/funny cutscenes), but teleport to somewhere in the castle to unmount your broom. Then walk back to the flying class and start the flying class quest. From now on, everything should work.
When you finish the flying class, teleport to Hogsmeade and go to the broom shop, now Albie Weekes should talk to you again!