Here’s How to Host a 90s-Style DOOM LAN Party Using PocketC.H.I.P.

Doom LAN party battle of the Stands: Team Pencil versus Team Pen

Doom LAN party with PocketC.H.I.P.: Team Pencil Stand versus Team Pen Stand

PocketC.H.I.P. is more fun with friends, so call them up and make plans for a 90s-style Doom LAN party!

Following this guide you’ll learn how to setup a Doom server that runs directly on PocketC.H.I.P.. Plus, you’ll learn how to configure PocketC.H.I.P. to provide IP addresses to all your friends’ devices –PocketC.H.I.P., C.H.I.P., or any Doom playing devices (so basically anything).

The best part is no rackmount servers or ethernet wires required. Happy fragging!

1. Setup PocketC.H.I.P. as a WiFi Access Point

Since PocketC.H.I.P. is mobile, you’ll want to be able to have your LAN party anywhere, even if that means far away from your home network. To be this portable, you’ll need to configure one of the PocketC.H.I.P.s involved in the LAN party to provide a basic network infrastructure for the event.

Update the apt package lists and install DNSmasq.
sudo apt update && sudo apt install dnsmasq

Note: DNSmasq is a software package that enables you to set up a small dynamic host protocol (DHCP) network using C.H.I.P..


2. Configure DNSmasq

DNSmasq_config_RocketCHIP

Use the text editor Nano to write a configuration file for DNSmasq.
sudo nano /etc/dnsmasq.d/access_point.conf

Enter the text below into access_point.conf file.

interface=wlan1
except-interface=wlan0
dhcp-range=172.20.0.100,172.20.0.250,1h

Save and quit.

Note: If you feel lost with Nano, check out this great tutorial.


3. Setup a Static IP Address

networkinterface_RocketCHIP

Since you’ll want other devices to connect to your PocketC.H.I.P.’s Doom server, it’s best to configure a static IP address for the device. This way you can tell all your friends the server’s IP address and quickly join the the network game.

You’ll use the PocketC.H.I.P. wlan1 network adapter to handle all of the Doom server networking.
sudo nano /etc/network/interfaces

Populate with the file with following lines of configuration.

source-directory /etc/network/interfaces.d
auto wlan1
iface wlan1 inet static
address 172.20.0.1
netmask 255.255.255.0

Once entered, save and quit Nano.

Note: Static addresses get their name because they don’t change when you reboot. This is opposed to dynamic IP address, which can potentially change on reboot and are typically served by DHCP servers.


4. Start the wlan1 Interface

Use the ifup command to start the wlan1 static IP address. The command reads the configuration file /etc/network/interfaces, which you set up in the previous step.
sudo ifup wlan1

Test that everything worked by typing the following command.
ip addr show wlan1

You should get output showing the IP address of wlan1 is 172.20.0.1. If you don’t, revisit the last step and make sure you input the configuration file correctly.


5. Restart the DHCP server

dnsmasq_restart_RocketCHIP
To provide IP addresses to all of the client devices of your LAN party, you’ll need to setup a DHCP server. DHCP servers dynamically assigns an IP address to any client device that asks for one. In fact, the ‘D’ in DHCP stands for dynamic.

sudo /etc/init.d/dnsmasq restart

Note: When setting up a network where you don’t know the number of devices that will connect to your server, DHCP is a nice way to dynamically handle the problem. The configuration file you wrote in Step 2, permits the DHCP server from giving out IP addresses from 172.20.0.100–172.20.0.250. So, unless your friends bring over 151 WiFi devices to the party, you should have more than enough IP addresses for the DHCP server to assign.

DHCP servers can also configure far more client details than you’re using in this project: things like the route for traffic to get to the internet and which domain name servers to use. That stuff is way beyond the scope of configuration you’ll need for a Doom LAN party server. Here you’ll just need several devices to communicate with each other, not get on the internet.


6. Configure the Access Point on C.H.I.P.

In order for any devices to connect to the PocketC.H.I.P. DHCP server you just configured, you’ll need to broadcast an SSID –just like the one from your home WiFi network.

Here’s how to create a SSID called NTC_LAN_PARTY, fitting for what this whole project is about. Edit the hostapd.conf file by typing:
sudo nano /etc/hostapd.conf

Populate the file with the following text.

interface=wlan1
ssid=NTC_LAN_PARTY
channel=1
ctrl_interface=/var/run/hostapd

Once you’ve saved the file, start the hostapd application, which reads the config file you just made.
sudo hostapd /etc/hostapd.conf

Note: Check out this bbs post for more info about how to add password protection to your wireless network.


7. Write a Systemd HostAPD Configuration

Since you’ll want your access point to work even after a system reboot, edit one more config file and your server will be almost set.
sudo nano /lib/systemd/system/hostapd-systemd.service

Fill the file with the following text.

And finally run these commands to get systemd squared away.
sudo update-rc.d hostapd disable
sudo systemctl daemon-reload
sudo systemctl enable hostapd-systemd
sudo systemctl start hostapd-systemd
systemctl status hostapd-systemd

Note: Systemd is what controls when daemons start and stop in Debian Linux. You can learn more about it on their site.


8. Install Doom

If you don’t already have Doom on your PocketC.H.I.P., open the Terminal and install Doom plus the shareware map files.
sudo apt install prboom doom-wad-shareware

Note: Doom maps use the file extension .WAD and you can find all sorts of them online, many of which are free to use. If you bought a copy of Doom, you can also use the .WAD files that came with the game. But don’t be a pirate, make sure you’re using freeware WAD files or you own the game!


9. PocketC.H.I.P. LAN Party

Once you’ve gotten all the PocketC.H.I.P. Doom server setup, it’s time to have some LAN party fun. On the PocketC.H.I.P. that’s setup as the server, open the Terminal and execute the following command.
prboom-game-server

Then open a new tab in the Terminal using the icon in the top left corner with a plus. This will give you a new terminal session from which to launch the Doom client application. Here’s how you should start the Doom client.
prboom -net 172.20.0.1

On all the other PocketC.H.I.P.s (and non-PocketC.H.I.P. Doom-playing-devices you’re inviting to your party) join the network NTC_LAN_PARTY. Once you have an IP from this network, open the Terminal application and type the following.
prboom -net 172.20.0.1

Note: Careful readers will notice that the IP address used in these command is the one that is statically assigned to the PocketC.H.I.P. server. It makes a lot of sense, you’re telling prboom to look for a server at the IP address where you set it up.

Network Doom will not start until there are at least two clients connected to the server. The client connection from the PocketC.H.I.P. counts as one, so you’ll only need to find one other person in order to have a LAN party.

Note: If anyone quits the game, the Doom server may terminate. On the PocketC.H.I.P. that’s handling all of the server responsibilities, look to see if prboom-game-server has stopped running. You’ll be able to tell this because there will be a flashing rectangular input cursor if the server has quit. Just run the command again and have all your friends join to get it working again.


Get Fragging!

Now that your server is up and running and your friends are on the way, make sure you have plenty of snacks and beverages for hours of fun.

When you do take a break between rounds, snap a picture of your LAN party and share it on Facebook, Twitter, and in our forums. And while you’re there, don’t forget to mention your favorite WAD file!

About the Author

Posted by

I'm busy writing and editing content at Next Thing Co.

Categories:

PocketC.H.I.P.

17 Comments

“Doom maps use the file extension .WAD and you can find all sorts of them online, many of which are free to use. If you bought a copy of Doom, you can also use the .WAD files that came with the game.”

Where will I place my official Doom.WAD files in the Pocket CHIP file architecture? Please be explicit as I am new to Debian and learning on the fly. Thanks

:^)

That’s a great question, Louis. I’ll look into it and get you specifics ASAP.

If you’re interested in learning more about Linux, I’d suggest you check out unixmages.com’s UNIX for the Beginning Mage. It’s a fun, often silly romp designed to teach the command line to beginners.

Though the it’s designed to teach UNIX, much of the material covered is applicable to Debian Linux. That’s because Linux is based on UNIX and uses some of the same tools and utilities. For example, the document covers Bash (the shell environment where you type in commands for the OS to execute). Bash is the exact same shell that runs on C.H.I.P. and PocketC.H.I.P.!

If you do end up using the resource, you can safely skip Chapter 4, since that content isn’t really applicable to C.H.I.P. or PocketC.H.I.P..

Also, make sure to check out our forums and feel empowered to ask for help –everyone is super nice there.

Louis,
On PocketC.H.I.P. the prboom map data, stored in .wad files, are located in the /usr/share/games/doom directory.

Take for example installing Doom 2 for Prboom.
sudo cp doom2.wad /usr/share/games/doom

Then test it out with the following command.
prboom-plus -iwad doom2.wad

You don’t need to specify the full path to the file doom2.wad, since prboom-plus knows to check the /usr/share/games/doom directory for the file.

Note: You can replace doom2.wad in the command above with other .wad files you want to install.

What’s tricky is that there are two types of .wad files and it’s not always clear what you’re dealing with… unhelpfully, both types use the same .wad extension.

IWADs are a complete standalone game, for example doom1.wad and doom2.wad are IWADS.
PWADs provide new textures and level designs, but depend on IWADS.

Let’s say you want to run Scythe 2. It turns out this is a PWAD file and it modifies the Doom2.wad file (which you might recall is an IWAD).

Once you copy the Scythe2.wad to the /usr/share/games/doom/ directly, run the following command to play it.
prboom-plus -iwad doom2.wad -file scythe2.wad

There’s a bit of trial an error to this whole thing, but what’s above should get you started. Also try ls /usr/share/games/doom to see what WADs you already have installed. Try to figure out if they are IWADs by running the following command.
prboom-plus -iwad NAMEOFWADYOUWANTTOTEST

Hope this helps and have fun!

“On PocketC.H.I.P. the prboom map data, stored in .wad files, are located in the /usr/share/games/doom directory.

Take for example installing Doom 2 for Prboom.
sudo cp doom2.wad /usr/share/game/doom”

But I get :

cp: cannot stat ‘doom2.wad’ : No such file or directory

And in the file manager there is no :

” /usr/share/game/doom directory”

to follow … so I am lost.

I can find /home/chip/dir/usr/bin

but that is not the place to store the .wad’s

so where am I lost?

I can load and play prboom from the command prompt … the game is there just no file hierarchy that matches your .wad placement directions …

:^(

The directory is /usr/share/games/doom/, looks like I had a typo.

I assumed you owned a copy of the doom2.wad and had it in your /home/chip directory.

I have the regular CHIP. Can I install Doom or Doom II on that? I purchased Doom II on CD for Windows years ago but it stopped working when I upgraded to 64 bit.

Of course. Simply install the prboom game with sudo apt update && sudo apt install prboom. A CD for Windows won’t be compatible with the CHIP because Debian and Windows can’t use the same binary programs. However, Doom II is available with various source ports. Search the web.

Maybe everyone else was smart enough to fix it on the fly, but I thought I should mention that there’s a typo in the listing for /lib/systemd/system/hostapd-systemd.service

In the [Unit] section the line:
ConditionPathExists=/etc/hostapd.conf
Should be:
ConditionPathExists=/etc/hostapd.conf

Then again it’s possible my browser is displaying wrongly.

Otherwise great tutorial I now have confidence I know everything I need to set up my next chip to run on headless+ssh+stand alone access point+python GPIO script+a service file to keep it running…

Love this guide! Exactly what I was looking for to make CHIP a static HTTP file host for files on an external hard drive.

Found some typos I stumbled over at first, though:

In /etc/network/interfaces, “auto wan1” should be “auto wlan1”.

In /lib/systemd/system/hostapd-systemd.service, “” should be deleted.

Also: if you’d like anyone joining the network to connect to your CHIP no matter what address they enter (ie: if when they enter google.com you want them to hit nginx on the device), add this to /etc/dnsmasq.conf: “address=/#/192.168.2.1” (from http://serverfault.com/questions/351108/using-dnsmasq-to-resolve-all-hosts-to-the-same-address#351614)

I also had the wrong address for /etc/dnsmasq.conf. It should be:


# Add domains which you want to force to an IP address here.
# The example below send any host in double-click.net to a local
# web-server.
#address=/double-click.net/127.0.0.1
address=/#/172.20.0.1

need help with error
● hostapd-systemd.service – hostapd service
Loaded: loaded (/lib/systemd/system/hostapd-systemd.service; enabled)
Active: failed (Result: exit-code) since Tue 2016-11-08 20:55:12 UTC; 5s ago
Process: 29375 ExecStart=/usr/sbin/hostapd /etc/hostapd.conf (code=exited, status=1/FAILURE)
Main PID: 29375 (code=exited, status=1/FAILURE)

Thank you! I used a computer as the server and a couple of POCKETCHIPS as the clients. Worked great! I made sure to check out the errata mentioned in the comments as I entered the commands.

Add a Response

Your name, email address, and comment are required. We will not publish your email.

The following HTML tags can be used in the comment field: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">