As stated previously, I am porting a version of Rogue from 1984 originally written in C for DOS into C#.
Many things wind up easy to port. Most #defines wind up as const or readonly fields. Everything winds up a static field or method of a single Program class.
However, the THING “class” was the strangest bit to port thus far.
THING represents either a monster or an item.
It is a union.
Each of the two substructs in the union contain pointers to other THING variables.
So, its a linked list *AND* a union.
Now, I’m attempting to do a “faithful” port, which means it is my goal to get as close to the original as possible (within reason), so I’ve got a kind of ugly re-representation of THING in my code. It works, anyway.
When porting old code like this, I don’t typically question these things too heavily. I have to rely on the good faith of the developer twenty four years ago. He had a perfectly good reason for choosing a union. I just don’t see what it was.