@@ -849,6 +849,15 @@ int wmWorldMap_init()
849
849
gTownMapHotkeysFix = true ;
850
850
configGetBool (&gSfallConfig , SFALL_CONFIG_MISC_KEY, SFALL_CONFIG_TOWN_MAP_HOTKEYS_FIX_KEY, &gTownMapHotkeysFix );
851
851
852
+ // CE: City size fids should be initialized during startup. They are used
853
+ // during |wmTeleportToArea| to calculate worldmap position when jumping
854
+ // from Temple to Arroyo - before giving a chance to |wmInterfaceInit| to
855
+ // initialize it.
856
+ for (int citySize = 0 ; citySize < CITY_SIZE_COUNT; citySize++) {
857
+ CitySizeDescription* citySizeDescription = &(wmSphereData[citySize]);
858
+ citySizeDescription->fid = buildFid (OBJ_TYPE_INTERFACE, 336 + citySize, 0 , 0 , 0 );
859
+ }
860
+
852
861
return 0 ;
853
862
}
854
863
@@ -4469,11 +4478,7 @@ static int wmInterfaceInit()
4469
4478
4470
4479
for (int citySize = 0 ; citySize < CITY_SIZE_COUNT; citySize++) {
4471
4480
CitySizeDescription* citySizeDescription = &(wmSphereData[citySize]);
4472
-
4473
- fid = buildFid (OBJ_TYPE_INTERFACE, 336 + citySize, 0 , 0 , 0 );
4474
- citySizeDescription->fid = fid;
4475
-
4476
- if (!citySizeDescription->frmImage .lock (fid)) {
4481
+ if (!citySizeDescription->frmImage .lock (citySizeDescription->fid )) {
4477
4482
return -1 ;
4478
4483
}
4479
4484
}
@@ -6540,9 +6545,21 @@ int wmTeleportToArea(int areaIdx)
6540
6545
// locations.
6541
6546
// CE: See `wmWorldMapFunc` for explanation.
6542
6547
CitySizeDescription* citySizeDescription = &(wmSphereData[city->size ]);
6548
+
6549
+ // CE: This function might be called outside |wmWorldmapFunc|, so it's
6550
+ // image might not be locked.
6551
+ bool wasLocked = citySizeDescription->frmImage .isLocked ();
6552
+ if (!wasLocked) {
6553
+ citySizeDescription->frmImage .lock (citySizeDescription->fid );
6554
+ }
6555
+
6543
6556
wmGenData.worldPosX = city->x + citySizeDescription->frmImage .getWidth () / 2 - WM_VIEW_X;
6544
6557
wmGenData.worldPosY = city->y + citySizeDescription->frmImage .getHeight () / 2 - WM_VIEW_Y;
6545
6558
6559
+ if (!wasLocked) {
6560
+ citySizeDescription->frmImage .unlock ();
6561
+ }
6562
+
6546
6563
return 0 ;
6547
6564
}
6548
6565
0 commit comments