From 4842bc724c07ab1bcb853347f661bb148a7fdfc1 Mon Sep 17 00:00:00 2001 From: Vladimir Chebotarev Date: Tue, 14 May 2024 10:05:30 +0300 Subject: [PATCH] Fixed duplicates in `U.EXE`, added simple test (#26) --- .dockerignore | 3 +++ Dockerfile | 3 ++- docker-compose.yml | 1 + patches/bad-references.json | 24 +++++++++++++++++++ screenshots/U/exit.png | Bin 0 -> 1191 bytes screenshots/U/menu.png | Bin 0 -> 8905 bytes testbox | 2 +- tests/__init__.py | 45 ++++++++++++++++++++++++++++++++++++ tests/test_end.py | 12 +++------- tests/test_game.py | 5 +--- tests/test_install.py | 43 +++------------------------------- tests/test_u.py | 33 ++++++++++++++++++++++---- tools/RK211.COM | Bin 0 -> 30956 bytes tools/duplicates.py | 2 +- 14 files changed, 112 insertions(+), 61 deletions(-) create mode 100644 .dockerignore create mode 100644 screenshots/U/exit.png create mode 100644 screenshots/U/menu.png create mode 100644 tools/RK211.COM diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 00000000..d8b530a2 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,3 @@ +.dockerignore +Dockerfile +docker-compose.yml diff --git a/Dockerfile b/Dockerfile index dc92f59b..38543404 100644 --- a/Dockerfile +++ b/Dockerfile @@ -12,9 +12,10 @@ RUN python3 -m tools.build RUN unzip UltimaVI-ru.zip RUN rm UltimaVI-ru.zip RUN mv UltimaVI-ru/* . -RUN rm -rf UltimaVI-ru +RUN rmdir UltimaVI-ru COPY tools/RK.COM . +COPY tools/RK211.COM . COPY tools/RUSSIAN.RK . COPY tools/8X16.RK . diff --git a/docker-compose.yml b/docker-compose.yml index 87fe150d..eb77d152 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -8,6 +8,7 @@ services: test: build: . + pull_policy: build environment: - DISPLAY volumes: diff --git a/patches/bad-references.json b/patches/bad-references.json index ce7f7cf0..c9f14b16 100644 --- a/patches/bad-references.json +++ b/patches/bad-references.json @@ -14,6 +14,30 @@ 38281 ] }, + { + "source": "U.EXE", + "offset": 92153, + "bad-references": [ + 109972 + ] + }, + { + "source": "U.EXE", + "offset": 92158, + "bad-references": [ + 109976, + 109980, + 109984 + ] + }, + { + "source": "U.EXE", + "offset": 92318, + "bad-references": [ + 73438, + 73440 + ] + }, { "source": "U.EXE", "offset": 94748, diff --git a/screenshots/U/exit.png b/screenshots/U/exit.png new file mode 100644 index 0000000000000000000000000000000000000000..9490377020eb5fccec651d3d807207d484c5443e GIT binary patch literal 1191 zcmds0QH$JE6#m+dFkQMOlu;MSLxemmGQy|>4mb~+ve8DIvQrx{!dSB$ipCcSV}4p_F=#vQy6fdWjH3Q#sA6W#tHf$Z;8rnBstZhnyaDb!tf@2_%4kDGC!5JQN%h844x}8VVBP8Tko05p@G< z-6m;30wb7&_7trNG!IP&GDF=&MT00&*q!@k>b4U{kNR53n!!%P>&Qc+-q))=wcKfl zEs0lZYqc`BE}Wv6$R~1$xcO5p5PfOV0 za^|(dzr@m_GoS0pRGlP>A4%@GI`GSEU$kt&V0^Pvk~FR&of67Lu2je-knx|U^MiwQ zG)_D(8VSCX0CDXpUpnTwz4T*{NU?9 z@4a$*SKv0JAAY3ImN$i!k5=Ei{?e0gYj-!^y7k24GT`^o_WZAxA6)vd+qn8`@bSIZ zuQYFcyYb?kuP&Y3x+?zh+?&Fe4}U408%me&Y%E{+ZF%OxQwLYRnDV3hH{Mx(zFqy~ s^zs=0=(}&MyRYv4ck2H*dhpZA_m_`fe|YBS`#DNQKEHYU?7O|c0nUi26aWAK literal 0 HcmV?d00001 diff --git a/screenshots/U/menu.png b/screenshots/U/menu.png new file mode 100644 index 0000000000000000000000000000000000000000..1f9f1a4a70d2d17a9b0ef663f625ce8a6c01891b GIT binary patch literal 8905 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

;pnY`kG)CsYK;rRU2z4!?W> zHjux@8t$JzziFwyUg3bVGwjZWAD>I+@N&XCcUtbz^;4(sTvwfoUz0$J_^6%yK{>x{ z=LzFHH_G0}2AcO480WbHC*X+9M}|KbqZwf7!xFOlEw>^#Px{h4=cDtK^ENc!fG_lD z?zRNAl*!8G4RTibm^RRS1S*ij`CMATL&jwjV6K-LlcZ%y(pt$jZ>|j(}u*;;u|G z5jRQaB$NNBNxfO|Sr1z*ZEaa237I^3)RbP+coe<@hX3d{lW&Dkc(2~i;ys~gfKN0V zuJZY2kUP)wETJ=D#Kfx8;=YJU{P?!WWueD|>0{i;I`{e|l@ISE=u+s@_*7r?z!uT>MkP zS*Jfd8BzJlv8O&+=(gd^n9?)T%f6aFV(}-3R~%a8Gtl`G|I>51e*bv)kjvTV)PpmY zK9K*>griPJHX6N}$MvRPExo$)yZ2AGbQFfU-ppF|;c?9y5uZ-}WP#5wl`kc|TKw>d z<)&&Ibaof@(`Ci{Gl{o2n7$DZ^&-R}2!_eZ~Gee8VpcDVcB{Cz*_ zyIu0l@-?f&eoN_E*z>{px3|q4=brf0hMO<_Wq!Qnv(%y|&iL+nbM<$U<%j&(=FI&& zo+OJN`|+J8{xLN(_|=umM(1BGI^_IU=g)t6xzXh>J#Qzqo%e zOV8}S_XD3^{dmu)i1Nwt`;$|=js0s}wwso0dSTk(FUMEC>^Dx*5QDbmk)a;=QnsI+FPSCTO&aEW|3T2<16xjy9(}2YtG`y*L?l5i K_>Bt#-2VbdFl%=J literal 0 HcmV?d00001 diff --git a/tools/duplicates.py b/tools/duplicates.py index b03c8389..1ace8fab 100644 --- a/tools/duplicates.py +++ b/tools/duplicates.py @@ -19,4 +19,4 @@ for k, v in references.items(): if len(v) > 1: - print('WARNING', k[0], k[1], len(v), 'references') + print('WARNING', k[0], hex(k[1]), len(v), 'references:', ', '.join((hex(x['origin']) for x in v)))