@@ -1160,6 +1160,53 @@ int G_GotoNextLevel(int *pEpi, int *pMap)
1160
1160
return false;
1161
1161
}
1162
1162
1163
+ int G_GotoPrevLevel (void )
1164
+ {
1165
+ const int cur_epsd = gameepisode ;
1166
+ const int cur_map = gamemap ;
1167
+ int epsd_count , map_count ;
1168
+ int ret = false;
1169
+
1170
+ for (epsd_count = 0 ; epsd_count < 10 ; epsd_count ++ , gameepisode = (gameepisode + 9 ) % 10 )
1171
+ {
1172
+ for (map_count = 0 , gamemap -- ; map_count < 100 ; map_count ++ , gamemap = (gamemap + 99 ) % 100 )
1173
+ {
1174
+ int next_epsd , next_map ;
1175
+ G_GotoNextLevel (& next_epsd , & next_map );
1176
+
1177
+ if (next_epsd == cur_epsd && next_map == cur_map &&
1178
+ (gameepisode != cur_epsd || gamemap != cur_map ))
1179
+ {
1180
+ char * name = MapName (gameepisode , gamemap );
1181
+
1182
+ if (W_CheckNumForName (name ) != -1 )
1183
+ {
1184
+ G_DeferedInitNew (gameskill , gameepisode , gamemap );
1185
+ ret = true;
1186
+ break ;
1187
+ }
1188
+ }
1189
+ }
1190
+
1191
+ // only check one episode in Doom 2
1192
+ if (gamemode == commercial )
1193
+ {
1194
+ break ;
1195
+ }
1196
+ }
1197
+
1198
+ gameepisode = cur_epsd ;
1199
+ gamemap = cur_map ;
1200
+
1201
+ if (ret == false)
1202
+ {
1203
+ char * name = MapName (gameepisode , gamemap );
1204
+ displaymsg ("Previous level not found for %s" , name );
1205
+ }
1206
+
1207
+ return ret ;
1208
+ }
1209
+
1163
1210
static boolean G_StrictModeSkipEvent (event_t * ev )
1164
1211
{
1165
1212
static boolean enable_mouse = false;
0 commit comments