Consty
07-23-2018, 02:50 PM
Here's a quick rundown of what I needed to do in order to get Project 1999 working reliably on Linux using WINE. It's by no means exhaustive, but it should help address the gotchas associated with getting things to work.
Before completing these steps, follow the instructions at https://www.project1999.com/forums/showthread.php?t=2651 first. Since you're using wine, you'll probably just run "wine Install.exe" without quotes from the installation medium.
After completing installation, perform the following:
1. Edit eqclient.ini from the directory you installed to and add a line that says "WindowedMode=TRUE" without quotes (addresses a crashing issue on startup)
2. Delete DSETUP.dll (notice the upper/lower casing of the file)
3. Rename dsetup.dll to DSETUP.DLL (addresses the issue of spells being shown as out of date)
4. Run game using "wineconsole Launch\ Titanium.bat" without quotes from the directory you installed to
5. If you routinely get a blank list of servers (common when using wireless), perform the remaining steps; otherwise you're done
6. Edit the eqhost.txt file from the directory you installed to and change "login.eqemulator.net" to "localhost" without quotes which will forward login requests through a local script
7. Copy the python script below (works with python 2 or 3) and save it in a file such as eqlogin.py
8. Before running the game in step 4, run "python eqlogin.py" without quotes and then proceed to login--you're done
#!/usr/bin/env python
import socket
import threading
import time
FROM_IP = "127.0.0.1"
FROM_PORT = 5998
REPLY_IP = ""
REPLY_PORT = 0
TO_IP = "login.eqemulator.net"
TO_PORT = 5998
from_sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
from_sock.bind((FROM_IP, FROM_PORT))
to_sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
to_sock.bind(('', 0))
def local():
global REPLY_IP, REPLY_PORT
while True:
data, addr = from_sock.recvfrom(4096)
REPLY_IP, REPLY_PORT = addr
to_sock.sendto(data, (TO_IP, TO_PORT))
print("Sending " + str(len(data)) + " bytes to " + TO_IP + ":" + str(TO_PORT))
def remote():
global REPLY_IP, REPLY_PORT
while True:
data, addr = to_sock.recvfrom(4096)
from_sock.sendto(data, (REPLY_IP, REPLY_PORT))
print("Sending " + str(len(data)) + " bytes to " + REPLY_IP + ":" + str(REPLY_PORT))
print("Waiting for data on " + FROM_IP + ":" + str(FROM_PORT) + "...")
threading.Thread(target=local, args=()).start()
threading.Thread(target=remote, args=()).start()
while True:
time.sleep(1)
pass
Before completing these steps, follow the instructions at https://www.project1999.com/forums/showthread.php?t=2651 first. Since you're using wine, you'll probably just run "wine Install.exe" without quotes from the installation medium.
After completing installation, perform the following:
1. Edit eqclient.ini from the directory you installed to and add a line that says "WindowedMode=TRUE" without quotes (addresses a crashing issue on startup)
2. Delete DSETUP.dll (notice the upper/lower casing of the file)
3. Rename dsetup.dll to DSETUP.DLL (addresses the issue of spells being shown as out of date)
4. Run game using "wineconsole Launch\ Titanium.bat" without quotes from the directory you installed to
5. If you routinely get a blank list of servers (common when using wireless), perform the remaining steps; otherwise you're done
6. Edit the eqhost.txt file from the directory you installed to and change "login.eqemulator.net" to "localhost" without quotes which will forward login requests through a local script
7. Copy the python script below (works with python 2 or 3) and save it in a file such as eqlogin.py
8. Before running the game in step 4, run "python eqlogin.py" without quotes and then proceed to login--you're done
#!/usr/bin/env python
import socket
import threading
import time
FROM_IP = "127.0.0.1"
FROM_PORT = 5998
REPLY_IP = ""
REPLY_PORT = 0
TO_IP = "login.eqemulator.net"
TO_PORT = 5998
from_sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
from_sock.bind((FROM_IP, FROM_PORT))
to_sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
to_sock.bind(('', 0))
def local():
global REPLY_IP, REPLY_PORT
while True:
data, addr = from_sock.recvfrom(4096)
REPLY_IP, REPLY_PORT = addr
to_sock.sendto(data, (TO_IP, TO_PORT))
print("Sending " + str(len(data)) + " bytes to " + TO_IP + ":" + str(TO_PORT))
def remote():
global REPLY_IP, REPLY_PORT
while True:
data, addr = to_sock.recvfrom(4096)
from_sock.sendto(data, (REPLY_IP, REPLY_PORT))
print("Sending " + str(len(data)) + " bytes to " + REPLY_IP + ":" + str(REPLY_PORT))
print("Waiting for data on " + FROM_IP + ":" + str(FROM_PORT) + "...")
threading.Thread(target=local, args=()).start()
threading.Thread(target=remote, args=()).start()
while True:
time.sleep(1)
pass