OS And Classic Arcade Games

Published: Dec 31, 2024 by Isaac Johnson

I wanted to find some of the classic Shareware and Arcade games of my past. Today we’ll cover a few ways to find and run games. We’ll show examples with BurgerTime and Doom. We’ll look at more than one way to run Commander Keen. I hope everyone finds at least some game they can play and enjoy - I sure did.

Let’s dig in first on where we can find some games and game runners.

OS Games

Let’s clone the repo

builder@LuiGi:~/Workspaces$ git clone https://github.com/opengaming/osgameclones.git
Cloning into 'osgameclones'...
remote: Enumerating objects: 16569, done.
remote: Counting objects: 100% (904/904), done.
remote: Compressing objects: 100% (575/575), done.
remote: Total 16569 (delta 628), reused 329 (delta 329), pack-reused 15665 (from 5)
Receiving objects: 100% (16569/16569), 5.91 MiB | 4.45 MiB/s, done.
Resolving deltas: 100% (11481/11481), done.
builder@LuiGi:~/Workspaces$ cd osgameclones/

Then we can build a container image

builder@LuiGi:~/Workspaces/osgameclones$ make docker-build
docker build -t opengaming/osgameclones .
[+] Building 96.2s (20/20) FINISHED                                                                                                                 docker:default
 => [internal] load build definition from Dockerfile                                                                                                          0.1s
 => => transferring dockerfile: 515B                                                                                                                          0.0s
 => [internal] load metadata for docker.io/library/nginx:1.27.2-alpine                                                                                        2.0s
 => [internal] load metadata for docker.io/library/alpine:latest                                                                                              2.1s
 => [internal] load .dockerignore                                                                                                                             0.1s
 => => transferring context: 45B                                                                                                                              0.0s
 => [builder  1/10] FROM docker.io/library/alpine:latest@sha256:21dc6063fd678b478f57c0e13f47560d0ea4eeba26dfc947b2a4f81f686b9f45                              2.2s
 => => resolve docker.io/library/alpine:latest@sha256:21dc6063fd678b478f57c0e13f47560d0ea4eeba26dfc947b2a4f81f686b9f45                                        0.1s
 => => sha256:21dc6063fd678b478f57c0e13f47560d0ea4eeba26dfc947b2a4f81f686b9f45 9.22kB / 9.22kB                                                                0.0s
 => => sha256:2c43f33bd1502ec7818bce9eea60e062d04eeadc4aa31cad9dabecb1e48b647b 1.02kB / 1.02kB                                                                0.0s
 => => sha256:4048db5d36726e313ab8f7ffccf2362a34cba69e4cdd49119713483a68641fce 581B / 581B                                                                    0.0s
 => => sha256:38a8310d387e375e0ec6fabe047a9149e8eb214073db9f461fee6251fd936a75 3.64MB / 3.64MB                                                                1.8s
 => => extracting sha256:38a8310d387e375e0ec6fabe047a9149e8eb214073db9f461fee6251fd936a75                                                                     0.1s
 => [internal] load build context                                                                                                                             0.1s
 => => transferring context: 1.09MB                                                                                                                           0.0s
 => [stage-1 1/4] FROM docker.io/library/nginx:1.27.2-alpine@sha256:74175cf34632e88c6cfe206897cbfe2d2fecf9bf033c40e7f9775a3689e8adc7                          7.4s
 => => resolve docker.io/library/nginx:1.27.2-alpine@sha256:74175cf34632e88c6cfe206897cbfe2d2fecf9bf033c40e7f9775a3689e8adc7                                  0.1s
 => => sha256:d213b2a02ef4e7ec85882e8955343cdd08ab49d6548995ad18623f47017c65ee 2.50kB / 2.50kB                                                                0.0s
 => => sha256:a5967740120f9a30029392fe9c47961962888cc48e6c4b47025b1f2b964ffbb6 11.25kB / 11.25kB                                                              0.0s
 => => sha256:da9db072f522755cbeb85be2b3f84059b70571b229512f1571d9217b77e1087f 3.62MB / 3.62MB                                                                5.8s
 => => sha256:795a89dcc4f004d517a7834a19e066200cda1a9d8258bfbca3d9410259261053 4.04MB / 4.04MB                                                                1.8s
 => => sha256:74175cf34632e88c6cfe206897cbfe2d2fecf9bf033c40e7f9775a3689e8adc7 9.07kB / 9.07kB                                                                0.0s
 => => sha256:85e8836903ab0b0428bee291efed146b37ed4aee8b378e7a2b2fb8ad407c9947 955B / 955B                                                                    2.1s
 => => sha256:9ad567d3b8a2ca8d6e3cbd00b3b78feafbb1c7e7e2ce1492648ea01cdd06d50d 629B / 629B                                                                    2.0s
 => => sha256:276e8818f0df64d1efab55dcac66a8ab3073b584adc8e1aeef8b3479f935eb04 404B / 404B                                                                    2.2s
 => => sha256:20212ccf8a7aa043bba568bf8ade4778a0895439cbe76033682d6a05a7ebdd92 1.21kB / 1.21kB                                                                2.4s
 => => sha256:3917e8bc7be0dd282c01911e9c34a9931f7ddcd78d3acfb5b45e3378303840f1 1.40kB / 1.40kB                                                                2.4s
 => => sha256:bcf46b1b1b1496b4acea36cb4fa9d9cef6576a3ead79ee80d8e725d0072564fb 15.10MB / 15.10MB                                                              5.3s
 => => extracting sha256:da9db072f522755cbeb85be2b3f84059b70571b229512f1571d9217b77e1087f                                                                     0.1s
 => => extracting sha256:795a89dcc4f004d517a7834a19e066200cda1a9d8258bfbca3d9410259261053                                                                     0.1s
 => => extracting sha256:9ad567d3b8a2ca8d6e3cbd00b3b78feafbb1c7e7e2ce1492648ea01cdd06d50d                                                                     0.0s
 => => extracting sha256:85e8836903ab0b0428bee291efed146b37ed4aee8b378e7a2b2fb8ad407c9947                                                                     0.0s
 => => extracting sha256:276e8818f0df64d1efab55dcac66a8ab3073b584adc8e1aeef8b3479f935eb04                                                                     0.0s
 => => extracting sha256:20212ccf8a7aa043bba568bf8ade4778a0895439cbe76033682d6a05a7ebdd92                                                                     0.0s
 => => extracting sha256:3917e8bc7be0dd282c01911e9c34a9931f7ddcd78d3acfb5b45e3378303840f1                                                                     0.0s
 => => extracting sha256:bcf46b1b1b1496b4acea36cb4fa9d9cef6576a3ead79ee80d8e725d0072564fb                                                                     0.3s
 => [builder  2/10] RUN mkdir /src /app                                                                                                                       0.4s
 => [builder  3/10] WORKDIR /src                                                                                                                              0.1s
 => [builder  4/10] COPY . /src/                                                                                                                              0.1s
 => [builder  5/10] COPY CHECKS /app/CHECKS                                                                                                                   0.1s
 => [builder  6/10] RUN apk add --no-cache curl make gcc musl-dev libffi-dev python3 python3-dev                                                             36.0s
 => [builder  7/10] RUN env                                                                                                                                   9.7s
 => [builder  8/10] RUN curl -sSL https://install.python-poetry.org | POETRY_HOME=/etc/poetry python3 -                                                      20.4s
 => [builder  9/10] RUN poetry install                                                                                                                       16.3s
 => [builder 10/10] RUN make run                                                                                                                              7.3s
 => [stage-1 2/4] COPY --from=builder /src/_build /www                                                                                                        0.4s
 => [stage-1 3/4] COPY vhost.conf /etc/nginx/conf.d/default.conf                                                                                              0.1s
 => [stage-1 4/4] COPY CHECKS /app/CHECKS                                                                                                                     0.1s
 => exporting to image                                                                                                                                        0.4s
 => => exporting layers                                                                                                                                       0.4s
 => => writing image sha256:705481c06cfeefb4cb8a669fe2db42dacd82f1e54020ea8b95231286ac9814eb                                                                  0.0s
 => => naming to docker.io/opengaming/osgameclones                                                                                                            0.0s

What's Next?
  View a summary of image vulnerabilities and recommendations → docker scout quickview

If you use the default ‘docker-run’

builder@LuiGi:~/Workspaces/osgameclones$ make docker-run
docker rm -f osgameclones-site
osgameclones-site
docker run -d -p80:80 --name osgameclones-site opengaming/osgameclones
5e7998812f214281506ad2e3844ac60a9f15690872e0f2c7685c43b99c913771
docker: Error response from daemon: driver failed programming external connectivity on endpoint osgameclones-site (569524d1bab4d5c7caf39cac145cc2d6f291e7b38bb05932a94b8376cede1307): Bind for 0.0.0.0:80 failed: port is already allocated.
make: *** [Makefile:23: docker-run] Error 125

But we can set it to a different port

$ make docker-run PORT=3000
docker rm -f osgameclones-site
osgameclones-site
docker run -d -p3000:80 --name osgameclones-site opengaming/osgameclones
196acceabc6b56fef2fd04df78a88d87fa8b1fb60dfbb7d498c30bfedf6e4d92

I can the see a list of games

/content/images/2024/12/osgames-01.png

This turned me on to ScummVM which has builds here and an installer for Windows

I installed it

/content/images/2024/12/scummvm-01.png

I can set a check

/content/images/2024/12/scummvm-02.png

I was hoping to play some PSP games, but it seems ScummVM is more about older computer games

There are some demos we can download from https://www.scummvm.org/demos/

/content/images/2024/12/scummvm-03.png

For instance, I setup Myst

/content/images/2024/12/scummvm-04.png

And launched it

/content/images/2024/12/scummvm-05.png

Then had a bit of fun playing it (there was audio, though the screengrab didn’t capture it)

That said, I did want to find a PSP emulator that might work and found one with PPSSPP.

My favourite old game is Lumines and Lumines II.

Another of my old favourites was BurgerTime. I actually tried to get a Colecovision game emulator up and running with a ROM, but found a perfectly playable version on ClassicGamesArcade here

Key 5 to add credits.
1 to start.
Arrows to move.
Ctrl to fire.
P to pause.
The aim is to run across the burger parts so that they fall and make a burger whilst navigating a maze. Also avoid the bad guys like the eggs

I’m not great, but me on the first level.

They have quite a few classics like Joust and Ghostbusters (give that one a few moments to load).

I had one last nostalgic game I wanted to find. Commander Keen. I found Commander Keen: Episode 6: Aliens Ate My Babysitter. I could not just double-click the exe file.

However, I read about using vDOS and DOSBox

I created a folder on C and put the game files there

/content/images/2024/12/dosbox-01.png

I can then mount that folder as an X Drive

/content/images/2024/12/dosbox-02.png

I can then navigate and launch the game

/content/images/2024/12/dosbox-03.png

At first I was worried the SoundBlaster support wasn’t working, but once I launched into the game, I could hear it.

Classic Games via container and browser

Another example of containerizing classic games comes by way of docker-DOS-games

We can clone the repo

builder@LuiGi:~/Workspaces$ git clone https://github.com/bill954/docker-DOS-games.git
Cloning into 'docker-DOS-games'...
remote: Enumerating objects: 416, done.
remote: Counting objects: 100% (4/4), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 416 (delta 0), reused 0 (delta 0), pack-reused 412 (from 1)
Receiving objects: 100% (416/416), 8.15 MiB | 526.00 KiB/s, done.
Resolving deltas: 100% (143/143), done.
builder@LuiGi:~/Workspaces$ cd docker-DOS-games/

Then use docker compose up to launch it via Docker Compose, however I kept getting an error on keen

 => ERROR [keen 5/7] RUN wget -O game.zip https://image.dosgamesarchive.com/games/keen-shr.zip                                                                1.8s
 => CANCELED [doom 5/7] RUN wget -O game.zip https://archive.org/download/DoomsharewareEpisode/doom.ZIP                                                       2.6s
 => CANCELED [cosmo 5/7] RUN wget -O game.zip https://archive.org/download/CosmosCosmicAdventure/CosmosCosmicAdventure-ForbiddenPlanet-Adventure1Of3V1.20sw1  2.6s
 => CANCELED [secretagent 5/7] RUN wget -O game.zip https://archive.org/download/SecretAgent_945/AGENT.ZIP                                                    2.5s
 => CANCELED [mario 1/4] FROM docker.io/library/tomcat:9@sha256:d9f92b415416c22e8ada507179bff7b0cded9687732068906292a6f960b3f917                              1.9s
 => => resolve docker.io/library/tomcat:9@sha256:d9f92b415416c22e8ada507179bff7b0cded9687732068906292a6f960b3f917                                             0.3s
 => => sha256:d9f92b415416c22e8ada507179bff7b0cded9687732068906292a6f960b3f917 6.63kB / 6.63kB                                                                0.0s
 => => sha256:89e9bbcfa697ca9d2056ad0c815e6da943a4356633738d01b99b5faa2ebef7ca 1.05MB / 157.59MB                                                              2.4s
 => => sha256:7d16c2d7e0789f8482816f0579f688db567d381e636db34c6cc60c613df6ceab 2.72kB / 2.72kB                                                                0.0s
 => => sha256:39642322f89a3161f302c3d1e20bb3626fa33153d34866199dbac93d66705a69 12.42kB / 12.42kB                                                              0.0s
 => => sha256:4c2afd91a87d1b2f93bb0c4f021644ade815979248b1f68bcae88b1b2f809336 2.10MB / 22.95MB                                                               2.4s
 => => sha256:11be3e61358234818e215b9d11d1584bb7cf33bbbe329ccff717d555f1be2994 159B / 159B                                                                    0.7s
 => => sha256:1b9d1e181a2a2b6ed242e21c8a4d40d33cf851fd5522737a9aaa8a708d215f94 2.28kB / 2.28kB                                                                1.2s
 => => sha256:fc68c0117916a43e4c38a4eb725889a5345e644c43da821205364b95ba65b9f7 0B / 140B                                                                      2.4s
 => [mario internal] load build context                                                                                                                       0.2s
 => => transferring context: 5.02kB                                                                                                                           0.0s
 => CANCELED [web 2/9] RUN set -x     && addgroup --system --gid 101 nginx     && adduser --system --disabled-login --ingroup nginx --no-create-home --home   2.3s
------
 > [keen 5/7] RUN wget -O game.zip https://image.dosgamesarchive.com/games/keen-shr.zip:
0.794 Connecting to image.dosgamesarchive.com (108.156.107.47:443)
1.796 wget: server returned error: HTTP/1.1 403 Forbidden
------
failed to solve: process "/bin/sh -c wget -O game.zip $GAME_URL" did not complete successfully: exit code: 1
builder@LuiGi:~/Workspaces/docker-DOS-games$ wget https://image.dosgamesarchive.com/games/keen-shr.zip
--2024-12-27 20:27:15--  https://image.dosgamesarchive.com/games/keen-shr.zip
Resolving image.dosgamesarchive.com (image.dosgamesarchive.com)... 108.156.107.37, 108.156.107.47, 108.156.107.5, ...
Connecting to image.dosgamesarchive.com (image.dosgamesarchive.com)|108.156.107.37|:443... connected.
HTTP request sent, awaiting response... 403 Forbidden
2024-12-27 20:27:16 ERROR 403: Forbidden.

I’m not sure why it would wget when they exist in the repo already

builder@LuiGi:~/Workspaces/docker-DOS-games/docker-games/compressed_games$ ls -ltra
total 6652
-rw-r--r-- 1 builder builder  471050 Dec 27 20:21  CosmosCosmicAdventure-ForbiddenPlanet-Adventure1Of3V1.20sw1992apogeeSoftwareLtd.action.zip
-rw-r--r-- 1 builder builder  203467 Dec 27 20:21  keen-shr.zip
-rw-r--r-- 1 builder builder 2431248 Dec 27 20:21  doom.ZIP
-rw-r--r-- 1 builder builder  650032 Dec 27 20:21  SCORCH15.ZIP
-rw-r--r-- 1 builder builder 1351930 Dec 27 20:21 'Prince Of Persia 1.3.zip'
-rw-r--r-- 1 builder builder  355738 Dec 27 20:21  prince_of_persia.zip
-rw-r--r-- 1 builder builder 1312892 Dec 27 20:21  mariohtml5-master.zip
drwxr-xr-x 5 builder builder    4096 Dec 27 20:21  ..
drwxr-xr-x 2 builder builder    4096 Dec 27 20:30  .

I tried to fix the HTML dockerfile but failed on the GPG errors, so i just removed it

However, I did get it up

builder@LuiGi:~/Workspaces/docker-DOS-games$ docker compose up
[+] Running 7/7
 ✔ Network docker-dos-games_default          Created                                                                                                          0.1s
 ✔ Container docker-dos-games-cosmo-1        Created                                                                                                          0.2s
 ✔ Container docker-dos-games-secretagent-1  Created                                                                                                          0.2s
 ✔ Container docker-dos-games-mario-1        Created                                                                                                          0.2s
 ✔ Container docker-dos-games-doom-1         Created                                                                                                          0.2s
 ✔ Container docker-dos-games-prince-1       Created                                                                                                          0.2s
 ✔ Container docker-dos-games-keen-1         Created                                                                                                          0.2s
Attaching to cosmo-1, doom-1, keen-1, mario-1, prince-1, secretagent-1
mario-1        | NOTE: Picked up JDK_JAVA_OPTIONS:  --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
mario-1        | 28-Dec-2024 02:59:44.990 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version name:   Apache Tomcat/9.0.98
mario-1        | 28-Dec-2024 02:59:45.000 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server built:          Dec 5 2024 19:50:29 UTC
mario-1        | 28-Dec-2024 02:59:45.000 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version number: 9.0.98.0
mario-1        | 28-Dec-2024 02:59:45.000 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name:               Linux
mario-1        | 28-Dec-2024 02:59:45.000 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Version:            5.15.167.4-microsoft-standard-WSL2
mario-1        | 28-Dec-2024 02:59:45.000 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Architecture:          amd64
mario-1        | 28-Dec-2024 02:59:45.000 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Java Home:             /opt/java/openjdk
mario-1        | 28-Dec-2024 02:59:45.001 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Version:           21.0.5+11-LTS
mario-1        | 28-Dec-2024 02:59:45.001 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Vendor:            Eclipse Adoptium
mario-1        | 28-Dec-2024 02:59:45.001 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE:         /usr/local/tomcat
mario-1        | 28-Dec-2024 02:59:45.001 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_HOME:         /usr/local/tomcat
mario-1        | 28-Dec-2024 02:59:45.024 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.lang=ALL-UNNAMED
mario-1        | 28-Dec-2024 02:59:45.024 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.io=ALL-UNNAMED
mario-1        | 28-Dec-2024 02:59:45.025 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.util=ALL-UNNAMED
mario-1        | 28-Dec-2024 02:59:45.025 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.util.concurrent=ALL-UNNAMED
mario-1        | 28-Dec-2024 02:59:45.025 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
mario-1        | 28-Dec-2024 02:59:45.025 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties
mario-1        | 28-Dec-2024 02:59:45.026 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
mario-1        | 28-Dec-2024 02:59:45.026 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djdk.tls.ephemeralDHKeySize=2048
mario-1        | 28-Dec-2024 02:59:45.026 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.protocol.handler.pkgs=org.apache.catalina.webresources
mario-1        | 28-Dec-2024 02:59:45.026 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dorg.apache.catalina.security.SecurityListener.UMASK=0027
mario-1        | 28-Dec-2024 02:59:45.026 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dignore.endorsed.dirs=
mario-1        | 28-Dec-2024 02:59:45.027 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.base=/usr/local/tomcat
mario-1        | 28-Dec-2024 02:59:45.027 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.home=/usr/local/tomcat
mario-1        | 28-Dec-2024 02:59:45.027 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.io.tmpdir=/usr/local/tomcat/temp
mario-1        | 28-Dec-2024 02:59:45.038 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent Loaded Apache Tomcat Native library [1.3.1] using APR version [1.7.2].
mario-1        | 28-Dec-2024 02:59:45.039 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true], UDS [true].
mario-1        | 28-Dec-2024 02:59:45.039 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR/OpenSSL configuration: useAprConnector [false], useOpenSSL [true]
mario-1        | 28-Dec-2024 02:59:45.047 INFO [main] org.apache.catalina.core.AprLifecycleListener.initializeSSL OpenSSL successfully initialized [OpenSSL 3.0.13 30 Jan 2024]
mario-1        | 28-Dec-2024 02:59:45.377 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-nio-8080"]
mario-1        | 28-Dec-2024 02:59:45.412 INFO [main] org.apache.catalina.startup.Catalina.load Server initialization in [744] milliseconds
mario-1        | 28-Dec-2024 02:59:45.472 INFO [main] org.apache.catalina.core.StandardService.startInternal Starting service [Catalina]
mario-1        | 28-Dec-2024 02:59:45.472 INFO [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet engine: [Apache Tomcat/9.0.98]
mario-1        | 28-Dec-2024 02:59:45.483 INFO [main] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/usr/local/tomcat/webapps/ROOT]
mario-1        | 28-Dec-2024 02:59:45.749 INFO [main] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/usr/local/tomcat/webapps/ROOT] has finished in [265] ms
mario-1        | 28-Dec-2024 02:59:45.753 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"]
mario-1        | 28-Dec-2024 02:59:45.761 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in [347] milliseconds
prince-1       |  INFO  Accepting connections at http://0.0.0.0:8000
cosmo-1        |  INFO  Accepting connections at http://0.0.0.0:8000
doom-1         |  INFO  Accepting connections at http://0.0.0.0:8000
secretagent-1  |  INFO  Accepting connections at http://0.0.0.0:8000
keen-1         |  INFO  Accepting connections at http://0.0.0.0:8000
doom-1         |  HTTP  12/28/2024 3:00:35 AM 172.24.0.1 GET /
doom-1         |  HTTP  12/28/2024 3:00:35 AM 172.24.0.1 Returned 200 in 49 ms
doom-1         |  HTTP  12/28/2024 3:00:35 AM 172.24.0.1 GET /js-dos.js
doom-1         |  HTTP  12/28/2024 3:00:35 AM 172.24.0.1 Returned 200 in 5 ms
doom-1         |  HTTP  12/28/2024 3:00:35 AM 172.24.0.1 GET /wdosbox.wasm.js
doom-1         |  HTTP  12/28/2024 3:00:35 AM 172.24.0.1 Returned 200 in 11 ms
doom-1         |  HTTP  12/28/2024 3:00:35 AM 172.24.0.1 GET /wdosbox.js
doom-1         |  HTTP  12/28/2024 3:00:35 AM 172.24.0.1 Returned 200 in 2 ms
doom-1         |  HTTP  12/28/2024 3:00:35 AM 172.24.0.1 GET /game.zip
doom-1         |  HTTP  12/28/2024 3:00:35 AM 172.24.0.1 Returned 200 in 10 ms
doom-1         |  HTTP  12/28/2024 3:00:35 AM 172.24.0.1 GET /favicon.ico
doom-1         |  HTTP  12/28/2024 3:00:35 AM 172.24.0.1 Returned 404 in 13 ms

You can see I changed the URL to pull from Github and then removed the Web app

builder@LuiGi:~/Workspaces/docker-DOS-games$ git diff
diff --git a/docker-compose.yml b/docker-compose.yml
index 88bb0e0..9fd958c 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -30,9 +30,4 @@ services:
                 ports:
                         - "86:8080"

-        web:
-                build: docker-games/web_server/debian-nginx-11.21.4/.
-                ports:
-                        - "80:80"
-                volumes:
-                        - ./docker-games/web_server/debian-nginx-11.21.4/html:/usr/share/nginx/html/:cached
+
\ No newline at end of file
diff --git a/docker-games/game_build_files/keen/Dockerfile b/docker-games/game_build_files/keen/Dockerfile
index 34bbe8e..3f0c32f 100644
--- a/docker-games/game_build_files/keen/Dockerfile
+++ b/docker-games/game_build_files/keen/Dockerfile
@@ -8,8 +8,10 @@ RUN wget https://js-dos.com/6.22/current/js-dos.js && \

 RUN npm install -g serve

-ENV GAME_URL=https://image.dosgamesarchive.com/games/keen-shr.zip
+ENV GAME_URL=https://github.com/bill954/docker-DOS-games/raw/refs/heads/main/docker-games/compressed_games/keen-shr.zip
 RUN wget -O game.zip $GAME_URL
+# Removed ENV GAME_URL and wget
+#COPY keen-shr.zip game.zip

 ENV GAME_ARGS=\"KEEN.BAT\"
 COPY html/index.html .

According to the documentation, we should be able to reach the games by different ports when the container is running:

Game http://localhost:
Main website 80
Doom 81
Commander Keen 82
Cosmo 83
Secret Agent 84
Prince of Persia 85
Infinite Mario Bros 86

Let’s see Doom in action:

Or Keen

The rest were all playable as well such as Prince of Persia

/content/images/2024/12/persia-01.png

Or Cosmos Comsic Adeventures: Forbidden Planet

/content/images/2024/12/cosmo-01.png

While there is no maximize, I did find that pinch zoom worked fine in the browser to expand it

/content/images/2024/12/cosmo-02.png

Summary

In this post we covered quite a few ways to play some games using some open-source and free shareware files. We started with the OS Games Clone that creates a local website that lists out man options for games and ROMs. This brought me to ScummVM. While the PSP games didn’t work, I was easily able to launch Myst.

I found PPSSPP, which was a perfectly good PSP emulator that let me play Lumines II. I found ClassicGamesArcade which let me play BurgerTime and others in a browser. They had other great ones like Commander Keen: Episode 6: Aliens Ate My Babysitter, Joust and Ghostbusters.

Finally, we tweaked docker-DOS-games which let us play a few games like a Mario Infinite (which seems like a knockoff), the first Commander Keen and Doom.

This was a fun bit of nostalgia. I think it’s good to take break from heavier topics and programming to occasionally just play some classic games.

OpenSource Gaming Shareware Arcade

Have something to add? Feedback? You can use the feedback form

Isaac Johnson

Isaac Johnson

Cloud Solutions Architect

Isaac is a CSA and DevOps engineer who focuses on cloud migrations and devops processes. He also is a dad to three wonderful daughters (hence the references to Princess King sprinkled throughout the blog).

Theme built by C.S. Rhymes