VOGONS


First post, by MidnightSun

User metadata
Rank Newbie
Rank
Newbie

Hello all!

I have some questions regarding the DOSBox modem emulation and setup for a specific game called Pyrosaurus. My current setup is partially functional but there are some issues that I would like to resolve. My goal with this is to modify/reverse engineer part of this “multiplayer” process to hopefully re-enable it. I will note here that all networking is using local host (127000000001).
My issue is that I’m not receiving any data from the game and any data sent to the game does not appear to affect it.

Here is my system info - if more information is needed I’ll add here:
OS: Windows 10
Processor: intel i5
Memory: 4 GB
Graphics: intel integrated

I have the modem configured in dosbox .cfg as:
serial1=modem listenport:2323

I am connecting to DOSBox from Pyrosaurus using attention string ATNET1 as that seemed to be the best 2 way communication?

Pyrosaurus game and context for issue
Pyrosaurus was released by Evryware in 1997 . The goal of the game is to create and train fire breathing dinosaurs and create a team. The player then sends off the team to compete in one match. 24 hours later the “contest” is available for download. The player then downloads the contest and watches the match, after which point the player can tweak their team and send it in again.

The “send” process outlined above is to direct the modem to dial a 800 phone number stored in plain-text configuration. Files are transferred somehow (this is what I’m trying to figure out), then the modem hangs up.

My approach
My goal is to write a server which mimicks the remote server which the Pyrosaurus game connects to.
Here is a diagram of this approach
Python server <—[Dosbox <->[PYRO.EXE]]

Python server listens on port 23.
Pyrosaurus comes with a modem test menu which also does some other functions behind the scenes. My testing and screenshots are centered around this menu.
I press the Test button and the testing process begins.
Now I’m not sure if this matters or not but the “send” process is handled by an external program called MODEM.EXE . This appears to be a customized Microsoft modem communication utility. I’m not sure what parameters are being sent to it but I’m nearly certain it depends on PYRO.EXE being loaded, as MODEM.EXE is run synchronously when it is called then exits when it’s done.

First screenshot is of the modem configuration within the game.

pyro_000.png
Filename
pyro_000.png
File size
38.07 KiB
Views
299 views
File license
CC-BY-4.0

Here is the general process of what happens currently:
Test button is pressed on modem setup menu And the following log is generated by dosbox

Command sent to modem: ->ATNET1<-

Modem response: OK
Command sent to modem: ->ATS7=45<-

Modem response: OK
Command sent to modem: ->ATDT127000000001<-

Connecting to host 127.000.000.001 port 23
Modem response: CONNECT 57600

Second screenshot is the screen in the game that corresponds to this. This is a great result so far and this is where all of my questions stem from.

modem_000.png
Filename
modem_000.png
File size
38.06 KiB
Views
297 views
File license
CC-BY-4.0

At this point the game appears to be waiting for data. Python Server first sends IAC DO BINARY (FF F1 1) then sends actual data to DOSBox, but Pyrosaurus does not appear to respond. Python server never receives any information from Pyrosaurus or DOSBox.
Third screenshot displays after the connection times out (50 seconds)

pyro_001.png
Filename
pyro_001.png
File size
38.16 KiB
Views
297 views
File license
CC-BY-4.0

After the 50 seconds timeout the DOSBox log shows similar information

MODEM: Telnet client sent IAC 241
Modem: Entering command mode(escape sequence)
Modem response: OK
Command sent to modem: ->ATH0<-

Modem response: NO CARRIER
Serial1: Modem listening on port 2323...

  • How can I be sure that DOSBox is actually sending data to Pyrosaurus and any data sent by Pyrosaurus is passed through DOSBox to Python Server?
  • How can I validate that Pyrosaurus received any data?
  • Is the above use case supported by DOSBox?
  • Is there a better configuration that I should be using for the modem or other part of DOSBox?
  • Are there any utilities that could help with this? Does the debugger have something in it that I’ve missed? What interrupt should I be looking for?

Thank you for any help you can provide!
- MidnightSun

Reply 2 of 6, by leileilol

User metadata
Rank l33t++
Rank
l33t++

Python would be used to satisfy the modem requests.

also i've never thought Pyrosaurus would ever be revived being one of those relatively obscure online late '90s DOS games no one ever talks about given its brief online service period (among other things, being super p2w making me forget it enough that I couldn't think what this game was from a random memory nearly two decades later). That's great, and good luck!!!

by the way, DOSBox is not for running Windows 9x

Reply 3 of 6, by jmarsh

User metadata
Rank Oldbie
Rank
Oldbie
leileilol wrote on 2020-03-05, 12:06:

Python would be used to satisfy the modem requests.

But how? The game is obviously waiting for some acknowledgement from the server, if Python is just configured to accept incoming connections but nothing else then that's obviously why nothing is happening.

Reply 4 of 6, by MidnightSun

User metadata
Rank Newbie
Rank
Newbie
jmarsh wrote on 2020-03-05, 14:50:

But how? The game is obviously waiting for some acknowledgement from the server, if Python is just configured to accept incoming connections but nothing else then that's obviously why nothing is happening.

You’re right, the game probably is waiting for some specific sequence of codes being sent from the server it expects to connect to. The purpose of this post is to eliminate the possibility that DOSBox and its modem emulation isn’t getting in the way of Pyrosaurus communicating with the server first.

The Python Server is sending data both to DOSBox and Pyrosaurus, the details of which are in the original post above.

leileilol wrote on 2020-03-05, 12:06:

also i've never thought Pyrosaurus would ever be revived being one of those relatively obscure online late '90s DOS games no one ever talks about given its brief online service period

At this point the future doesn’t look very good for being possible but we’ll see! I’ve searched for contest files and have come up with nothing, and as you say, no one is talking about this game, and any site that did is most likely gone by now.

I’ve also considered the possibility that the 2.0 version of the game which I currently have is stripped of critical net code for the game to work.

Again, the purpose of this post is to eliminate the possibility that DOSBox and its modem emulation isn’t getting in the way of Pyrosaurus communicating with the server first.

Thank you both!

Reply 5 of 6, by jmarsh

User metadata
Rank Oldbie
Rank
Oldbie
MidnightSun wrote on 2020-03-05, 15:30:

The Python Server is sending data both to DOSBox and Pyrosaurus, the details of which are in the original post above.

What details? You said it switches to binary mode then "sends actual data." What is this data?

Reply 6 of 6, by krcroft

User metadata
Rank Oldbie
Rank
Oldbie

You’re right, the game probably is waiting for some specific sequence of codes being sent from the server it expects to connect to.

If you can disassemble DOS programs (SoftICE or other tools), you could inspect its current position when it's sitting there waiting, and maybe discover the hardcorded byte value(s) that its expecting.

Then add those bytes to your Python program, and wash, rince repeat. (much easier typed than done, for myself.. but there are very talented folks here with those skills)