sairuk wrote:Seems there might be a new thug pc beta knocking about
http://assemblergames.com/l/threads/pot ... 00s.63571/
Update: Having looked at it quickly, i'd be more so inclined to call it a Demo than a Proto, i've currently named it
Tony Hawk's Underground (Pinecone Research Study #31312) Demo.iso
in my set
I've been trying to bypass the backend / server report thing but i havent had any success so far.
Just disabling the "Waiting for content..." function just gives more error messages.
It looks like its initializing more stuff in WinMain. Ive tried to nop it, but it either causes the game to crash on startup, when loading a level, or returning more errors.
Code: Select all
//----- (004BF3F0) --------------------------------------------------------
BOOL sub_4BF3F0()
{
sub_4019D0("Waiting for content...\n");
WaitForSingleObject(hEvent, 0x1D4C0u);
sub_4019D0("Done waiting for content\n");
return SetEvent(hEvent);
}
Code: Select all
MessageBoxA(
0,
"There was an error connecting to the server.\r\n"
"Please check your Internet connection and try again.\r\n"
"\r\n"
"Press [ENTER] to exit the game.",
"Communications Error",
0x1000u);
Code: Select all
//----- (004C02A0) --------------------------------------------------------
int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
//.....
v4 = 0;
v5 = sub_6206F0((int *)&unk_683EF8);
hEvent = CreateEventA(0, 1, 0, 0);
sub_61FD80((int)sub_4BF3C0);
if ( v5 )
sub_4019D0("radStart(): ERROR %d\n", v5);
sub_4C00D0();
sub_5C82B0("thps5pc");
for ( i = sub_5C8460(); !i; i = sub_5C8460() )
sub_5C7D80(5u);
if ( i != 1 )
sub_4019D0("The backend is not available\n");
I noticed that it will always try to load the Slam City Jam level, no matter what level you select.
I also found some interesting stuff in the disassembly, it looks like the game takes the following startup parameters: "-export", "-ads" and "-label"
Other findings:
Code: Select all
// ...
v36 = fopen("default_ad.bmp", "r");
// ...
sub_4019D0("DYNAMIC REPLACEMENT: texture %X cell: %d\n", *(_DWORD *)v92, v93);
// ...
CHAR aSoftwareIga[] = "Software\\IGA"; // idb
char asc_6967CC[] = "\r\n\r\n"; // idb
char asc_6967D4[] = "\r\n\r\n"; // idb
char aPostHttp1_0Con[74] = "POST / HTTP/1.0\r\nContent-Type: application/octet-stream\r\nContent-Length: "; // weak
char aD_D_D_D_0[] = "%d.%d.%d.%d"; // idb
char aD_D_D_D_1[] = "%d.%d.%d.%d"; // idb
char aD_D_D_D_2[] = "%d.%d.%d.%d"; // idb
CHAR aUserid_1[] = "userid"; // idb
char aCellid[] = "cellid"; // idb
char aContentid[] = "contentId"; // idb
char aI64d[] = "%I64d"; // idb
char aWeight[] = "weight"; // idb
char aD_1[] = "%d"; // idb
char aMinsize[] = "minsize"; // idb
char asc_696888[] = "%f"; // idb
char aMaxsize[] = "maxsize"; // idb
char asc_696894[] = "%f"; // idb
char aMintime[] = "mintime"; // idb
char aD_2[] = "%d"; // idb
char aDeflection[] = "deflection"; // idb
char aD_3[] = "%d"; // idb
char aSize[] = "size"; // idb
int dword_6968E4[] = { 0 }; // weak
char aS_9[6] = "ß°\b™\\"; // weak
char aRadial_cdb[11] = "radial.cdb"; // weak
char aRadial_cdb_0[] = "radial.cdb"; // idb
char aA9b8c7d6ee55ff[17] = "a9b8c7d6ee55ff44"; // weak
int dword_69691C = 945961313; // weak
int dword_696920 = 912537443; // weak
int dword_696924 = 892691813; // weak
int dword_696928 = 875849318; // weak
char aRadtrackcellRe[] = "radTrackCell(): [report impression] cell %d content %I64u angle: %0.2f size: %0.2f duration: %d\n"; // idb
char aRadtrackcell_0[] = "radTrackCell(): [reject impression] cell %d content %I64u angle: %0.2f/%u size: %0.2f/%0.2f duration: %u/%u (\n"; // idb
char asc_696A08[2] = "\\"; // weak
char aRadial_idb[11] = "radial.idb"; // weak
char aRadial_idb_0[] = "radial.idb"; // idb
char aRadstopResWa_0[32] = "radStop(): res == WAIT_TIMEOUT\n"; // weak
CHAR aRadstopResWait[] = "radStop(): res == WAIT_FAILED\n"; // idb
char aRadgetcontentR[] = "radGetContent(): RAD_ERROR_NOTINITIALIZED\n"; // idb
char aRadgetcontentC[] = "radGetContent(): cell %d content %d\n"; // idb
char aRadgetcontent_[] = "radGetContent() @disabled: RAD_ERROR_NOCONTENT\n"; // idb
char aRadgetcontentE[] = "radGetContent(): empty list (cellmap %p/active_count %d/active_weights %p/active_resources %p)\n"; // idb
char aRadgetconten_1[] = "radGetContent() @active weights / resources: RAD_ERROR_NOCONTENT\n"; // idb
char aRadgetcontentT[] = "radGetContent(): total_active_weight == 0\n"; // idb
char aRadgetconten_0[] = "radGetContent(): total_active_weight == %d, r == %d\n"; // idb
char aRadgetconten_2[] = "radGetContent() @no resource: RAD_ERROR_NOCONTENT\n"; // idb
char aRadgetconten_3[] = "radGetContent() @no resource ptr: RAD_ERROR_NOCONTENT\n"; // idb
char aRadgetconten_4[] = "radGetContent() content->id: %I64u content->size: %d return: %d\n"; // idb
char a72_3_184_153[13] = "72.3.184.153"; // weak
__int16 word_696CB4 = 17475; // weak
char aFinal2_0_0_0[14] = "FINAL 2.0.0.0"; // weak
CHAR aUserid_0[] = "userid"; // idb
char aThreadstartses[] = "threadStartSession(): %s\n"; // idb
char aD_D_D_D[] = "%d.%d.%d.%d"; // idb
char aThreadstarts_0[] = "threadStartSession(): dcpStartSesssion success: (%s) %s\n"; // idb
char aCellid_0[] = "cellid"; // idb
char aContentid_0[] = "contentid"; // idb
char aContenttype[] = "contenttype"; // idb
char aSize_0[] = "size"; // idb
char aD_4[] = "%d"; // idb
char aVersion[] = "version"; // idb
char aD_5[] = "%d"; // idb
char aWeight_0[] = "weight"; // idb
char aD_6[] = "%d"; // idb
char aActivate[] = "activate"; // idb
char aD_7[] = "%d"; // idb
char aExpire[] = "expire"; // idb
char aD_8[] = "%d"; // idb
char aDayparts[] = "dayparts"; // idb
char aD_9[] = "%d"; // idb
char aPeruserlimit[] = "peruserlimit"; // idb
char aD_10[] = "%d"; // idb
char aDisplayafter[] = "displayafter"; // idb
char aI64d_0[] = "%I64d"; // idb
char aThreadhandleco[] = "threadHandleContentList(): REF content %d\n"; // idb
char aThreadhandle_2[] = "threadHandleContentList(): NEW content %d\n"; // idb
char aThreadhandlece[] = "threadHandleCellList(): app_id %d cellCount %d\n"; // idb
char aThreadhandle_0[] = "threadHandleCellList(): REF cell %d ref: %d\n"; // idb
char aThreadhandle_1[] = "threadHandleCellList(): NEW cell: %d\n"; // idb
char aThreadhandle_3[] = "threadHandleCellList(): shutdown_event\n"; // idb
char aThreadhandle_4[] = "threadHandleCellList(): UNREF cell %d\n"; // idb
char aThreadhandle_5[] = "threadHandleCellList(): UNREF resource %d\n"; // idb
char aThreadupdateco[] = "threadUpdateContent()\n"; // idb
char aThreaddownload[] = "threadDownloadContent(): START content %d\n"; // idb
char aThreaddownlo_0[] = "threadDownloadContent(): error content %d\n"; // idb
char aThreaddownlo_1[] = "threadDownloadContent(): COMPLETE content %d\n"; // idb
char aThreadrunDownl[] = "threadRun(): download complete\n"; // idb