Jump to content

Thyme, a Generals ZH reimplementation project.


Blade

Recommended Posts

I've just pushed the beginings of a Zero Hour reimplementation project to https://github.com/T...blyArmada/Thyme if anyone is interested in contributing to such a project.

The project is using a similar approach to the one recently used successfully by the OpenRCT2 project. That is, the reimplementation is initially being implemented as a dll that is injected into the game run time that replaces the games functions with new implementations as they are written, allowing it to be reimplemented a bit at a time.

I've already reimplemented the custom memory allocator the game uses as well as a couple of string classes.

 

Its very early days for the project, but if anyone has some C++ knowledge and is interested in getting involved, drop by the #thyme channel on freenode.net IRC. When some significant progress has been made it should become possible to fix engine bugs and add additional features to the game.

Link to comment
Share on other sites

Until its further along, its hard to say exactly possible, but when we have an entire reimplementation there shouldn't be anything we can't change about the game. If nothing else, having a source reimplementation will allow tracking down the source of the desyncs more easily through the use of debug builds that log information about the game state.

Link to comment
Share on other sites

Have you put this up in other places ?

Such as the forums at SWR , CNCNZ , Project Perfect Mod , Revora  , cncnet and perhaps the forms for openra .

These are all of the main forums that I can think of that discuss C&C things so if your looking for help these would be where you should ask for it .

Here are their addresses :

 

http://forums.swr-productions.com/

http://forums.cncnz.com/

http://www.ppmforums.com/index.php

https://forums.revora.net/

https://forums.cncnet.org/

http://www.sleipnirstuff.com/forum/viewforum.php?f=80

 

There was another project like this a year or two ago , I'll see if I can find some info on it .

 

EDIT : Found it !

OpenSage : https://github.com/feliwir/openSage

You may want to look up the two people who contributed to it they may be interested in helping .

Feliwir : https://github.com/feliwir?

Tarcontar : https://github.com/Tarcontar

Edited by Eternity 6
Link to comment
Share on other sites

The issues with playing them on windows 10 are because the safedisk driver is blacklisted as I understand it. A no-cd crack should fix them, though I think they have issues running in true 32bit mode due to the way they blit the screen. Generals ZH also has an issue with the safedisk driver, but as with TS and probably RA2, the safedisk check is done in a launcher, the main binary is fine, it just looks for the launcher. I already reimplemented the functions that check the launcher. It now does something like bool isLauncherRunning() { return true; }.

Link to comment
Share on other sites

A lot of the older RTS games no longer function on modern operating systems and hardware. Try running Tiberian Sun or Red Alert 2 on Windows 10, it's not going to happen.

I am going to take this moment to remind everyone that Ramapastring's TS client is a thing, also there is the current CNCnet TS client as well.

(Both seem to work on Windows 10.)

Link to comment
Share on other sites

Yes, I think that it is worth mentioning that all of cncnet's things work on windows 10 just fine from what I can tell. Kudos to whoever is maintaining that stuff.

 

So Blade, do you have any sort of time table in mind for your project? Milestones or things of that sort? Or will it just work like most things around here and just go as fast as you and your people have time to do it?

 

EDIT: I meant to ask about the name. Where did the name "Thyme" come from? Seems like there's a cooking herb or something called that if I recall.

Link to comment
Share on other sites

CNCNet has a Windows 10 patch for Tiberian Sun. I do believe that you would need to have the game already installed on your system, which you can get digitally through Origin, either the game itself (which I would recommend) or through the Ultimate Collection, which is horrible in all honesty because the games can't be modified due to the INI files not being present. 

Link to comment
Share on other sites

Its one of those "done when its done" things that I work on when I have chance I'm afraid. Its probably going to be quite slow until I get it to the point where its interesting enough to get more contributors, but we are probably talking years as the engine is quite large.

 

Regarding the name, Sage (as in SAGE engine, the name of the engine Generals uses) and Thyme are both herbs and "Thyme" is pronounced the same as "time" which is a recurring focus of many of the C&C games.

Link to comment
Share on other sites

Regarding the name, Sage (as in SAGE engine, the name of the engine Generals uses) and Thyme are both herbs and "Thyme" is pronounced the same as "time" which is a recurring focus of many of the C&C games.

It didn't occur to me. Clever :o

Link to comment
Share on other sites

Cheers for the Windows 10 patch tips, if I need a nostalgia fix I'll look them up.

 

(Besides running those old games, I do wonder if anyone is looking to improve them performance-wise as well.)

 

Edit: C&CNet seems popular. Why don't C&CNet and W3DHub cooperate? Both provide a similar service, access to fan-driven C&C content (fan-driven also including service operation for older games). And C&CNet doesn't support Renegade (W3D), so it's not like the games would compete.

 

Edit2: Actually, who even runs the Renegade server listing service these days? I know W3D projects like APB and Reborn have disconnected from that service, but how about Renegade itself, does it even have players left playing it?

Edited by Raap
Link to comment
Share on other sites

To keep from junking up this thread, we should probably start another one on that because thats vastly different subject matter. Also, pretty sure (based on a dns trace) that cncnet still does run the GSA master server clone, though the listing thing on their site is down. Renlist seems to still be connecting there though. @Raap, yes dozens of people every day still play renegade :p

 

Cool stuff about the name! I did not think of that either. You're a clever boy! :D

Link to comment
Share on other sites

Edit2: Actually, who even runs the Renegade server listing service these days? I know W3D projects like APB and Reborn have disconnected from that service, but how about Renegade itself, does it even have players left playing it?

 

Afaik XWIS still runs it.

Link to comment
Share on other sites

 

 

 

Edit2: Actually, who even runs the Renegade server listing service these days? I know W3D projects like APB and Reborn have disconnected from that service, but how about Renegade itself, does it even have players left playing it?

 

Afaik XWIS still runs it.

 

 

It seems they no longer have a "proper" website, just a page with a few links and a forum, which has a few recent posts in it.

 

Not to be the usual doom prophet, but consider approaching them with some consolidation in mind. What's left of the broader C&C community is too little to be kept fractured like it is.

 

But then again, I've always been in favor of more actively attempting to move things around.

 

Why is there even... 3? Different C&C match hosting services? Why does everyone always have to be so bloody stubborn and refuse project cooperation?

Edited by Raap
Link to comment
Share on other sites

  • 3 weeks later...

For anyone keeping track, I've pushed some work on the filesystem and hooked enough that I can call the original filesystem functions to handle files. Some parts of it I can't reimplement fully until later in the project as they pass around C++ STL objects and the binary interface for those changes between MSVC versions, so I need to reimplement everything that uses them at the same time. I've started looking at the ini file parsing now, and a lot of that should be replaceable though.

Link to comment
Share on other sites

  • 3 weeks later...

Made an interesting discovery, it seems that the game was written against STLPort rather than the standard c++ library that comes with MSVC and we think we've identified the version they used so with a bit of massaging to get it compiling, we have an ABI compatible C++ library implementation making it much easier to implement and test functions one at a time, even those that rely on STL containers which we didn't think we could touch until later.

Link to comment
Share on other sites

22 hours ago, Blade said:

Made an interesting discovery, it seems that the game was written against STLPort rather than the standard c++ library that comes with MSVC and we think we've identified the version they used so with a bit of massaging to get it compiling, we have an ABI compatible C++ library implementation making it much easier to implement and test functions one at a time, even those that rely on STL containers which we didn't think we could touch until later.

You may as well have spoken out a curse in some demonic language since I would understand both of these things at equal capacity, but sure thing mate, good work on what very likely translates into: progress!

Link to comment
Share on other sites

Haha, Translation: They've figured out more details about the sort of code they're working with here, much like how our scripts guys dissected and studied and subsequently were able to make their own implementations of the W3D engine code. And yes, I would think this probably qualifies as progress :D

Good work Blade, and thanks for the update!

Link to comment
Share on other sites

Part of the standard C++ is a library of data structures and algorithms such as std::vector or std::map, the behaviour of which is mandated by a standard. However the underlying implementation isn't defined so different compilers implement them differently. The implementation even changes between compiler versions. Provided your program is self contained and doesn't try and pass these data structures between dll's or anything the fact that the implementation can change over time doesn't matter though because the version your program uses is set in stone when you compile it.

However when you are trying to hook into an older existing binary where some functions do pass them around and some of the data structures contain them, the differences basically mean things don't line up correctly when you try and re-implement them so functions that theoretically would match the original in behaviour don't match at a binary level, you need to use the same implementation as the original. Part of the reimplementation is working out the layout of the data structures for things like the INI file parser and the big file loader so they can interoperate with the original code and having the correct C++ implementation makes that much easier.

Link to comment
Share on other sites

  • 4 weeks later...

Thanks to the STLPort stuff I've been able to fully reimplement the filesystem code and the string file parser now. I've also mapped out most of the global options class, a few members are still unknown or uncertain, but all the user configurable options are mapped.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...