Page 2 of 3

Re: Any ways of bringing TT back?

Posted: Wed Dec 16, 2015 3:22 am
by ThatGuySam
What's the plan if we do get the source code?

Re: Any ways of bringing TT back?

Posted: Tue Jan 05, 2016 3:10 pm
by Hyper-X
Th eplan would be to update it to the newest version of TGE and update everything from assets to gamemodes to UI. completely revitalize the game and open source it.

Re: Any ways of bringing TT back?

Posted: Tue Jan 05, 2016 4:03 pm
by ThatGuySam
Cool! :thumbup:

Maybe try and start a Kickstarter project if you need to buy it?

https://www.kickstarter.com/start

Re: Any ways of bringing TT back?

Posted: Sun Feb 14, 2016 5:44 pm
by SliMShaDy
Well HELLO Ladies and Germs, how have you all been...it's been so long and I don't know why I was typing this website even though I wasn't thinking about it. Anyways this place still looks dead and my old iP is still banned on this site lol. This is why we lost so many players by banning them here or in the game. I have been playing nothing but World of Tanks which is why some moved on to better games I guess. Even though I want to instal/check in on the game I hate to see no one on it playing. So, who still play's this cartoon game now a days?

-woo!-woohoo-TankRaT-

Re: Any ways of bringing TT back?

Posted: Fri Mar 04, 2016 3:08 pm
by ArtCrazy
It's sad that the game is dead, it was a huge part of my childhood. It's the only community left where I still use my ancient nickname "ArtCrazy".

To be fair, the source code isn't strictly necessary for a lot of things. The executable isn't obfuscated in any way (especially if you find a cracked version *somewhere*), so with my current skills a "ThinkTanks Script Extender" wouldn't be impossible. Looking at the open-sourced Torque 3D code, adding extra scripting functionality doesn't seem too hard, mostly a matter of figuring out where to hook!

The DSO format is basically "Torque Script bytecode", and could also be easily disassembled and/or decompiled given some time as there's almost a 1:1 relationship to the actual script (there is a project called Untorque that does that for newer T3D versions; sadly it's not compatible with TT). The only difficulty here would be the fact that the DSO bytecode version used by TT is considerably older than the current T3D version, so the bytecode specification probably differs quite a bit. Still, that could be easily reverse engineered since we can create/compile arbitrary .cs files with only specific commands, and look at the output.

It could even be possible, given enough work, to reverse engineer TT specifics (GUI, DSO, tank treads, and all other things incompatible with T3D), decompile all torque script files, and finally import it into the newer open-sourced engine version. Of course, that could be in a legally gray area unless we had permission from IA/GG (I guess there'd be no issue if we kept it strictly non-profit and/or forced the user to prove they own a copy of ThinkTanks, but IANAL), and I probably don't have enough C++ reverse engineering experience to pull it off.

I can only imagine how far we would have gotten if 10 years ago I would have had the programming/reverse engineering knowledge I do today. And I don't doubt that other modders are in a similar situation.

If I had time, I might actually try and play around with this stuff, get my reverse engineering skills back up to speed (haven't done a game mod since I patched Age of Empires 2 to support any resolution 4 or so years ago; and then contributed the code to the community patch Userpatch when that started being used). Thing is, I'm currently finishing my Master's Thesis (1 month and a half to go!), and that + my job search has priority.

Re: Any ways of bringing TT back?

Posted: Fri Mar 04, 2016 3:59 pm
by CB
Hi AC! Well good luck with the masters and landing a good job.
When you get that accomplished we will still be here and would love to see this moved to T3D. We still have a core of players about 20 or so. I bet many older players would return for the 2nd coming Think Tanks! I know you like the challenge so I challenge you :)

CB

Re: Any ways of bringing TT back?

Posted: Sat Mar 05, 2016 5:03 am
by ThatGuySam
@ArtCrazy Nice to see you again! :tankerwinks: As CB said, good luck with the masters!
It would be great to see this game revived with a modern feel! :)

Re: Any ways of bringing TT back?

Posted: Sat Mar 05, 2016 3:59 pm
by ArtCrazy
Yeah, I'll give it a try one of these days, figure out if my initial estimates are correct, and how much work it would take to do all the stuff I mentioned. I'd like to at least build a TT DSO decompiler or something - not necessarily to get much use out of it, considering how dead the game is - mostly out of curiosity, since I used to spend ages trying to figure out how to do stuff in this game years ago, and I've always wanted to know exactly how much I had been able to figure out back then!

Still, real life stuff takes priority (thesis and job search), so don't expect anything any time soon! And no guarantees I'll ever be able to get anything working - but I want to at least try ;)

EDIT: So, I had some time today and decided to check how different the TT DSO implementation is from the latest T3D engine. It's quite different, but in about 4 hours work I've been able to reverse engineer the opcodes list, by comparing the disassembled version in the ThinkTanks executable with the latest T3D engine's source code. There are a ton of differences, and as such I'm not 100% sure the mapping is correct (and there's 2 opcodes for which I can't find a corresponding one in T3D, plus 3 opcodes which don't seem to do anything).

Assuming I had more time, the next step would be to implement a disassembler, using this opcode mapping (wouldn't take long, most of the code can be borrowed from the T3D sources). Then, make very simple "very few instructions" .cs files, compile them, and see what the disassembly looks like. Knowing the script that went into it, the opcode mapping could easily be corrected.

Anyways, if anyone is interested in picking up where I've stopped, this is my current opcode mapping (corresponds to the enum with the same name in Engine/source/console/compiler.h):

Code: Select all

enum CompiledInstructions
{
  OP_FUNC_DECL = 0,
  OP_CREATE_OBJECT = 1,
  OP_2_INEXISTENT = 2,
  OP_3_INEXISTENT = 3,
  OP_ADD_OBJECT = 4,
  OP_END_OBJECT = 5,
  OP_JMPIFFNOT = 6,
  OP_JMPIFNOT = 7,
  OP_JMPIFF = 8,
  OP_JMPIF = 9,
  OP_JMPIFNOT_NP = 10,
  OP_JMPIF_NP = 11,
  OP_JMP = 12,
  OP_INVALID = 13,
  OP_CMPEQ = 14,
  OP_CMPGR = 15,
  OP_CMPGE = 16,
  OP_CMPLT = 17,
  OP_CMPLE = 18,
  OP_CMPNE = 19,
  OP_XOR = 20,
  OP_MOD = 21,
  OP_BITAND = 22,
  OP_BITOR = 23,
  OP_NOT = 24,
  OP_NOTF = 25,
  OP_ONESCOMPLEMENT = 26,
  OP_SHR = 27,
  OP_SHL = 28,
  OP_AND = 29,
  OP_OR = 30,
  OP_ADD = 31,
  OP_SUB = 32,
  OP_MUL = 33,
  OP_DIV = 34,
  OP_NEG = 35,
  OP_SETCURVAR = 36,
  OP_SETCURVAR_CREATE = 37,
  OP_SETCURVAR_ARRAY = 38,
  OP_SETCURVAR_ARRAY_CREATE = 39,
  OP_LOADVAR_UINT = 40,
  OP_LOADVAR_FLT = 41,
  OP_LOADVAR_STR = 42,
  OP_LOADVAR_VAR = 43,
  OP_SAVEVAR_UINT = 44,
  OP_SAVEVAR_FLT = 45,
  OP_SAVEVAR_STR = 46,
  OP_SAVEVAR_VAR = 47,
  OP_30_UNKNOWN = 48,
  OP_31_UNKNOWN = 49,
  OP_LOADFIELD_UINT = 50,
  OP_LOADFIELD_FLT = 51,
  OP_LOADFIELD_STR = 52,
  OP_SAVEFIELD_UINT = 53,
  OP_SAVEFIELD_FLT = 54,
  OP_SAVEFIELD_STR = 55,
  OP_STR_TO_UINT = 56,
  OP_STR_TO_FLT = 57,
  OP_STR_TO_NONE = 58,
  OP_FLT_TO_UINT = 59,
  OP_FLT_TO_STR = 60,
  OP_FLT_TO_NONE = 61,
  OP_UINT_TO_FLT = 62,
  OP_UINT_TO_STR = 63,
  OP_UINT_TO_NONE = 64,
  OP_LOADIMMED_UINT = 65,
  OP_LOADIMMED_FLT = 66,
  OP_TAG_TO_STR = 67,
  OP_LOADIMMED_STR = 68,
  OP_LOADIMMED_IDENT = 69,
  OP_CALLFUNC_RESOLVE = 70,
  OP_CALLFUNC = 71,
  OP_42_INEXISTENT = 72,
  OP_ADVANCE_STR = 73,
  OP_ADVANCE_STR_APPENDCHAR = 74,
  OP_ADVANCE_STR_COMMA = 75,
  OP_ADVANCE_STR_NUL = 76,
  OP_REWIND_STR = 77,
  OP_TERMINATE_REWIND_STR = 78,
  OP_COMPARE_STR = 79,
  OP_PUSH = 80,
  OP_PUSH_UINT = 81,
  OP_PUSH_FLT = 82,
  OP_PUSH_VAR = 83,
  OP_PUSH_FRAME = 84,
};
The switch statement inside CodeBlock::exec (Engine/source/console/compiledEval.cpp), which is the actual bytecode interpreter, and was what I used to reverse engineer the above mappings, is located at ThinkTanks.exe memory address 0x0040EC75 (on Windows).

tl;dr: The DSO disassembler and decompiler should be pretty easy to get working, so we're in luck at least on that front!

Re: Any ways of bringing TT back?

Posted: Mon Mar 07, 2016 10:27 pm
by ArtCrazy
So... Bored by the writing of my thesis, I decided to take the weekend off working on the DSO decompiler, and it's more or less done (with some bugs). Read more here!

That's all from me for a few months, though! I suggest someone plays around with it, and sees what they can find. Specifically, I'm curious to know how much works if you decompile all ThinkTanks scripts and delete the DSO files (i.e., if the decompiler is working perfectly!) - if not the case, then there's probably some bugs for some very weird cases. In addition, assuming everything works, I'd be interested in knowing what happens if you decompile everything, and replace the ThinkTanks executable with one taken from the latest Torque 3D version. Most things should not work, but I wouldn't be surprised if the menus worked more or less correctly! (Which would be great news)

Re: Any ways of bringing TT back?

Posted: Wed Mar 09, 2016 3:50 pm
by Hyper-X
I will absolutely take a look at this, and as an update, still no reply from IAC. They will not release the IP it seems and so the work is in our hands. This is amazing work ArtCrazy, then again, I'm not surprised, you have always been known for your awesome work! :thumbup: