3View

Archived from http://community.combatsim.com/topic/29871-3view/

avatar
Krycztij

I’m going to release 3View publicly in the current state (+ the fixed oilrig lights), including DLL interface and source code, tomorrow.

If you find serious bugs / flaws in the meantime, please report.

avatar
mikew

Nothing serious so far, but I notice that I get a Windows error (at work right now, so can’t tell you the exact details) if I exit a SSD session with the DLL.
It could of course have something to do with my Python code, but I don’t see a problem if I exit a .3 session.

It isn’t really a practical problem, as I’m exiting anyway. 🙂

avatar
Krycztij

Not reproducing here. How are you closing the SSD session? With a manual call to closeSSDSession() or are you waiting for the user input to return false?

avatar
mikew

I’m just closing the window by pressing the X in the top right corner … so I’d sort of expect something to complain. I just notice that I can get away with this without comment in a .3 session, but not a SSD session.

A need to refine my exiting techniques though, as it almost seems that closeSSDSession() isn’t needed as it tends to close anyway if I don’t refresh with a draw comand within a certain time.

avatar
Krycztij

closeSSDSession() must not be called if processSSDSessionInput() returned 0 (if the user closed the window). You use it to close the window from the program’s side of the interface; closing from the user’s side is handled automatically by processSSDSessionInput().

avatar
Krycztij

Would it be okay to host package in our box, or would there be undesired side-effects (like our internal files being visible to others)?

avatar
DrKevDog
Krycztij

I’m going to release 3View publicly in the current state (+ the fixed oilrig lights), including DLL interface and source code, tomorrow.

If you find serious bugs / flaws in the meantime, please report.

Pjotr,

I am unsure as to how you define "flaws", and I most certainly do not find anything I would consider a flaw or serious. However, I find the .raw texture code to be quite limiting, in its current form, with respect to progressive texture modification efforts. I need access to much larger texture definitions:

F222010-12-0822-40-30-40.jpg

Although I have yet to feel comfortable that I understand all of the TFX texture code, I am comfrotable with much of the 24 and 32bit processes. I would suggest expanding the taw-raw code as follows:

// 12 KiB .raw files contain 64×64 r8g8b8 texels in sRGB color space. Unused in the
// original game, but designed for high-fidelity sky backgrounds.
// (e.g. explosions).
typedef RGB RAW12KiB[64][64];

// 192 KiB .raw files contain 256×256 r8g8b8 texels in sRGB color space. Unused in the // original game, but designed to be used for texture augmentation
typedef RGB RAW192KiB[256][256];

// 768 KiB .raw files contain 512×512 r8g8b8 texels in sRGB color space. Unused in the original game, but designed for high-fidelity sky backgrounds.
typedef RGB RAW384KiB[512][512]; // 512 lines of 512 pixels each

Thanks 🙂

avatar
Krycztij

Unfortunately, I don’t think I can complete this until tomorrow — the new texture types need to be added to the 3d_file parser and to the renderer. It would, however, be of great help if you could tell me what slot number accepts the new types (e.g. slots 400–419: 129 KiB raw) and if you could send me a few sample shapes / textures / INIs for testing 🙂

avatar
mikew
Krycztij

closeSSDSession() must not be called if processSSDSessionInput() returned 0 (if the user closed the window). You use it to close the window from the program’s side of the interface; closing from the user’s side is handled automatically by processSSDSessionInput().

Home now, so can give further details:

If I run this code, that depends on the user to exit, I get a Windows error 0xc0000002:

from ctypes import *
lib=cdll.LoadLibrary('3view.dll')
s=c_wchar_p('f22.ssd')
sesh=lib.openSSDSession(s)
p=lib.processSSDSessionInput(sesh,0)
while p:
    p=lib.processSSDSessionInput(sesh,0)
    lib.drawSSDSession(sesh)

If I use the program to close 3view after a while, it exits cleanly … eg this:

from ctypes import *
lib=cdll.LoadLibrary('3view.dll')
s=c_wchar_p('f22.ssd')
sesh=lib.openSSDSession(s)
x=0
p=lib.processSSDSessionInput(sesh,0)
while x < 10000:
    p=lib.processSSDSessionInput(sesh,0)
    lib.drawSSDSession(sesh)
    x+=1
lib.closeSSDSession(sesh)
avatar
Krycztij
mikew

If I run this code, that depends on the user to exit, I get a Windows error 0xc0000002:

while p:
    p=lib.processSSDSessionInput(sesh,0)
    lib.drawSSDSession(sesh)

This loop will call drawSSDSession() even if processSSDSessionInput() returned zero, meaning that the session has already been destroyed. It should be if(p) lib.drawSSDSession(sesh).

But this has lead me to another error: for processSSDSessionInput(), the 2nd parameter is still swapped. I fixed it for .3’s, but forgot it for .ssd’s. Grmpf. Going to fix this now.

avatar
mikew

Well, that’s embarassing. :sofa1:

avatar
Krycztij

crap happens 🙂 And after all, it helped me find another bug!

I don’t mean to rush, but I’ve got the final packages ready. Tomorrow is my last day off work, so I guess it’s better to publish immediately.

Right off: There’s three parts in the source code which do not originate in my own work:

The last one is a copy of Visual C++ CRT’s snprintf_s() implementation. It has been modified heavily by me, adding features like counted strings and stripping off needless features. Nontheless, one can recognize it’s not originally written by me.

I tried to find out which license applies to the original code, but there was nothing to find. The original code is part of the Visual C++ package, and whatever is developed with their tools is free to distribute. Furthermore, it’s the source code for MSVCR100.DLL, which I am explicitly permitted to distribute. But that’s for the DLL itself; its source code is nowhere mentioned. I even downloaded multiple Visual Studio packages and read dozens of licenses, but nothing applied.

I don’t know if distributing that one file is perfectly legal. It is very unlikely that anyone ever notices it, let alone wonders about its license. Also, I’m trying to get rid of that code; I just didn’t have the time to rewrite it yet. So, I’ll upload it and it’ll be replaced with the next version. Just wanted to let you know.

P.S.: Wow, this forum censores itself. I wrote s**t happens, but it was automatically altered to crap happens … 😄

avatar
mikew

I downloaded the source+dll from the public link, but have a problem with the dll in that I have no control using the mouse, apart from closing the window. I don’t have time to try rebuilding it from source this evening.

avatar
DrKevDog
Krycztij

Unfortunately, I don’t think I can complete this until tomorrow — the new texture types need to be added to the 3d_file parser and to the renderer. It would, however, be of great help if you could tell me what slot number accepts the new types (e.g. slots 400–419: 129 KiB raw) and if you could send me a few sample shapes / textures / INIs for testing 🙂

It has been a while since I spent any real time on those textures / shapes and .inis, so I’ll have to collect the lot but I’ll get them to you.

avatar
Krycztij
Krycztij

But this has lead me to another error: for processSSDSessionInput(), the 2nd parameter is still swapped. I fixed it for .3’s, but forgot it for .ssd’s. Grmpf. Going to fix this now.

mikew

I downloaded the source+dll from the public link, but have a problem with the dll in that I have no control using the mouse, apart from closing the window. I don’t have time to try rebuilding it from source this evening.

Consider: zero means do not consider mouse and keyboard. You need to pass 1 there, just like with the .3 sessions.

avatar
mikew

Ah, I must have been using the dll from before you fixed it for the .3s.

I need to tidy up my folders again.

avatar
DrKevDog
mikew

Using that error message, I can find some of the texture loading code and see that there is a fixed limit of 250 of those textures. This limit could be increased, although there may be memory allocation side effects …
… but the next check in the code is for NPOT textures where the width and height is compared with minimum 32 and maximum 512.

So, theoretically, we could have 250 512x512 AGP textures.

It occurred to me that maximizing the texture surfaces would be the best solution. Is the above just a theoretical possibility? Have you been able to confirm that changing the NPOT values will give us the potential for 250 512x512 texture slots?

avatar
mikew

I can’t remember writing that this morning! … although I vaguely remember something along those lines some time ago. Can you post that error message again?

avatar
DrKevDog

The classic line is that memory is the second thing to go... (although my experience with computers suggest it is often the first 😄)

My apologies for the date discrepancy, I was hurried.

Original thread:
http://community.combatsim.com/topic/25920-taw-terrain-format/page__st__680#entry5140936

AUTO:005B83F9 loc_5B83F9:							 ; CODE XREF: sub_5B83DC+138j
AUTO:005B83F9				 sub	 ebp, 0C8h
AUTO:005B83FF				 cmp	 ebp, 0FAh
AUTO:005B8405				 jl	 short loc_5B8415
AUTO:005B8407				 push offset aErrorMaxsystem ; "ERROR : MAXSYSTEMTEXTURES needs increas"...
AUTO:005B840C				 call ds:off_683A98
AUTO:005B8412				 add	 esp, 4
AUTO:005B8415
AUTO:005B8415 loc_5B8415:							 ; CODE XREF: sub_5B83DC+29j
AUTO:005B8415				 cmp	 esi, 20h
AUTO:005B8418				 jnz	 loc_5B8519
AUTO:005B841E
AUTO:005B841E loc_5B841E:							 ; CODE XREF: sub_5B83DC+140j
AUTO:005B841E										 ; sub_5B83DC+14Cj ...
AUTO:005B841E				 cmp	 edi, 20h
AUTO:005B8421				 jnz	 loc_5B855A
AUTO:005B8427
AUTO:005B8427 loc_5B8427:							 ; CODE XREF: sub_5B83DC+181j
AUTO:005B8427										 ; sub_5B83DC+18Dj ...
AUTO:005B8427				 test ebx, ebx
AUTO:005B8429				 jnz	 short loc_5B8439
AUTO:005B842B				 push offset aNoFilename_ ; "No filename."
AUTO:005B8430				 call ds:off_683A98
AUTO:005B8436				 add	 esp, 4
AUTO:005B8519 loc_5B8519:							 ; CODE XREF: sub_5B83DC+3Cj
AUTO:005B8519				 cmp	 esi, 40h
AUTO:005B851C				 jz	  loc_5B841E
AUTO:005B8522				 cmp	 esi, 80h
AUTO:005B8528				 jz	  loc_5B841E
AUTO:005B852E				 cmp	 esi, 100h
AUTO:005B8534				 jz	  loc_5B841E
AUTO:005B853A				 cmp	 esi, 200h
AUTO:005B8540				 jz	  loc_5B841E
AUTO:005B8546				 push    ebp
AUTO:005B8547				 push    offset aWidthSpecified ; "Width specified for texture %d is not a"...
AUTO:005B854C				 call    ds:off_683A98
AUTO:005B8552				 add	 esp, 8
AUTO:005B8555				 jmp	 loc_5B841E
AUTO:005B855A ; ---------------------------------------------------------------------------
AUTO:005B855A
AUTO:005B855A loc_5B855A:							 ; CODE XREF: sub_5B83DC+45j
AUTO:005B855A				 cmp	 edi, 40h
AUTO:005B855D				 jz	  loc_5B8427
AUTO:005B8563				 cmp	 edi, 80h
AUTO:005B8569				 jz	  loc_5B8427
AUTO:005B856F				 cmp	 edi, 100h
AUTO:005B8575				 jz	  loc_5B8427
AUTO:005B857B				 cmp	 edi, 200h
AUTO:005B8581				 jz	  loc_5B8427
AUTO:005B8587				 push    ebp
AUTO:005B8588				 push    offset aHeightSpecifie ; "Height specified for texture %d is not "...
AUTO:005B858D				 call    ds:off_683A98
AUTO:005B8593				 add	 esp, 8
AUTO:005B8596				 jmp	 loc_5B8427
AUTO:005B859B ; ---------------------------------------------------------------------------

I will see what I can do with this later this evening.

avatar
mikew

OK, here’s what that decompiles to … and this must have been what I was looking at before.

signed int __userpurge sub_5B83DC<eax>(int a1<eax>, int a2<edx>, int a3<ebx>, int a4)
{
	int ST08_4_0; // ST08_4@0
	int v5; // ebx@1
	int v6; // ebp@1
	int v7; // edi@1
	int v8; // esi@1
	int v9; // ebp@2
	char v10; // cl@8
	int v11; // ST08_4@8
	int v13; // eax@8
	int v14; // eax@10
	__int16 v15; // ax@14
	int v16; // eax@26
	v6 = a1;
	v8 = a2;
	v7 = a3;
	v5 = a4;
	if ( !dword_6FC0F4 )
		sub_5B6AB0();
	v9 = v6 - 200;
	if ( v9 >= 250 )
		off_683A98("ERROR : MAXSYSTEMTEXTURES needs increasing.", ST08_4_0);
	if ( v8 != 32 )
	{
		if ( v8 != 64 )
		{
			if ( v8 != 128 )
			{
				if ( v8 != 256 )
				{
					if ( v8 != 512 )
						((int (*)(const char *, ...))off_683A98)("Width specified for texture %d is not a power of 2.", v9);
				}
			}
		}
	}
	if ( v7 != 32 )
	{
		if ( v7 != 64 )
		{
			if ( v7 != 128 )
			{
				if ( v7 != 256 )
				{
					if ( v7 != 512 )
						((int (*)(const char *, ...))off_683A98)("Height specified for texture %d is not a power of 2.", v9);
				}
			}
		}
	}
	if ( !v5 )
		off_683A98("No filename.", ST08_4_0);
	strcpy_();
	v11 = *(int *)((char *)&dword_6FC0E8 + 2) >> 16;
	v13 = 57 * (*(int *)((char *)&dword_6FC0E8 + 2) >> 16);
	byte_E4C8FC[v13] = v10;
	*(int *)((char *)&dword_E4C8FD + v13) = v8;
	*(int *)((char *)&dword_E4C901 + v13) = v7;
	if ( v10 )
	{
		if ( v10 == 1 )
		{
			v14 = nmalloc_();
			dword_E50F30 = v14;
			if ( !v14 )
				off_683A98("ERROR : Failed to allocate memory for loading.", v11);
			sub_5B6B50();
			sub_5B761C();
		}
		else
		{
			off_683A98("Invalid texture format specified.", v11);
		}
	}
	else
	{
		v16 = nmalloc_();
		dword_E50F30 = v16;
		if ( !v16 )
			off_683A98("ERROR : Failed to allocate memory for loading.", v11);
		sub_5B6B50();
		sub_5B6C20();
	}
	if ( dword_E50F30 )
		nfree_();
	v15 = dword_6FC0EC;
	word_E4C6E0[v9] = dword_6FC0EC;
	LOWORD(dword_6FC0EC) = v15 + 1;
	return 1;
}
avatar
DrKevDog

Thus far the editing to modify the accepted texture dimensions has met with some obstacles. When the F22 executable is parsed and I dump the memory there are entries for the textures which it will not allow me to modify. Perhaps expanding the file numbers in an alternate manner would be useful.

v9 = v6 - 200;
if ( v9 >= 250 )
	off_683A98("ERROR : MAXSYSTEMTEXTURES needs increasing.", ST08_4_0);

This identifies 201 to 450 as being SYSTEM TEXTURES. I would like to define the USER TEXTURES.

AUTO:005B87BC arg_0         = dword ptr 10h
AUTO:005B87BC
AUTO:005B87BC                 push esi
AUTO:005B87BD                 push edi
AUTO:005B87BE                 push ebp
AUTO:005B87BF                 mov  ebp, eax
AUTO:005B87C1                 mov  esi, edx
AUTO:005B87C3                 mov  edi, ebx
AUTO:005B87C5                 mov  ebx, [esp+arg_0]
AUTO:005B87C9                 cmp  ds:dword_6FC0F4, 0
AUTO:005B87D0                 jz   loc_5B88E1
AUTO:005B87D6
AUTO:005B87D6 loc_5B87D6:                             ; CODE XREF: sub_5B87BC+12Aj
AUTO:005B87D6                 cmp  word ptr ds:dword_6FC0EC+2, 12Ch
AUTO:005B87DF                 jl   short loc_5B87EF
AUTO:005B87E1                 push offset aErrorMaxuserte ; "ERROR : MAXUSERTEXTURES needs increasin"...
AUTO:005B87E6                 call ds:off_683A98
AUTO:005B87EC                 add  esp, 4
AUTO:005B87EF
AUTO:005B87EF loc_5B87EF:                             ; CODE XREF: sub_5B87BC+23j
AUTO:005B87EF                 cmp  esi, 20h
AUTO:005B87F2                 jnz  loc_5B88EB
AUTO:005B87F8
AUTO:005B87F8 loc_5B87F8:                             ; CODE XREF: sub_5B87BC+132j
AUTO:005B87F8                                         ; sub_5B87BC+13Ej ...
AUTO:005B87F8                 cmp  edi, 20h
AUTO:005B87FB                 jnz  loc_5B8934
AUTO:005B8801

It seems to me that 300 (12C) is an important determinant, however, I am not yet sure what that is. Does anyone know what that actually compares to?

Also, only AGP USER TEXTURES have a reference to a callback function:

'ERROR : Encountered user AGP texture with no callback.',0

Is that significant?

avatar
mikew

That 300 is MAXUSERTEXTURES and appears to be hard coded to 300. This could be increased with a hex edit (at 0x2faaf0 in the glide f22.dat), with unknown consequences…

avatar
DrKevDog

That’s good to know. I’m curious to know why you went to glide, are you suggesting a way to implement the agp user textures in glide?
Thus far hex editing has only returned error messages regarding user textures being NPOT. I may have better luck with editing editing the instruction opcodes.

avatar
mikew

No reason to pick the Glide .dat at all. It happened to be the one I was using when I first used IDA.

avatar
mikew

I’ve hit a bit of a snag while trying to operate the 3view dll from another Windows program.

While I can control the dll ok from a Python script, if I try and do the same from a wxPython which is itself a window, I don’t see any effect on 3view until I manually move the focus back to the 3view window.
I suppose that this is to be expected, as Windows doesn’t know what I want to do.

There must be a way to do this from wxPython, but it means yet more internet searching. 🙁

avatar
Krycztij

Does wxPython give you a window handle (natively called HWND in the WinAPI)? I can write an interface for strange windows then, which will leave all window management to the calling application.

avatar
mikew

If it doesn’t, there’ll be some other Python library that does.
I’ll check later…

Sorry, I was just ranting against my own ignorance. It’s the first time I’ve tried anything like this.

avatar
mikew

As usual, problems like this can be solved in Python by throwing libraries at them. In this case a wrapper to the win32 API.

So, this code seems to work:

import win32gui
hwnd = win32gui.FindWindow('3view',None)
if hwnd:
win32gui.SetFocus(hwnd)

Maybe I could use this approach to resize and/or move the 3view window. I’ll have to experiment. 🙂

avatar
Krycztij

Still, if some day you have a problem and need to create your own window, just say so. Technically, the DLL could render to any window you’ve got a handle for – and if you need that, I’ll implement it.

avatar
mikew

Thanks.
At the moment, I just want a quick way to visualise my theories about ssd opcode actions...and I now have the necessary technology. 🙂

By the way, I’m using wxPython since it seems like the easiest way to build a GUI. As I don’t really know what I’m doing anyway, I’m open to suggestions for a better way of doing it.

avatar
DrKevDog
mikew

That 300 is MAXUSERTEXTURES and appears to be hard coded to 300. This could be increased with a hex edit (at 0x2faaf0 in the glide f22.dat), with unknown consequences…

I have not yet gotten around to MAXUSERTEXTURES, however, I did some work on MAXSYSTEMTEXTURES and increased the maximum textures limit from 450 to 460. At index location 461 there is a block of 64 (IIRC) locales reserved for select TM textures, the ASCII names of which are obtained directly from the shape file header, as opposed to the [globaltextures] index.

This is the area where the reserved positions are located in memory:

450 \cf2 00A5A240 \cf1 00 00 00 00 00 00 00 00 6D 6F 6F 6E 00 00 00 00 \cf1 ........moon....
00A5A250................
00A5A260................
00A5A270................
451 "MAXSYSTEMTEXTURES needs increasing"
00A5A280................
00A5A290................
00A5A2A0................
00A5A2B0................
00A5A2C0................
00A5A2D0................
00A5A2E0................
00A5A2F0................
00A5A300................
00A5A310................
00A5A320................
00A5A330................
00A5A340................
00A5A350................
00A5A360................
00A5A370................
00A5A380................
00A5A390................
00A5A3A0................
00A5A3B0................
00A5A3C0................
00A5A3D0................
00A5A3E0................
00A5A3F0................
00A5A400................
00A5A410................
00A5A420................
00A5A430................
00A5A440................
00A5A450................
00A5A460................
00A5A470................
00A5A480................
00A5A490................
00A5A4A0................
00A5A4B0................
00A5A4C0................
00A5A4D0................
00A5A4E0................
00A5A4F0................
48kb 256 x 192 8bit(indexed) .tm:
461 \cf2 00A5A500 \cf1 00 00 00 00 00 00 00 00 52 45 46 45 43 54 00 00 \cf1 ........REFECT..
00A5A510................
00A5A520................
00A5A530................
00A5A540 \cf1 00 00 00 00 00 00 00 00 44 45 41 44 43 41 4D 31 \cf1 ........DEADCAM1
00A5A550................
00A5A560................
00A5A570................
00A5A580 \cf1 00 00 00 00 00 00 00 00 45 58 50 5F 36 00 00 00 \cf1 ........EXP_6...
00A5A590................
00A5A5A0................
00A5A5B0................
00A5A5C0 \cf1 00 00 00 00 00 00 00 00 54 41 53 4B 45 52 32 00 \cf1 ........TASKER2.
00A5A5D0................
00A5A5E0................

I have yet to determine if there is anything significantly unique about the material properties but I will test for that. As can be seen from the above, the block starts with REFECT.tm which is loaded exclusively from the active F22.3 shape file.
The textures loaded into any of these 64 positions can be swapped by modifying the shape files header texture characters. I will work on the USER textures forthwith.

avatar
Krycztij

I’m polishing the current version, so I can be sure to give you working source code – I hope it’s finished tomorrow.

In the meantime, I tested it with EF2000’s AN_225.3 and it crashed – drawing the landing gear produced too many drawing instructions for my rasterizer. Well, that Antonov certainly is huge 😉

avatar
mikew

I think in EF2000, the AN225 files are corrupt. IIRC, the working AN225 model is actually antonov.3.

avatar
Krycztij

No, it really is a problem with my renderer. The AN 225 has lots of tires, and the draw disc opcode is used for them. Direct3D cannot natively draw discs, so I must emulate them as a 16-sided polygon. 190 discs with 16 vertices each, that’s about 50 KiB – quite a lot of scratch space …

avatar
Krycztij

Okay; the new version is up and because I haven’t done this for soooo long, I accidentially broke the official TFXplorer download … but I think I’ve got it fixed.

Anyway: I had done lots of tiny little modifications over the last months (and some major changes to the code you should not notice in normal use), and I don’t know if anything broke. If you’ve got the time (I know EF2000 has top priority), try it.

I’ve also uploaded a new version of TFXplorer. The whole infrastructure regarding joysticks has been reworked (I’d love to have dynamic key mapping some time in the future) and lots of other technical things (see file comment). Hat switches won’t work, I’ll have a look at it tomorrow.

Cry out loud if anything broke.

avatar
DrKevDog
Krycztij

No, it really is a problem with my renderer. The AN 225 has lots of tires, and the draw disc opcode is used for them. Direct3D cannot natively draw discs, so I must emulate them as a 16-sided polygon. 190 discs with 16 vertices each, that’s about 50 KiB – quite a lot of scratch space …

Ouch!

avatar
Krycztij

Oh yes DKD – didn’t implement the AGP textures yet. Also tomorrow … need sleep badly.

avatar
DrKevDog

This is good. Let me know if you need anything. Thanks and sleep well.

avatar
Wombat1940

I’m watching as a passive enthusiastic Noob. 😉 But please keep up the good work. 👍 Likewise, if I can help 🤷 let me know.

Edit: Maybe I can beta test the new TFXplorer?

avatar
Krycztij

Thank you!

Yes Wombat you can 🙂 Get the latest build here: https://app.box.com/s/r6xc1lu6froyrv9x8w2y

When you click, you will now accelerate gently. This should have made the explorer much more accurate.

avatar
mikew

TFXplorer looks much improved after the brief test I’ve done with TAW. The joystick (Logitech Attack 3) now works fine on this machine and I haven’t seen any deformed models at oil installations. The finer control in explorer mode makes lining up those screenshots much easier. 👍

For 3view, I’ve only looked at some EF2000 models, although we know that some (maybe most) are corrupt. Nice job on the AN225’s wheels. 🙂

The main efa.3 model handling is also much improved, but I guess we still have some things to work out regarding that model.

…and they even work with Win8.1. 🙇

avatar
Wombat1940
mikew

…and they even work with Win8.1.

8.1??? No … not something else new … I’m just coming to grips with 8.0 … 😉

avatar
Wombat1940
Krycztij

Thank you!

Yes Wombat you can 🙂 Get the latest build here: https://app.box.com/s/r6xc1lu6froyrv9x8w2y

When you click, you will now accelerate gently. This should have made the explorer much more accurate.

👍 Downloading now.

avatar
Wombat1940
Krycztij

Thank you!

Yes Wombat you can 🙂 Get the latest build here: https://app.box.com/s/r6xc1lu6froyrv9x8w2y

When you click, you will now accelerate gently. This should have made the explorer much more accurate.

OK. Assuming the controls remain unchanged then I note the following:

When I jump in the ’pit I steadily climb and don’t seem to be able to achieve level flight unless I use my stick.

Usage:

In-game:

You can switch to explorer mode via SHIFT+Q; X: SHIFT + Q only works in explorer mode

Hope this is helpful …

EDIT This is on my PC running WinXP x32bit

avatar
Krycztij

Wow, thank you very much!


mikew

TFXplorer looks much improved after the brief test I’ve done with TAW. The joystick (Logitech Attack 3) now works fine on this machine

Glad to hear that!

mikew

and I haven’t seen any deformed models at oil installations.

But I saw some 🙁 I suspect this is the same issue as with the AH64 rotor blades, and the open canopy F-22. No idea how to fix that, or if it’s worth the trouble …

mikew

The main efa.3 model handling is also much improved, but I guess we still have some things to work out regarding that model.

We have to work out even more. I noticed many many EF2000 shapes being drawn twice or thrice in the same place. It seems like opcodes ADF/TAW uses for time of day are used in EF2000 for branching 🙁 Lots of work to do …


Wombat1940

When I jump in the ’pit I steadily climb and don’t seem to be able to achieve level flight unless I use my stick.

How many g’s do you see while climbing? (this can tell me how far my joystick input is off)

Wombat1940
  • Repeatedly press S to increase viewing range, or X to decrease. Neither work
  • NUMPAD 6, 2, 4, and 8 glide north, south, west, and east. Non work
  • SHIFT+F1 toggles wireframe rendering. Doesn’t for me

Yes, I disabled those for in-game mode. (S and X will be needed for other things, and it can f**k up flight physics pretty bad if a plane glides North some kilometers per second)

Wombat1940
  • Repeatedly press S to increase viewing range, or X to decrease. Not for me …

Can you please try again (explorer mode, not in-game)? You might have to press it ten or twenty times to see an effect …

Wombat1940
  • F3 toggles AGP textures. Not sure what I’m supposed to see with this 🤷

It’s switching the D3D and the Glide version; it makes some difference with special effects like looking directly into the sun.

Wombat1940

Hope this is helpful …

Be sure it is! I don’t see my own mistakes, that’s why I rely heavily on your testing. Even more important, I don’t have a Windows XP machine here for testing, so right now you’re my only feedback on compatibility. Thank you very much for your effort!

One more thing: Did you test snapshots (F2)? They will work in ADF/TAW only (TODO for me right now: Implement that for EF2000!)

avatar
Krycztij

I think I’ve gotten 512x256 and 512² true-color textures working:

19dt.png

They’ll be in the next upload (probably tonight); need to track down some other bugs first.

avatar
Wombat1940
Krycztij

How many g’s do you see while climbing? (this can tell me how far my joystick input is off)

About 1.7G’s as I climb into the ’pit, but if I speed up >700 knots it settles to 1.0 - 1.1G. I now think it could be ok at cruising speed. Sorry about that. 😳

Krycztij

Can you please try again, S and X, (explorer mode, not in-game)? You might have to press it ten or twenty times to see an effect …

Worked perfectly this time. Again my mistake … :sofa1:

Krycztij

It’s switching the D3D and the Glide version; it makes some difference with special effects like looking directly into the sun.

Yes I can see it now when looking at the sun. The text also changes.

Krycztij

One more thing: Did you test snapshots (F2)? They will work in ADF/TAW only (TODO for me right now: Implement that for EF2000!)

Ye … fine. Explorer mode only of course. I’d forgotten how to do those. I was going to ask. 😄 I think you had set it up previously for me, specifically. Just magic for recon shots. 🙇

avatar
Wombat1940
Krycztij

I think I’ve gotten 512×256 and 512² true-color textures working:

19dt.png

They’ll be in the next upload (probably tonight); need to track down some other bugs first.

I love the fluffy white bit … and the stormy look underneath …

avatar
Krycztij
Wombat1940

About 1.7G’s as I climb into the ’pit, but if I speed up >700 knots it settles to 1.0 - 1.1G. I now think it could be ok at cruising speed. Sorry about that. 😳

No, it could indeed be my fault. Looks like a bug in the joystick calibration. Could you please copy the console output and paste it here? It’s

If you’re lost, have a look at Mike’s post: http://community.combatsim.com/topic/29572-tfx-explorer/?p=5154467

This would allow me to check if there’s a problem with my code (forgot a value) or with your joystick (calibration and such).

Wombat1940

Worked perfectly this time. Again my mistake … :sofa1:

Alright 🙂

Wombat1940

Yes I can see it now when looking at the sun. The text also changes.

For the next build, I changed the text to version: Glide / Direct3D. Should be better than just cryptic letters 🙂

Wombat1940

Ye … fine. Explorer mode only of course. I’d forgotten how to do those. I was going to ask. 😄 I think you had set it up previously for me, specifically. Just magic for recon shots. 🙇

I guess I’ll put a reminder in the bottom-left too (like I did for F5); that should make it easier.

Thanks again!

avatar
DrKevDog
Wombat1940

I love the fluffy white bit … and the stormy look underneath …

The learning curve is not too steep (I hope to pull you in at some point). The important thing is that with this implemented in TFXplorer, there is no limit to the custom skies we can build. A note of importance is that these static clouds were designed to be coupled with the dynamic cloud levels for optimal effect. Once we get that implemented I hope to showcase the beautiful potential contained in the new skybox concept 😉

PS: I hadn’t noticed those clouds before; stunning 👍

avatar
Wombat1940
DrKevDog

The learning curve is not too steep (I hope to pull you in at some point). The important thing is that with this implemented in TFXplorer, there is no limit to the custom skies we can build. A note of importance is that these static clouds were designed to be coupled with the dynamic cloud levels for optimal effect. Once we get that implemented I hope to showcase the beautiful potential contained in the new skybox concept 😉

PS: I hadn’t noticed those clouds before; stunning 👍

This sounds really good. Anything that improves Eye Candy is a big thing for me. Does the same apply to EF2000?

avatar
Wombat1940
Krycztij

No, it could indeed be my fault. Looks like a bug in the joystick calibration. Could you please copy the console output and paste it here? It’s

recognized HID "Thrustmaster HOTAS Cougar Joystick"
axis 0139 (001C): 0-7
axis 0130 (001D): 0-65535
axis 0131 (001E): 0-65535
axis 0132 (001F): 0-255
axis 0133 (0020): 0-255
axis 0136 (0021): 0-255
axis 0135 (0022): 0-255
button 0901 (0000)
button 0902 (0001)
button 0903 (0002)
button 0904 (0003)
button 0905 (0004)
button 0906 (0005)
button 0907 (0006)
button 0908 (0007)
button 0909 (0008)
button 090A (0009)
button 090B (000A)
button 090C (000B)
button 090D (000C)
button 090E (000D)
button 090F (000E)
button 0910 (000F)
button 0911 (0010)
button 0912 (0011)
button 0913 (0012)
button 0914 (0013)
button 0915 (0014)
button 0916 (0015)
button 0917 (0016)
button 0918 (0017)
button 0919 (0018)
button 091A (0019)
button 091B (001A)
button 091C (001B)

just one HID connected

TFXplorer
by Pjotr Krycztij 2013-10-22 00:13

special thanks to:
    mikew
    DrKevDog
    Home Fries

thanks to
    Benjamin Haisch (RA decompression code)
    ... and the COMBATSIM.COM community

did1st.dat not opened; no patches will be considered
did.dat not opened; loading extracted files
file 3\BALL_3.3 not found
Krycztij

I guess I’ll put a reminder in the bottom-left too (like I did for F5); that should make it easier.

I suppose you need to update the first thread here when TFXplorer Oct build is released to included the changes?

avatar
Krycztij
DrKevDog

The important thing is that with this implemented in TFXplorer, there is no limit to the custom skies we can build.

Bad news: I am not yet parsing lev\redXXXX.txt yet. That means cloud-layers and fixed sky flag have to be hard-coded into my TFXplorer right now. I’ll write a parser soon (going to need your help for this), but please understand that this will be after the stable version / source code release I was scheduling for this week …

Nontheless, you can check individual files (like your modified newhoriz.3) with 3View (if texture names do not exceed eight characters). I have uploaded the current build with 512×256 and 512×512 support here: https://app.box.com/s/q67hdm3b8ij06kopc8yp


@Wombat: Thank you! The line axis 0131 (001E): 0-65535 indicates for me that your joystick has not been calibrated (no center position is found). 1.3 g also indicates just a few percent off-center. If it’s not too annoying to you, just leave it this way 🙂

Wombat1940

I suppose you need to update the first thread here when TFXplorer Oct build is released to included the changes?

Yes, absolutely. I will release when there are no more doubts that the current version runs stable, and the thread will then be adjusted as well.

By the way, a new build is up: https://app.box.com/s/9pvhy7a03t8c2f1h0keq

It would be nice if you had a quick look. Changes of interest are

avatar
DrKevDog
Krycztij

Bad news: I am not yet parsing lev\redXXXX.txt yet. That means cloud-layers and fixed sky flag have to be hard-coded into my TFXplorer right now. I’ll write a parser soon (going to need your help for this), but please understand that this will be after the stable version / source code release I was scheduling for this week …

Nontheless, you can check individual files (like your modified newhoriz.3) with 3View (if texture names do not exceed eight characters). I have uploaded the current build with 512×256 and 512×512 support here: https://app.box.com/s/q67hdm3b8ij06kopc8yp

lev\redXXXX.txt are are very important and I will review my notes in order to contribute. In the mean time, I will continue working with the base TAW so thanks for the updated 3view 👍

avatar
Wombat1940
Krycztij

@Wombat: Thank you! The line axis 0131 (001E): 0-65535 indicates for me that your joystick has not been calibrated (no center position is found). 1.3 g also indicates just a few percent off-center. If it’s not too annoying to you, just leave it this way 🙂

Ye … I actually calibrated immediately after I posted thinking the problem could be my end. There is some play (loose movement) in the Cougar stick (its old) and accurate center calibration now difficult. I’m working on it, but its better than before I did tests for you. Many years ago now, I was studying 1st year uni. Physics. Our first prac. class centered around dangers in interpreting experiment results. Just amazing. One has to be so careful.

Krycztij

Yes, absolutely. I will release when there are no more doubts that the current version runs stable, and the thread will then be adjusted as well.

By the way, a new build is up: https://app.box.com/s/9pvhy7a03t8c2f1h0keq

It would be nice if you had a quick look. Changes of interest are

  • added compass in EF2000 mode
  • enabled screenshots in EF2000 mode
  • renamed AGP on/off to version Glide/Direct3D

Downloading now. All my testing has been on my PC (XP) with TAW2.0. I don’t have EF2000 on my PC but its on my Notebook running with Win8. I’ll give it a go on my PC first and then try it with EF2000 on the Notebook.

avatar
Wombat1940
Krycztij

@Wombat: Thank you! The line axis 0131 (001E): 0-65535 indicates for me that your joystick has not been calibrated (no center position is found). 1.3 g also indicates just a few percent off-center. If it’s not too annoying to you, just leave it this way 🙂

Desktop PC (full spec. in my signature) with XP and TAW2.0 TFXplorer version 2013-10-23

Cougar ’Stick maintaining 140% throttle.: It starts at 0.9g but immediately jumps to 1.7g. Steadily climb to 40 000ft and then g slowly reduces to .4g with me diving at the ground. (At no time have touched the ’stick.) Now I do … naturally … and level her off … and let go of the ’stick … it flies level (almost) at 0.9g. Now I can fly around no trouble. 👍 I’ve just done a check flying in TAW2.0 with same Cougar settings. It pulls 1.1g (hands free, 140% throttle) and steadily climbs … naturally. 😉

recognized HID "C-Media Electronics Inc. USB PnP Audio Device"
invalid HID: could not retrieve its button classes
recognized HID "Thrustmaster HOTAS Cougar Joystick"
axis 0139 (001C): 0-7
axis 0130 (001D): 0-65535
axis 0131 (001E): 0-65535
axis 0132 (001F): 0-255
axis 0133 (0020): 0-255
axis 0136 (0021): 0-255
axis 0135 (0022): 0-255
button 0901 (0000)
button 0902 (0001)
button 0903 (0002)
button 0904 (0003)
button 0905 (0004)
button 0906 (0005)
button 0907 (0006)
button 0908 (0007)
button 0909 (0008)
button 090A (0009)
button 090B (000A)
button 090C (000B)
button 090D (000C)
button 090E (000D)
button 090F (000E)
button 0910 (000F)
button 0911 (0010)
button 0912 (0011)
button 0913 (0012)
button 0914 (0013)
button 0915 (0014)
button 0916 (0015)
button 0917 (0016)
button 0918 (0017)
button 0919 (0018)
button 091A (0019)
button 091B (001A)
button 091C (001B)

just one HID connected

TFXplorer
by Pjotr Krycztij 2013-10-23 12:15

special thanks to:
    mikew
    DrKevDog
    Home Fries

thanks to
    Benjamin Haisch (RA decompression code)
    ... and the COMBATSIM.COM community

did1st.dat not opened; no patches will be considered
did.dat not opened; loading extracted files
file 3\BALL_3.3 not found
Krycztij

Yes, absolutely. I will release when there are no more doubts that the current version runs stable, and the thread will then be adjusted as well.

By the way, a new build is up: https://app.box.com/s/9pvhy7a03t8c2f1h0keq

It would be nice if you had a quick look. Changes of interest are

  • added compass in EF2000 mode
  • enabled screenshots in EF2000 mode
  • renamed AGP on/off to version Glide/Direct3D

Usage:

In-game:

You can switch to explorer mode via SHIFT+Q; X:

Now for the Notebook and Win8/EF2000 …

avatar
Krycztij
Wombat1940

Desktop PC (full spec. in my signature) with XP and TAW2.0 TFXplorer version 2013-10-23

Cougar ’Stick maintaining 140% throttle.: It starts at 0.9g but immediately jumps to 1.7g. Steadily climb to 40 000ft and then g slowly reduces to .4g with me diving at the ground. (At no time have touched the ’stick.) Now I do … naturally … and level her off … and let go of the ’stick … it flies level (almost) at 0.9g. Now I can fly around no trouble. 👍 I’ve just done a check flying in TAW2.0 with same Cougar settings. It pulls 1.1g (hands free, 140% throttle) and steadily climbs … naturally. 😉

Glad to hear! By the way: I put you on the "special thanks" list for the next build …

Wombat1940
  • F5 brings you back to in-game mode. OK but if you left it PAUSED it returns UNPAUSED

This was planned as a feature – you already told the program to fly by pressing F5; no need to repeat yourself by unpausing it. But if that’s confusing, I can change it 🙂

avatar
Wombat1940
Krycztij

By the way: I put you on the "special thanks" list for the next build …

Thank you. 👍 That’s very nice, but really my input is very minimal. I just don’t want you all to stop doing  what you’re doing … 😉 It such good stuff with super outcomes …

Krycztij

This was planned as a feature – you already told the program to fly by pressing F5; no need to repeat yourself by unpausing it. But if that’s confusing, I can change it 🙂

Hmmmmmm … IMHO, F5 should just returns you to game mode … in the same mode you left it. Why: I might have left game mode in PAUSE in a perfect position to take a screenshot, etc, and I need to come back to game mode to tweak my position slightly, only to find I’m bouncing off the ground or something. This an actual case and similar to that tutorial here which I’m re-doing and beta testing . Except I wouldn’t be bouncing off the ground, I’d be making a hole in it. 😄 My 2c worth. 😉

avatar
Wombat1940
Krycztij
  • renamed AGP on/off to version Glide/Direct3D

Sorry missed this before: works fine, also like the note about F2 (and F5). Back to Win8 and EF2000 … please stand by …

avatar
Wombat1940

Is this the place to make comments about TFXplorer or would it be better if I went the its own specific thread and out of the hair of 3view?

avatar
Krycztij
Wombat1940

Is this the place to make comments about TFXplorer or would it be better if I went the its own specific thread and out of the hair of 3view?

You’re right, better proceed here: http://community.combatsim.com/topic/29572-tfx-explorer/page-29#entry5157090

avatar
Wombat1940

Deleted

avatar
DrKevDog

Just a little house cleaning here, was having a problem with my .3 file counts using the clean directories. The following files are erroneous:

  1. MI401.3 is still RA compressed
  2. FKDW7.3 is identical to hardware.tm\tex_9.tm
  3. SCRE.3 is identical to agp\wispy.raw
avatar
mikew

Thank you.

mi401.3 is the last file in did.dat and for some reason the decompressor stops immediately when my Python script ends.
If I ever get around to making a better script, I’ll take this into account.

avatar
DrKevDog

The MI401.3 is minor issue, the script does a good job of what you programmed it to do. What I could use immediately is the most updated list of file names you were keeping, how can I get that from you?