Skip to content

Commit cfa72e0

Browse files
Let -playdemo et al. fall back to lump name if file not found (#770)
1 parent 7df7427 commit cfa72e0

File tree

1 file changed

+18
-7
lines changed

1 file changed

+18
-7
lines changed

prboom2/src/dsda/playback.c

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -84,15 +84,13 @@ const char* dsda_PlaybackName(void) {
8484
}
8585

8686
void dsda_ExecutePlaybackOptions(void) {
87-
if (playdemo_arg)
88-
{
89-
G_DeferedPlayDemo(playback_name);
90-
userdemo = true;
91-
}
92-
else if (playlump_arg) {
87+
if (playlump_arg) {
9388
if (W_CheckNumForName(playback_name) == LUMP_NOT_FOUND)
9489
I_Error("Unable to find required internal demo lump \"%s\"", playback_name);
90+
}
9591

92+
if (playdemo_arg)
93+
{
9694
G_DeferedPlayDemo(playback_name);
9795
userdemo = true;
9896
}
@@ -125,7 +123,7 @@ static void dsda_UpdatePlaybackName(const char* name, dboolean require_file) {
125123
playback_name = Z_Strdup(name);
126124

127125
if (require_file)
128-
playback_filename = I_RequireFile(playback_name, ".lmp");
126+
playback_filename = I_FindFile(playback_name, ".lmp");
129127
else
130128
playback_filename = NULL;
131129
}
@@ -137,13 +135,17 @@ const char* dsda_ParsePlaybackOptions(void) {
137135
if (arg->found) {
138136
playdemo_arg = arg;
139137
dsda_UpdatePlaybackName(arg->value.v_string, true);
138+
// fall back to lump if file not found
139+
if (!playback_filename)
140+
playlump_arg = arg;
140141
return playback_filename;
141142
}
142143

143144
arg = dsda_Arg(dsda_arg_playlump);
144145
if (arg->found) {
145146
playlump_arg = arg;
146147
dsda_UpdatePlaybackName(arg->value.v_string, false);
148+
playdemo_arg = arg;
147149
return playback_filename;
148150
}
149151

@@ -152,13 +154,19 @@ const char* dsda_ParsePlaybackOptions(void) {
152154
fastdemo_arg = arg;
153155
fastdemo = true;
154156
dsda_UpdatePlaybackName(arg->value.v_string, true);
157+
// fall back to lump if file not found
158+
if (!playback_filename)
159+
playlump_arg = arg;
155160
return playback_filename;
156161
}
157162

158163
arg = dsda_Arg(dsda_arg_timedemo);
159164
if (arg->found) {
160165
timedemo_arg = arg;
161166
dsda_UpdatePlaybackName(arg->value.v_string, true);
167+
// fall back to lump if file not found
168+
if (!playback_filename)
169+
playlump_arg = arg;
162170
return playback_filename;
163171
}
164172

@@ -167,6 +175,9 @@ const char* dsda_ParsePlaybackOptions(void) {
167175
recordfromto_arg = arg;
168176
dsda_SetDemoBaseName(arg->value.v_string_array[1]);
169177
dsda_UpdatePlaybackName(arg->value.v_string_array[0], true);
178+
// require a file
179+
if (!playback_filename)
180+
playback_filename = I_RequireFile(arg->value.v_string_array[0], ".lmp");
170181
return playback_filename;
171182
}
172183

0 commit comments

Comments
 (0)