implement demotest (#1260)

* add test step to workflows

* add -quiet
This commit is contained in:
Roman Fomin 2023-11-16 20:34:58 +07:00 committed by GitHub
parent 5b944166c4
commit 081d8a9bbf
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
15 changed files with 1896 additions and 1 deletions

View File

@ -84,6 +84,7 @@ jobs:
${{ matrix.config.msys-env }}-libsndfile
${{ matrix.config.msys-env }}-fluidsynth
${{ matrix.config.msys-env }}-libxmp
${{ matrix.config.msys-env }}-python-pip
- uses: actions/checkout@v4
@ -98,6 +99,13 @@ jobs:
- name: Build
run: cmake --build build
- name: Test
if: github.event_name == 'workflow_dispatch'
run: |
cd demotest
pip install pyyaml joblib
python demotest --jobs 4 --port ../build/src/woof
- name: Install
run: |
cd build

View File

@ -66,6 +66,13 @@ jobs:
- name: Build
run: cmake --build build --config "Release"
- name: Test
if: github.event_name == 'workflow_dispatch'
run: |
cd demotest
pip install pyyaml joblib
python demotest --jobs 4 --port "../build/src/Release/woof.com"
- name: Package
run: |
cd build

25
demotest/config.yml Normal file
View File

@ -0,0 +1,25 @@
- demo: gdallm15226.lmp
demo_url: "https://dsdarchive.com/files/demos/gd/54630/gdallm15226.zip"
wad: gd.wad
wad_url: "https://dsdarchive.com/files/wads/doom2/1472/gd.zip"
output: gd.txt
- demo: 30av-25337.lmp
demo_url: "https://dsdarchive.com/files/demos/av/28171/avall-41337.zip"
wad: AV.WAD
wad_url: "https://dsdarchive.com/files/wads/doom2/385/av_new.zip"
output: av.txt
- demo: pl2all1.lmp
demo_url: "https://dsdarchive.com/files/demos/pl2/19121/p2all-6504.zip"
wad: PL2.WAD
wad_url: "https://dsdarchive.com/files/wads/plutonia/2283/pl2.zip"
gameversion: final
output: pl2.txt
- demo: 30cyx1904.lmp
demo_url: "https://dsdarchive.com/files/demos/cydreams/45733/cyallx1904.zip"
wad: Cyber110.wad
wad_url: "https://dsdarchive.com/files/wads/doom2/806/cydreams.zip"
deh: Cyber110.deh
output: cydreams.txt

91
demotest/demotest Normal file
View File

@ -0,0 +1,91 @@
#!/usr/bin/env python
import os
import sys
import subprocess
import difflib
from urllib import request
from pathlib import Path
from zipfile import ZipFile
from argparse import ArgumentParser
import yaml
from joblib import Parallel, delayed
def download(url):
response = request.urlopen(url)
with open('tmp', 'wb') as stream:
stream.write(response.read())
print('downloaded ' + url)
return 'tmp'
def extract(zipname, filename):
with ZipFile(zipname, 'r') as zf:
with zf.open(filename) as stream:
with open(Path('extract', filename), 'wb') as out:
out.write(stream.read())
def download_and_extract(record):
if not Path('extract', record['wad']).exists():
zipname = download(record['wad_url'])
extract(zipname, record['wad'])
if 'deh' in record:
extract(zipname, record['deh'])
os.remove(zipname)
if not Path('extract', record['demo']).exists():
zipname = download(record['demo_url'])
extract(zipname, record['demo'])
os.remove(zipname)
def build_command_line(port, record):
cmd = []
cmd += [Path(port), '-nodraw', '-noblit', '-nosound', '-nogui', '-quiet']
cmd += ['-iwad', Path('extract', 'miniwad.wad')]
cmd += ['-file', Path('extract', record['wad'])]
if 'deh' in record:
cmd += ['-deh', Path('extract', record['deh'])]
if 'gameversion' in record:
cmd += ['-gameversion', record['gameversion']]
cmd += ['-timedemo', Path('extract', record['demo'])]
cmd += ['-statdump', Path('output', record['output'])]
return cmd
def run_program(args):
with open('config.yml', 'r') as stream:
config = yaml.safe_load(stream)
extract('miniwad.zip', 'miniwad.wad')
commands = []
for record in config:
download_and_extract(record)
commands.append(build_command_line(args.source_port, record))
os.environ["SDL_VIDEODRIVER"] = 'dummy'
Parallel(n_jobs=args.jobs)(delayed(subprocess.call)(cmd) for cmd in commands)
error = False
for record in config:
name = record['output']
with open(Path('expected', name), 'r') as f1:
with open(Path('output', name), 'r') as f2:
diff = difflib.unified_diff(f1.readlines(), f2.readlines(),
fromfile='a/' + name, tofile='b/' + name)
for line in diff:
error = True
sys.stdout.write(line)
if error:
sys.exit(1)
else:
print("Success.")
if __name__ == "__main__":
parser = ArgumentParser(description='Execute demos for Doom port in a batch')
parser.add_argument('--jobs', dest='jobs', default=1, type=int, help='Set the number of jobs')
parser.add_argument('--port', dest='source_port', default="doom", type=str, help='Path to Doom port')
args = parser.parse_args()
run_program(args)

352
demotest/expected/av.txt Normal file
View File

@ -0,0 +1,352 @@
===========================================
MAP01
===========================================
Time: 1:12 (par: 0:30)
Player 1 (Green):
Kills: 48 / 48 (100%)
Items: 5 / 6 (83%)
Secrets: 6 / 6 (100%)
===========================================
MAP02
===========================================
Time: 2:07 (par: 1:30)
Player 1 (Green):
Kills: 107 / 106 (100%)
Items: 2 / 9 (22%)
Secrets: 2 / 2 (100%)
===========================================
MAP03
===========================================
Time: 3:03 (par: 2:00)
Player 1 (Green):
Kills: 132 / 132 (100%)
Items: 39 / 44 (88%)
Secrets: 1 / 1 (100%)
===========================================
MAP04
===========================================
Time: 4:47 (par: 2:00)
Player 1 (Green):
Kills: 287 / 287 (100%)
Items: 39 / 39 (100%)
Secrets: 4 / 4 (100%)
===========================================
MAP05
===========================================
Time: 2:39 (par: 1:30)
Player 1 (Green):
Kills: 96 / 96 (100%)
Items: 6 / 20 (30%)
Secrets: 1 / 1 (100%)
===========================================
MAP06
===========================================
Time: 5:19 (par: 2:30)
Player 1 (Green):
Kills: 188 / 187 (100%)
Items: 28 / 29 (96%)
Secrets: 3 / 3 (100%)
===========================================
MAP07
===========================================
Time: 2:13 (par: 2:00)
Player 1 (Green):
Kills: 45 / 45 (100%)
Items: 0 / 1 (0%)
Secrets: 1 / 1 (100%)
===========================================
MAP08
===========================================
Time: 6:24 (par: 2:00)
Player 1 (Green):
Kills: 253 / 253 (100%)
Items: 15 / 45 (33%)
Secrets: 9 / 9 (100%)
===========================================
MAP09
===========================================
Time: 4:27 (par: 4:30)
Player 1 (Green):
Kills: 141 / 141 (100%)
Items: 11 / 15 (73%)
Secrets: 7 / 7 (100%)
===========================================
MAP10
===========================================
Time: 6:12 (par: 1:30)
Player 1 (Green):
Kills: 359 / 359 (-82%)
Items: 29 / 31 (93%)
Secrets: 2 / 2 (100%)
===========================================
MAP11
===========================================
Time: 10:32 (par: 3:30)
Player 1 (Green):
Kills: 233 / 231 (100%)
Items: 8 / 19 (42%)
Secrets: 4 / 4 (100%)
===========================================
MAP12
===========================================
Time: 6:48 (par: 2:30)
Player 1 (Green):
Kills: 257 / 257 (100%)
Items: 44 / 86 (51%)
Secrets: 11 / 11 (100%)
===========================================
MAP13
===========================================
Time: 8:31 (par: 2:30)
Player 1 (Green):
Kills: 593 / 592 (-10%)
Items: 22 / 44 (50%)
Secrets: 4 / 4 (100%)
===========================================
MAP14
===========================================
Time: 10:34 (par: 2:30)
Player 1 (Green):
Kills: 644 / 644 (-1%)
Items: 15 / 40 (37%)
Secrets: 3 / 3 (100%)
===========================================
MAP15
===========================================
Time: 6:05 (par: 3:30)
Player 1 (Green):
Kills: 209 / 204 (102%)
Items: 3 / 5 (60%)
Secrets: 3 / 3 (100%)
===========================================
MAP31
===========================================
Time: 6:38 (par: 2:00)
Player 1 (Green):
Kills: 240 / 238 (100%)
Items: 3 / 8 (37%)
Secrets: 3 / 3 (100%)
===========================================
MAP32
===========================================
Time: 6:17 (par: 0:30)
Player 1 (Green):
Kills: 396 / 395 (-65%)
Items: 11 / 13 (84%)
Secrets: 1 / 1 (100%)
===========================================
MAP16
===========================================
Time: 5:32 (par: 2:30)
Player 1 (Green):
Kills: 258 / 258 (100%)
Items: 65 / 78 (83%)
Secrets: 2 / 2 (100%)
===========================================
MAP17
===========================================
Time: 3:29 (par: 7:00)
Player 1 (Green):
Kills: 134 / 134 (100%)
Items: 1 / 2 (50%)
Secrets: 1 / 1 (100%)
===========================================
MAP18
===========================================
Time: 12:22 (par: 2:30)
Player 1 (Green):
Kills: 639 / 639 (-2%)
Items: 10 / 14 (71%)
Secrets: 2 / 2 (100%)
===========================================
MAP19
===========================================
Time: 7:47 (par: 3:30)
Player 1 (Green):
Kills: 280 / 268 (104%)
Items: 35 / 37 (94%)
Secrets: 1 / 1 (100%)
===========================================
MAP20
===========================================
Time: 16:46 (par: 2:30)
Player 1 (Green):
Kills: 494 / 494 (-32%)
Items: 6 / 6 (100%)
Secrets: 1 / 1 (100%)
===========================================
MAP21
===========================================
Time: 3:15 (par: 4:00)
Player 1 (Green):
Kills: 67 / 67 (100%)
Items: 39 / 77 (50%)
Secrets: 2 / 2 (100%)
===========================================
MAP22
===========================================
Time: 5:00 (par: 2:30)
Player 1 (Green):
Kills: 159 / 158 (100%)
Items: 32 / 61 (52%)
Secrets: 4 / 4 (100%)
===========================================
MAP23
===========================================
Time: 7:03 (par: 3:00)
Player 1 (Green):
Kills: 160 / 158 (101%)
Items: 5 / 5 (100%)
Secrets: 5 / 5 (100%)
===========================================
MAP24
===========================================
Time: 5:35 (par: 2:30)
Player 1 (Green):
Kills: 143 / 143 (100%)
Items: 12 / 16 (75%)
Secrets: 5 / 5 (100%)
===========================================
MAP25
===========================================
Time: 23:31 (par: 2:30)
Player 1 (Green):
Kills: 1409 / 1325 (7%)
Items: 20 / 25 (80%)
Secrets: 10 / 10 (100%)
===========================================
MAP26
===========================================
Time: 16:32 (par: 5:00)
Player 1 (Green):
Kills: 1024 / 964 (-29%)
Items: 19 / 21 (90%)
Secrets: 3 / 3 (100%)
===========================================
MAP27
===========================================
Time: 21:35 (par: 5:30)
Player 1 (Green):
Kills: 839 / 838 (21%)
Items: 8 / 18 (44%)
Secrets: 13 / 13 (100%)
===========================================
MAP28
===========================================
Time: 13:31 (par: 7:00)
Player 1 (Green):
Kills: 306 / 304 (100%)
Items: 34 / 39 (87%)
Secrets: 8 / 8 (100%)
===========================================
MAP29
===========================================
Time: 7:59 (par: 5:00)
Player 1 (Green):
Kills: 354 / 346 (-87%)
Items: 10 / 24 (41%)
Secrets: 3 / 3 (100%)
===========================================
MAP30
===========================================
Time: 9:52 (par: 3:00)
Player 1 (Green):
Kills: 125 / 6 (2083%)
Items: 3 / 4 (75%)
Secrets: 1 / 1 (100%)

View File

@ -0,0 +1,330 @@
===========================================
MAP01
===========================================
Time: 0:15 (par: 0:30)
Player 1 (Green):
Kills: 0 / 1 (0%)
Items: 0 / 1 (0%)
Secrets: 1 / 1 (100%)
===========================================
MAP02
===========================================
Time: 0:02 (par: 1:30)
Player 1 (Green):
Kills: 0 / 2 (0%)
Items: 1 / 1 (100%)
Secrets: 1 / 1 (100%)
===========================================
MAP03
===========================================
Time: 0:54 (par: 2:00)
Player 1 (Green):
Kills: 2 / 2 (100%)
Items: 1 / 1 (100%)
Secrets: 1 / 1 (100%)
===========================================
MAP04
===========================================
Time: 0:09 (par: 2:00)
Player 1 (Green):
Kills: 0 / 1 (0%)
Items: 1 / 1 (100%)
Secrets: 1 / 1 (100%)
===========================================
MAP05
===========================================
Time: 0:04 (par: 1:30)
Player 1 (Green):
Kills: 0 / 3 (0%)
Items: 1 / 1 (100%)
Secrets: 1 / 1 (100%)
===========================================
MAP06
===========================================
Time: 0:19 (par: 2:30)
Player 1 (Green):
Kills: 1 / 3 (33%)
Items: 1 / 1 (100%)
Secrets: 1 / 1 (100%)
===========================================
MAP07
===========================================
Time: 0:17 (par: 2:00)
Player 1 (Green):
Kills: 4 / 8 (50%)
Items: 0 / 1 (0%)
Secrets: 1 / 1 (100%)
===========================================
MAP08
===========================================
Time: 1:00 (par: 2:00)
Player 1 (Green):
Kills: 4 / 4 (100%)
Items: 2 / 2 (100%)
Secrets: 1 / 1 (100%)
===========================================
MAP09
===========================================
Time: 0:34 (par: 4:30)
Player 1 (Green):
Kills: 0 / 4 (0%)
Items: 1 / 1 (100%)
Secrets: 1 / 1 (100%)
===========================================
MAP10
===========================================
Time: 0:11 (par: 1:30)
Player 1 (Green):
Kills: 0 / 3 (0%)
Items: 1 / 1 (100%)
Secrets: 1 / 1 (100%)
===========================================
MAP11
===========================================
Time: 0:59 (par: 3:30)
Player 1 (Green):
Kills: 1 / 1 (100%)
Items: 0 / 1 (0%)
Secrets: 1 / 1 (100%)
===========================================
MAP12
===========================================
Time: 1:53 (par: 2:30)
Player 1 (Green):
Kills: 2 / 2 (100%)
Items: 2 / 2 (100%)
Secrets: 1 / 1 (100%)
===========================================
MAP13
===========================================
Time: 0:02 (par: 2:30)
Player 1 (Green):
Kills: 0 / 3 (0%)
Items: 1 / 1 (100%)
Secrets: 1 / 1 (100%)
===========================================
MAP14
===========================================
Time: 0:48 (par: 2:30)
Player 1 (Green):
Kills: 4 / 4 (100%)
Items: 1 / 2 (50%)
Secrets: 1 / 1 (100%)
===========================================
MAP15
===========================================
Time: 0:19 (par: 3:30)
Player 1 (Green):
Kills: 4 / 4 (100%)
Items: 1 / 1 (100%)
Secrets: 1 / 1 (100%)
===========================================
MAP16
===========================================
Time: 0:37 (par: 2:30)
Player 1 (Green):
Kills: 0 / 2 (0%)
Items: 1 / 1 (100%)
Secrets: 1 / 1 (100%)
===========================================
MAP17
===========================================
Time: 1:07 (par: 7:00)
Player 1 (Green):
Kills: 5 / 5 (100%)
Items: 1 / 1 (100%)
Secrets: 1 / 1 (100%)
===========================================
MAP18
===========================================
Time: 0:19 (par: 2:30)
Player 1 (Green):
Kills: 0 / 6 (0%)
Items: 1 / 1 (100%)
Secrets: 1 / 1 (100%)
===========================================
MAP19
===========================================
Time: 0:09 (par: 3:30)
Player 1 (Green):
Kills: 0 / 3 (0%)
Items: 1 / 1 (100%)
Secrets: 1 / 1 (100%)
===========================================
MAP20
===========================================
Time: 0:35 (par: 2:30)
Player 1 (Green):
Kills: 3 / 4 (75%)
Items: 1 / 1 (100%)
Secrets: 1 / 1 (100%)
===========================================
MAP21
===========================================
Time: 0:40 (par: 4:00)
Player 1 (Green):
Kills: 6 / 6 (100%)
Items: 1 / 1 (100%)
Secrets: 1 / 1 (100%)
===========================================
MAP22
===========================================
Time: 0:36 (par: 2:30)
Player 1 (Green):
Kills: 0 / 1 (0%)
Items: 1 / 1 (100%)
Secrets: 1 / 1 (100%)
===========================================
MAP23
===========================================
Time: 3:15 (par: 3:00)
Player 1 (Green):
Kills: 6 / 8 (75%)
Items: 2 / 2 (100%)
Secrets: 0 / 1 (0%)
===========================================
MAP24
===========================================
Time: 0:17 (par: 2:30)
Player 1 (Green):
Kills: 0 / 3 (0%)
Items: 1 / 1 (100%)
Secrets: 1 / 1 (100%)
===========================================
MAP25
===========================================
Time: 0:14 (par: 2:30)
Player 1 (Green):
Kills: 0 / 1 (0%)
Items: 1 / 1 (100%)
Secrets: 1 / 1 (100%)
===========================================
MAP26
===========================================
Time: 0:43 (par: 5:00)
Player 1 (Green):
Kills: 0 / 2 (0%)
Items: 1 / 1 (100%)
Secrets: 1 / 1 (100%)
===========================================
MAP27
===========================================
Time: 0:27 (par: 5:30)
Player 1 (Green):
Kills: 0 / 3 (0%)
Items: 0 / 1 (0%)
Secrets: 1 / 1 (100%)
===========================================
MAP28
===========================================
Time: 0:59 (par: 7:00)
Player 1 (Green):
Kills: 4 / 4 (100%)
Items: 2 / 2 (100%)
Secrets: 1 / 1 (100%)
===========================================
MAP29
===========================================
Time: 0:19 (par: 5:00)
Player 1 (Green):
Kills: 2 / 2 (100%)
Items: 1 / 1 (100%)
Secrets: 1 / 1 (100%)
===========================================
MAP30
===========================================
Time: 1:01 (par: 3:00)
Player 1 (Green):
Kills: 124 / 124 (100%)
Items: 1 / 1 (100%)
Secrets: 1 / 1 (100%)

View File

@ -0,0 +1,352 @@
===========================================
MAP01
===========================================
Time: 2:00 (par: 0:30)
Player 1 (Green):
Kills: 42 / 108 (38%)
Items: 9 / 66 (13%)
Secrets: 1 / 1 (100%)
===========================================
MAP02
===========================================
Time: 3:13 (par: 1:30)
Player 1 (Green):
Kills: 59 / 160 (36%)
Items: 4 / 67 (5%)
Secrets: 3 / 7 (42%)
===========================================
MAP03
===========================================
Time: 4:20 (par: 2:00)
Player 1 (Green):
Kills: 76 / 242 (31%)
Items: 27 / 57 (47%)
Secrets: 0 / 11 (0%)
===========================================
MAP04
===========================================
Time: 3:05 (par: 2:00)
Player 1 (Green):
Kills: 52 / 240 (21%)
Items: 3 / 10 (30%)
Secrets: 1 / 4 (25%)
===========================================
MAP05
===========================================
Time: 3:14 (par: 1:30)
Player 1 (Green):
Kills: 62 / 149 (41%)
Items: 4 / 11 (36%)
Secrets: 0 / 4 (0%)
===========================================
MAP06
===========================================
Time: 3:30 (par: 2:30)
Player 1 (Green):
Kills: 72 / 164 (43%)
Items: 11 / 74 (14%)
Secrets: 2 / 3 (66%)
===========================================
MAP07
===========================================
Time: 4:57 (par: 2:00)
Player 1 (Green):
Kills: 100 / 142 (70%)
Items: 33 / 50 (66%)
Secrets: 1 / 4 (25%)
===========================================
MAP08
===========================================
Time: 3:15 (par: 2:00)
Player 1 (Green):
Kills: 61 / 162 (37%)
Items: 7 / 21 (33%)
Secrets: 0 / 1 (0%)
===========================================
MAP09
===========================================
Time: 3:44 (par: 4:30)
Player 1 (Green):
Kills: 74 / 233 (31%)
Items: 3 / 6 (50%)
Secrets: 1 / 1 (100%)
===========================================
MAP10
===========================================
Time: 2:02 (par: 1:30)
Player 1 (Green):
Kills: 66 / 231 (28%)
Items: 1 / 10 (10%)
Secrets: 4 / 6 (66%)
===========================================
MAP11
===========================================
Time: 5:55 (par: 3:30)
Player 1 (Green):
Kills: 134 / 279 (48%)
Items: 2 / 8 (25%)
Secrets: 1 / 11 (9%)
===========================================
MAP12
===========================================
Time: 7:47 (par: 2:30)
Player 1 (Green):
Kills: 91 / 232 (39%)
Items: 3 / 7 (42%)
Secrets: 1 / 4 (25%)
===========================================
MAP13
===========================================
Time: 0:09 (par: 2:30)
Player 1 (Green):
Kills: 1 / 5 (20%)
Items: 1 / 1 (100%)
Secrets: 1 / 1 (100%)
===========================================
MAP14
===========================================
Time: 0:11 (par: 2:30)
Player 1 (Green):
Kills: 2 / 129 (1%)
Items: 1 / 67 (1%)
Secrets: 0 / 3 (0%)
===========================================
MAP15
===========================================
Time: 6:46 (par: 3:30)
Player 1 (Green):
Kills: 76 / 175 (43%)
Items: 4 / 16 (25%)
Secrets: 3 / 3 (100%)
===========================================
MAP31
===========================================
Time: 2:27 (par: 2:00)
Player 1 (Green):
Kills: 33 / 173 (19%)
Items: 4 / 21 (19%)
Secrets: 1 / 3 (33%)
===========================================
MAP32
===========================================
Time: 3:49 (par: 0:30)
Player 1 (Green):
Kills: 50 / 143 (34%)
Items: 1 / 12 (8%)
Secrets: 3 / 9 (33%)
===========================================
MAP16
===========================================
Time: 3:01 (par: 2:30)
Player 1 (Green):
Kills: 76 / 143 (53%)
Items: 7 / 66 (10%)
Secrets: 1 / 2 (50%)
===========================================
MAP17
===========================================
Time: 3:31 (par: 7:00)
Player 1 (Green):
Kills: 52 / 88 (59%)
Items: 4 / 7 (57%)
Secrets: 2 / 2 (100%)
===========================================
MAP18
===========================================
Time: 3:23 (par: 2:30)
Player 1 (Green):
Kills: 66 / 88 (75%)
Items: 4 / 29 (13%)
Secrets: 1 / 2 (50%)
===========================================
MAP19
===========================================
Time: 7:30 (par: 3:30)
Player 1 (Green):
Kills: 116 / 279 (41%)
Items: 2 / 8 (25%)
Secrets: 1 / 6 (16%)
===========================================
MAP20
===========================================
Time: 4:43 (par: 2:30)
Player 1 (Green):
Kills: 59 / 276 (21%)
Items: 2 / 14 (14%)
Secrets: 0 / 11 (0%)
===========================================
MAP21
===========================================
Time: 3:09 (par: 4:00)
Player 1 (Green):
Kills: 55 / 102 (53%)
Items: 9 / 11 (81%)
Secrets: 1 / 2 (50%)
===========================================
MAP22
===========================================
Time: 1:35 (par: 2:30)
Player 1 (Green):
Kills: 16 / 249 (6%)
Items: 1 / 11 (9%)
Secrets: 1 / 5 (20%)
===========================================
MAP23
===========================================
Time: 4:36 (par: 3:00)
Player 1 (Green):
Kills: 88 / 196 (44%)
Items: 2 / 5 (40%)
Secrets: 0 / 3 (0%)
===========================================
MAP24
===========================================
Time: 8:05 (par: 2:30)
Player 1 (Green):
Kills: 129 / 325 (39%)
Items: 4 / 11 (36%)
Secrets: 2 / 3 (66%)
===========================================
MAP25
===========================================
Time: 11:01 (par: 2:30)
Player 1 (Green):
Kills: 169 / 208 (81%)
Items: 4 / 13 (30%)
Secrets: 0 / 3 (0%)
===========================================
MAP26
===========================================
Time: 9:51 (par: 5:00)
Player 1 (Green):
Kills: 204 / 335 (60%)
Items: 14 / 23 (60%)
Secrets: 1 / 3 (33%)
===========================================
MAP27
===========================================
Time: 1:55 (par: 5:30)
Player 1 (Green):
Kills: 11 / 250 (4%)
Items: 3 / 16 (18%)
Secrets: 0 / 6 (0%)
===========================================
MAP28
===========================================
Time: 4:53 (par: 7:00)
Player 1 (Green):
Kills: 67 / 101 (66%)
Items: 5 / 9 (55%)
Secrets: 1 / 1 (100%)
===========================================
MAP29
===========================================
Time: 8:44 (par: 5:00)
Player 1 (Green):
Kills: 165 / 276 (59%)
Items: 2 / 9 (22%)
Secrets: 1 / 7 (14%)
===========================================
MAP30
===========================================
Time: 2:33 (par: 3:00)
Player 1 (Green):
Kills: 9 / 165 (5%)
Items: 2 / 11 (18%)
Secrets: 1 / 8 (12%)

352
demotest/expected/gd.txt Normal file
View File

@ -0,0 +1,352 @@
===========================================
MAP01
===========================================
Time: 1:10 (par: 0:30)
Player 1 (Green):
Kills: 92 / 92 (100%)
Items: 8 / 8 (100%)
Secrets: 0
===========================================
MAP02
===========================================
Time: 2:12 (par: 1:30)
Player 1 (Green):
Kills: 120 / 120 (100%)
Items: 13 / 14 (92%)
Secrets: 1 / 1 (100%)
===========================================
MAP03
===========================================
Time: 3:06 (par: 2:00)
Player 1 (Green):
Kills: 82 / 82 (100%)
Items: 30 / 30 (100%)
Secrets: 0
===========================================
MAP04
===========================================
Time: 2:59 (par: 2:00)
Player 1 (Green):
Kills: 126 / 126 (100%)
Items: 2 / 2 (100%)
Secrets: 1 / 1 (100%)
===========================================
MAP05
===========================================
Time: 2:45 (par: 1:30)
Player 1 (Green):
Kills: 147 / 147 (100%)
Items: 3 / 3 (100%)
Secrets: 3 / 3 (100%)
===========================================
MAP06
===========================================
Time: 3:12 (par: 2:30)
Player 1 (Green):
Kills: 169 / 169 (100%)
Items: 52 / 52 (100%)
Secrets: 2 / 2 (100%)
===========================================
MAP07
===========================================
Time: 1:51 (par: 2:00)
Player 1 (Green):
Kills: 75 / 75 (100%)
Items: 2 / 2 (100%)
Secrets: 0
===========================================
MAP08
===========================================
Time: 1:49 (par: 2:00)
Player 1 (Green):
Kills: 19 / 17 (111%)
Items: 1 / 1 (100%)
Secrets: 1 / 1 (100%)
===========================================
MAP09
===========================================
Time: 2:40 (par: 4:30)
Player 1 (Green):
Kills: 108 / 99 (109%)
Items: 2 / 3 (66%)
Secrets: 1 / 1 (100%)
===========================================
MAP10
===========================================
Time: 3:18 (par: 1:30)
Player 1 (Green):
Kills: 196 / 165 (118%)
Items: 10 / 11 (90%)
Secrets: 1 / 1 (100%)
===========================================
MAP11
===========================================
Time: 2:14 (par: 3:30)
Player 1 (Green):
Kills: 106 / 106 (100%)
Items: 3 / 3 (100%)
Secrets: 1 / 1 (100%)
===========================================
MAP12
===========================================
Time: 2:59 (par: 2:30)
Player 1 (Green):
Kills: 179 / 176 (101%)
Items: 2 / 3 (66%)
Secrets: 0
===========================================
MAP13
===========================================
Time: 4:31 (par: 2:30)
Player 1 (Green):
Kills: 264 / 260 (101%)
Items: 22 / 26 (84%)
Secrets: 2 / 2 (100%)
===========================================
MAP14
===========================================
Time: 6:20 (par: 2:30)
Player 1 (Green):
Kills: 262 / 248 (105%)
Items: 2 / 3 (66%)
Secrets: 2 / 2 (100%)
===========================================
MAP15
===========================================
Time: 3:04 (par: 3:30)
Player 1 (Green):
Kills: 209 / 187 (111%)
Items: 28 / 30 (93%)
Secrets: 4 / 4 (100%)
===========================================
MAP31
===========================================
Time: 4:13 (par: 2:00)
Player 1 (Green):
Kills: 230 / 224 (102%)
Items: 3 / 4 (75%)
Secrets: 1 / 1 (100%)
===========================================
MAP32
===========================================
Time: 4:37 (par: 0:30)
Player 1 (Green):
Kills: 354 / 354 (-85%)
Items: 4 / 6 (66%)
Secrets: 1 / 1 (100%)
===========================================
MAP16
===========================================
Time: 3:17 (par: 2:30)
Player 1 (Green):
Kills: 333 / 331 (-97%)
Items: 4 / 4 (100%)
Secrets: 2 / 2 (100%)
===========================================
MAP17
===========================================
Time: 3:11 (par: 7:00)
Player 1 (Green):
Kills: 311 / 273 (113%)
Items: 5 / 5 (100%)
Secrets: 3 / 3 (100%)
===========================================
MAP18
===========================================
Time: 3:54 (par: 2:30)
Player 1 (Green):
Kills: 165 / 165 (100%)
Items: 43 / 54 (79%)
Secrets: 2 / 2 (100%)
===========================================
MAP19
===========================================
Time: 5:13 (par: 3:30)
Player 1 (Green):
Kills: 200 / 200 (100%)
Items: 32 / 45 (71%)
Secrets: 8 / 8 (100%)
===========================================
MAP20
===========================================
Time: 3:38 (par: 2:30)
Player 1 (Green):
Kills: 554 / 554 (-18%)
Items: 3 / 3 (100%)
Secrets: 2 / 2 (100%)
===========================================
MAP21
===========================================
Time: 3:47 (par: 4:00)
Player 1 (Green):
Kills: 134 / 134 (100%)
Items: 4 / 5 (80%)
Secrets: 0
===========================================
MAP22
===========================================
Time: 4:54 (par: 2:30)
Player 1 (Green):
Kills: 184 / 175 (105%)
Items: 2 / 3 (66%)
Secrets: 3 / 3 (100%)
===========================================
MAP23
===========================================
Time: 8:13 (par: 3:00)
Player 1 (Green):
Kills: 267 / 230 (116%)
Items: 26 / 35 (74%)
Secrets: 2 / 2 (100%)
===========================================
MAP24
===========================================
Time: 4:51 (par: 2:30)
Player 1 (Green):
Kills: 576 / 576 (-13%)
Items: 3 / 3 (100%)
Secrets: 0
===========================================
MAP25
===========================================
Time: 4:47 (par: 2:30)
Player 1 (Green):
Kills: 122 / 106 (115%)
Items: 2 / 4 (50%)
Secrets: 1 / 1 (100%)
===========================================
MAP26
===========================================
Time: 3:05 (par: 5:00)
Player 1 (Green):
Kills: 123 / 122 (100%)
Items: 2 / 2 (100%)
Secrets: 1 / 1 (100%)
===========================================
MAP27
===========================================
Time: 2:37 (par: 5:30)
Player 1 (Green):
Kills: 389 / 389 (-68%)
Items: 4 / 5 (80%)
Secrets: 1 / 1 (100%)
===========================================
MAP28
===========================================
Time: 4:31 (par: 7:00)
Player 1 (Green):
Kills: 1192 / 1143 (-10%)
Items: 7 / 9 (77%)
Secrets: 1 / 1 (100%)
===========================================
MAP29
===========================================
Time: 1:53 (par: 5:00)
Player 1 (Green):
Kills: 214 / 196 (109%)
Items: 2 / 3 (66%)
Secrets: 0
===========================================
MAP30
===========================================
Time: 1:35 (par: 3:00)
Player 1 (Green):
Kills: 0
Items: 0 / 3 (0%)
Secrets: 0

352
demotest/expected/pl2.txt Normal file
View File

@ -0,0 +1,352 @@
===========================================
MAP01
===========================================
Time: 0:36 (par: 0:30)
Player 1 (Green):
Kills: 3 / 48 (6%)
Items: 2 / 26 (7%)
Secrets: 0 / 2 (0%)
===========================================
MAP02
===========================================
Time: 0:45 (par: 1:30)
Player 1 (Green):
Kills: 17 / 113 (15%)
Items: 2 / 8 (25%)
Secrets: 0 / 2 (0%)
===========================================
MAP03
===========================================
Time: 0:28 (par: 2:00)
Player 1 (Green):
Kills: 8 / 124 (6%)
Items: 1 / 74 (1%)
Secrets: 0 / 1 (0%)
===========================================
MAP04
===========================================
Time: 1:02 (par: 2:00)
Player 1 (Green):
Kills: 9 / 58 (15%)
Items: 0 / 9 (0%)
Secrets: 0 / 1 (0%)
===========================================
MAP05
===========================================
Time: 2:57 (par: 1:30)
Player 1 (Green):
Kills: 77 / 131 (58%)
Items: 2 / 3 (66%)
Secrets: 0 / 1 (0%)
===========================================
MAP06
===========================================
Time: 1:33 (par: 2:30)
Player 1 (Green):
Kills: 21 / 130 (16%)
Items: 9 / 140 (6%)
Secrets: 2 / 5 (40%)
===========================================
MAP07
===========================================
Time: 0:35 (par: 2:00)
Player 1 (Green):
Kills: 6 / 65 (9%)
Items: 2 / 3 (66%)
Secrets: 1 / 1 (100%)
===========================================
MAP08
===========================================
Time: 0:52 (par: 2:00)
Player 1 (Green):
Kills: 17 / 69 (24%)
Items: 1 / 22 (4%)
Secrets: 0 / 2 (0%)
===========================================
MAP09
===========================================
Time: 0:59 (par: 4:30)
Player 1 (Green):
Kills: 20 / 153 (13%)
Items: 2 / 45 (4%)
Secrets: 1 / 2 (50%)
===========================================
MAP10
===========================================
Time: 1:25 (par: 1:30)
Player 1 (Green):
Kills: 27 / 123 (21%)
Items: 0 / 9 (0%)
Secrets: 1 / 5 (20%)
===========================================
MAP11
===========================================
Time: 1:53 (par: 3:30)
Player 1 (Green):
Kills: 13 / 64 (20%)
Items: 2 / 61 (3%)
Secrets: 0 / 2 (0%)
===========================================
MAP12
===========================================
Time: 1:48 (par: 2:30)
Player 1 (Green):
Kills: 41 / 101 (40%)
Items: 2 / 4 (50%)
Secrets: 1 / 3 (33%)
===========================================
MAP13
===========================================
Time: 2:21 (par: 2:30)
Player 1 (Green):
Kills: 51 / 239 (21%)
Items: 5 / 45 (11%)
Secrets: 0 / 4 (0%)
===========================================
MAP14
===========================================
Time: 1:53 (par: 2:30)
Player 1 (Green):
Kills: 49 / 85 (57%)
Items: 2 / 4 (50%)
Secrets: 3 / 7 (42%)
===========================================
MAP15
===========================================
Time: 2:31 (par: 3:30)
Player 1 (Green):
Kills: 37 / 45 (82%)
Items: 2 / 3 (66%)
Secrets: 2 / 3 (66%)
===========================================
MAP31
===========================================
Time: 4:03 (par: 2:00)
Player 1 (Green):
Kills: 51 / 73 (69%)
Items: 4 / 4 (100%)
Secrets: 3 / 3 (100%)
===========================================
MAP32
===========================================
Time: 2:32 (par: 0:30)
Player 1 (Green):
Kills: 142 / 271 (52%)
Items: 4 / 15 (26%)
Secrets: 0 / 1 (0%)
===========================================
MAP16
===========================================
Time: 5:18 (par: 2:30)
Player 1 (Green):
Kills: 117 / 134 (87%)
Items: 21 / 23 (91%)
Secrets: 1 / 2 (50%)
===========================================
MAP17
===========================================
Time: 1:17 (par: 7:00)
Player 1 (Green):
Kills: 28 / 283 (9%)
Items: 2 / 37 (5%)
Secrets: 0 / 3 (0%)
===========================================
MAP18
===========================================
Time: 2:18 (par: 2:30)
Player 1 (Green):
Kills: 66 / 193 (34%)
Items: 1 / 37 (2%)
Secrets: 1 / 1 (100%)
===========================================
MAP19
===========================================
Time: 1:11 (par: 3:30)
Player 1 (Green):
Kills: 9 / 90 (10%)
Items: 2 / 3 (66%)
Secrets: 0 / 3 (0%)
===========================================
MAP20
===========================================
Time: 3:27 (par: 2:30)
Player 1 (Green):
Kills: 116 / 224 (51%)
Items: 5 / 12 (41%)
Secrets: 1 / 2 (50%)
===========================================
MAP21
===========================================
Time: 1:31 (par: 4:00)
Player 1 (Green):
Kills: 24 / 168 (14%)
Items: 2 / 28 (7%)
Secrets: 0 / 2 (0%)
===========================================
MAP22
===========================================
Time: 1:14 (par: 2:30)
Player 1 (Green):
Kills: 28 / 146 (19%)
Items: 4 / 8 (50%)
Secrets: 0 / 1 (0%)
===========================================
MAP23
===========================================
Time: 1:54 (par: 3:00)
Player 1 (Green):
Kills: 86 / 240 (35%)
Items: 9 / 56 (16%)
Secrets: 0 / 5 (0%)
===========================================
MAP24
===========================================
Time: 1:00 (par: 2:30)
Player 1 (Green):
Kills: 12 / 75 (16%)
Items: 0 / 4 (0%)
Secrets: 0 / 2 (0%)
===========================================
MAP25
===========================================
Time: 5:55 (par: 2:30)
Player 1 (Green):
Kills: 126 / 212 (59%)
Items: 3 / 34 (8%)
Secrets: 1 / 1 (100%)
===========================================
MAP26
===========================================
Time: 4:58 (par: 5:00)
Player 1 (Green):
Kills: 77 / 107 (71%)
Items: 15 / 23 (65%)
Secrets: 4 / 4 (100%)
===========================================
MAP27
===========================================
Time: 2:54 (par: 5:30)
Player 1 (Green):
Kills: 80 / 126 (63%)
Items: 3 / 4 (75%)
Secrets: 2 / 4 (50%)
===========================================
MAP28
===========================================
Time: 1:58 (par: 7:00)
Player 1 (Green):
Kills: 48 / 237 (20%)
Items: 2 / 12 (16%)
Secrets: 1 / 6 (16%)
===========================================
MAP29
===========================================
Time: 0:54 (par: 5:00)
Player 1 (Green):
Kills: 7 / 267 (2%)
Items: 9 / 84 (10%)
Secrets: 0 / 1 (0%)
===========================================
MAP30
===========================================
Time: 1:02 (par: 3:00)
Player 1 (Green):
Kills: 7 / 4 (175%)
Items: 2 / 4 (50%)
Secrets: 0 / 1 (0%)

4
demotest/extract/.gitignore vendored Normal file
View File

@ -0,0 +1,4 @@
# Ignore everything in this directory
*
# Except this file
!.gitignore

BIN
demotest/miniwad.zip Normal file

Binary file not shown.

4
demotest/output/.gitignore vendored Normal file
View File

@ -0,0 +1,4 @@
# Ignore everything in this directory
*
# Except this file
!.gitignore

View File

@ -116,6 +116,14 @@ void I_InitPrintf(void)
if (M_ParmExists("-verbose") || M_ParmExists("--verbose"))
verbosity = VB_MAX;
//!
//
// Print with minimum verbosity.
//
if (M_ParmExists("-quiet") || M_ParmExists("--quiet"))
verbosity = VB_ERROR;
I_AtExit(I_ShutdownPrintf, true);
}

View File

@ -16,6 +16,11 @@
//
//-----------------------------------------------------------------------------
#ifdef _WIN32
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#endif
#include <stdio.h>
#include "SDL.h"
@ -150,7 +155,11 @@ void I_SafeExit(int rc)
}
}
exit(rc);
#ifdef WIN_LAUNCHER
ExitProcess(rc);
#else
exit(rc);
#endif
}
//

View File

@ -49,6 +49,7 @@ static const char *params[] = {
"-shorttics",
"-strict",
"-nogui",
"-quiet",
};
static const char *params_with_args[] = {