XCHAR_P, XCHAR_P));
E void FDECL(place_lregion, (XCHAR_P, XCHAR_P, XCHAR_P, XCHAR_P, XCHAR_P,
XCHAR_P, XCHAR_P, XCHAR_P, XCHAR_P, d_level *));
+E void NDECL(fixup_special);
E void NDECL(fumaroles);
E void NDECL(movebubbles);
E void NDECL(water_friction);
STATIC_DCL boolean FDECL(put_lregion_here, (XCHAR_P, XCHAR_P, XCHAR_P,
XCHAR_P, XCHAR_P, XCHAR_P,
XCHAR_P, BOOLEAN_P, d_level *));
-STATIC_DCL void NDECL(fixup_special);
STATIC_DCL void NDECL(setup_waterlevel);
STATIC_DCL void NDECL(unsetup_waterlevel);
static boolean was_waterlevel; /* ugh... this shouldn't be needed */
/* this is special stuff that the level compiler cannot (yet) handle */
-STATIC_OVL void
+void
fixup_special()
{
register lev_region *r = lregions;
if (*protofile) {
Strcat(protofile, LEV_EXT);
if (load_special(protofile)) {
- fixup_special();
/* some levels can end up with monsters
on dead mon list, including light source monsters */
dmonsfree();
count_features();
- if (coder->premapped)
- sokoban_detect();
if (coder->solidify)
solidify_map();
+ /* This must be done before sokoban_detect(),
+ * otherwise branch stairs won't be premapped. */
+ fixup_special();
+
+ if (coder->premapped)
+ sokoban_detect();
+
if (coder->frame) {
struct sp_frame *tmpframe;
do {