Skip to content

Instantly share code, notes, and snippets.

@bananasmoothii
Last active July 18, 2023 17:54
Show Gist options
  • Save bananasmoothii/5ce72d79758b1d428d9a26cda3795826 to your computer and use it in GitHub Desktop.
Save bananasmoothii/5ce72d79758b1d428d9a26cda3795826 to your computer and use it in GitHub Desktop.
Hogwarts Legacy fix for broom quest

Fix for Spintwitches shop bug (before update 4)

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.

Prerequisites

  • 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 to C:\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)

Steps

1. Setup

  1. 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.
    location
  2. Manually save and exit the game.
  3. 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”.
  4. Copy (do not cut/move) the file to some other folder, like your downloads folder.
  5. Optional: sort and group your downloads folder by date modified so you can quickly find the files you are editing
  6. Copy sqlite3.exe from the zip file to the same folder

2. Backup

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

3. Getting the databases

In the save file you copied to your downloads folder, there are two databases we are going to edit.

  1. Download the save editor (it is just a single hsle.html file) and open it (with a web browser) if you haven’t already.
  2. Upload your save (the one in your downloads folder)
  3. 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.

4. Editing the databases

  1. Open the terminal / console / command line
  2. Drag and drop sqlite3.exe to that window and hit Enter
  3. Copy/paste this and hit enter until everything is executed: (if your database names aren't sqldb1.sqlite and sqldb2.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';
  1. Exit with .exit (and Enter)

5. Reintegrate the database into the save file

  1. Go back to the save editor (in your browser), reload, and upload your save file
  2. Go to the “Save file” tab
  3. Upload sqldb1.sqlite and sqldb2.sqlite respectively as Database 1 and Database 2
  4. Click “Generate save file”, this will download a file named hlcustomsave.sav

6. Putting the save file back into the save folder

  1. Go to your save folder (the one in AppData/Local)
  2. Delete the save file you found in step 1. Setup
  3. Replace it with your hlcustomsave.sav
  4. Rename hlcustomsave.sav to the exact name of the file you just deleted

7. Loading the game and fixing a bug

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!

Leave a star if this helps you! If you have any questions, please comment below.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment