Qhimm.com Forums
Miscellaneous Forums => Troubleshooting => Topic started by: Marco on 2003-08-15 08:35:44
-
I've got this great idea to improve the graphical performance of FF7. Unfortunately I do not possess to skills required to do this.
Basically "we" are writing an OpenGL wrapper and a GLUT wrapper, and improving it to fix known issues.
Some of the features would be. (All features should be optional and fully configurable)
Some have complained about the speed at which the motorcycle game runs at (I get that problem too). So to combat that we enable a delay on the calls to bring the game to an acceptable speed.
Then anti-aliasing would be good to implement.
Support for more resolutions would be neat.
Hehe, 6x anti-aliasing in 1280*1024, ought to look good.
The functions FF7 imports are:
[opengl32.dll]
glAlphaFunc
glBegin
glBindTexture
glBlendFunc
glCallList
glClear
glClearColor
glClearDepth
glColor4ub
glColorMask
glColorPointer
glCullFace
glDeleteLists
glDeleteTextures
glDepthFunc
glDepthMask
glDepthRange
glDisable
glDisableClientState
glDrawBuffer
glDrawElements
glEnable
glEnableClientState
glEnd
glEndList
glFinish
glFlush
glFrontFace
glGenLists
glGenTextures
glGetBooleanv
glGetError
glGetIntegerv
glGetString
glHint
glIndexMask
glLineWidth
glLoadIdentity
glLoadMatrixf
glMatrixMode
glNewList
glOrtho
glPixelStorei
glPointSize
glPolygonMode
glReadBuffer
glReadPixels
glRenderMode
glShadeModel
glTexCoord2f
glTexCoordPointer
glTexEnvi
glTexImage2D
glTexParameteri
glVertex3f
glVertexPointer
glViewport
wglCreateContext
wglDeleteContext
wglGetProcAddress
wglMakeCurrent
[glu32.dll]
gluDeleteTess
gluNewTess
gluTessBeginContour
gluTessBeginPolygon
gluTessCallback
gluTessEndContour
gluTessEndPolygon
gluTessNormal
gluTessProperty
gluTessVertex
-
Correct me if im wrong, but higher resulutions wont work unless you remake the fonts and im sure the menu will be screwed up as well. But I like the idea of playing FF7 in opengl, although glide would be nice :P
-
Correct me if im wrong, but higher resulutions wont work unless you remake the fonts and im sure the menu will be screwed up as well. But I like the idea of playing FF7 in opengl, although glide would be nice :P
Higher resolutions should work if we do it properly (and if we do it at all).
The game probably uses either blitting or ortho mode to draw 2D sprites. By using the qouta between the resolution the game thinks it's running in and the resolution we have overrided it to we will be able to scale the input sent to our library to the correct values before we forward them to the original rendering code. Unfortunately this would create some minor (I hope) graphical flaws due to the neccessary truncations involved.
I don't have the skills to make this change, all I have is a generic idea of how opengl/directx works from a developers perspective :(
If you put the game to work in software it'll use opengl.
-
The game appears to use OpenGL no matter what rendering mode you are using.
-
Heyheyhey, wait a second.
Why fo you think that FF7 uses OpenGL? It doesn't. It uses Direct3d.
If it would be using OpenGL, there wouldn't be such problems in increasing the resolution and quality...
Here's a list of all functions FF7 imports:
Names in ff7
Address Section Type ( Name Comment
007AC1DC .rdata Import MSACM32.acmStreamClose
007AC1E8 .rdata Import MSACM32.acmStreamConvert
007AC1E0 .rdata Import MSACM32.acmStreamOpen
007AC1E4 .rdata Import MSACM32.acmStreamPrepareHeader
007AC1EC .rdata Import MSACM32.acmStreamSize
007AC1D8 .rdata Import MSACM32.acmStreamUnprepareHeader
007AC244 .rdata Import ( USER32.AdjustWindowRect
007AC22C .rdata Import ( USER32.BeginPaint
007AC140 .rdata Import ( KERNEL32.CloseHandle
007AC2BC .rdata Import ole32.CoCreateInstance
007AC2C0 .rdata Import ole32.CoInitialize
007AC158 .rdata Import ( KERNEL32.CompareStringA
007AC108 .rdata Import ( KERNEL32.CompareStringW
007AC2C4 .rdata Import ole32.CoUninitialize
007AC0AC .rdata Import ( KERNEL32.CreateDirectoryA
007AC1D0 .rdata Import ( KERNEL32.CreateFileA
007AC06C .rdata Import ( KERNEL32.CreateProcessA
007AC0CC .rdata Import ( KERNEL32.CreateThread
007AC240 .rdata Import ( USER32.CreateWindowExA
007AC218 .rdata Import ( USER32.DefWindowProcA
007AC068 .rdata Import ( KERNEL32.DeleteCriticalSection
007AC0D4 .rdata Import ( KERNEL32.DeleteFileA
007AC24C .rdata Import ( USER32.DestroyWindow
007AC01C .rdata Import DDRAW.DirectDrawCreate
007AC018 .rdata Import DDRAW.DirectDrawEnumerateA
007AC024 .rdata Import DINPUT.DirectInputCreateA
007AC030 .rdata Import DSOUND.DirectSoundCreate
007AC02C .rdata Import DSOUND.DirectSoundEnumerateA
007AC254 .rdata Import ( USER32.DispatchMessageA
007AC228 .rdata Import ( USER32.EndPaint
007AC080 .rdata Import ( KERNEL32.EnterCriticalSection
007AC128 .rdata Import ( KERNEL32.ExitProcess
007AC0C8 .rdata Import ( KERNEL32.ExitThread
007AC0B4 .rdata Import ( KERNEL32.FileTimeToLocalFileTime
007AC0B8 .rdata Import ( KERNEL32.FileTimeToSystemTime
007AC0BC .rdata Import ( KERNEL32.FindClose
007AC0C4 .rdata Import ( KERNEL32.FindFirstFileA
007AC0C0 .rdata Import ( KERNEL32.FindNextFileA
007AC1C8 .rdata Import ( KERNEL32.FlushFileBuffers
007AC054 .rdata Import ( KERNEL32.FormatMessageA
007AC09C .rdata Import ( KERNEL32.FreeEnvironmentStringsA
007AC160 .rdata Import ( KERNEL32.FreeEnvironmentStringsW
007AC16C .rdata Import ( KERNEL32.FreeLibrary
007AC174 .rdata Import ( KERNEL32.GetACP
007AC214 .rdata Import ( USER32.GetActiveWindow
007AC220 .rdata Import ( USER32.GetAsyncKeyState
007AC120 .rdata Import ( KERNEL32.GetCommandLineA
007AC170 .rdata Import ( KERNEL32.GetCPInfo
007AC154 .rdata Import ( KERNEL32.GetCurrentDirectoryA
007AC14C .rdata Import ( KERNEL32.GetCurrentProcess
007AC188 .rdata Import ( KERNEL32.GetCurrentThreadId
007AC20C .rdata Import ( USER32.GetDC
007AC048 .rdata Import ( GDI32.GetDeviceCaps
007AC0D8 .rdata Import ( KERNEL32.GetDriveTypeA
007AC164 .rdata Import ( KERNEL32.GetEnvironmentStrings
007AC168 .rdata Import ( KERNEL32.GetEnvironmentStringsW
007AC05C .rdata Import ( KERNEL32.GetExitCodeProcess
007AC0F4 .rdata Import ( KERNEL32.GetFileType
007AC0DC .rdata Import ( KERNEL32.GetFullPathNameA
007AC21C .rdata Import ( USER32.GetKeyState
007AC050 .rdata Import ( KERNEL32.GetLastError
007AC1B4 .rdata Import ( KERNEL32.GetLocaleInfoA
007AC104 .rdata Import ( KERNEL32.GetLocaleInfoW
007AC0E0 .rdata Import ( KERNEL32.GetLocalTime
007AC098 .rdata Import ( KERNEL32.GetModuleFileNameA
007AC118 .rdata Import ( KERNEL32.GetModuleHandleA
007AC178 .rdata Import ( KERNEL32.GetOEMCP
007AC12C .rdata Import ( KERNEL32.GetProcAddress
007AC11C .rdata Import ( KERNEL32.GetStartupInfoA
007AC0F8 .rdata Import ( KERNEL32.GetStdHandle
007AC044 .rdata Import ( GDI32.GetStockObject
007AC180 .rdata Import ( KERNEL32.GetStringTypeA
007AC114 .rdata Import ( KERNEL32.GetStringTypeW
007AC0E4 .rdata Import ( KERNEL32.GetSystemTime
007AC0F0 .rdata Import ( KERNEL32.GetTickCount
007AC110 .rdata Import ( KERNEL32.GetTimeZoneInformation
007AC124 .rdata Import KERNEL32.GetVersion
007AC078 .rdata Import ( KERNEL32.GetVolumeInformationA
007AC058 .rdata Import ( KERNEL32.GlobalMemoryStatus
007AC1B0 .rdata Import ( KERNEL32.HeapAlloc
007AC1A0 .rdata Import ( KERNEL32.HeapCreate
007AC19C .rdata Import ( KERNEL32.HeapDestroy
007AC13C .rdata Import ( KERNEL32.HeapFree
007AC0FC .rdata Import ( KERNEL32.HeapReAlloc
007AC0A8 .rdata Import ( KERNEL32.HeapSize
007AC084 .rdata Import ( KERNEL32.InitializeCriticalSection
007AC134 .rdata Import ( KERNEL32.InterlockedDecrement
007AC0EC .rdata Import ( KERNEL32.InterlockedExchange
007AC138 .rdata Import ( KERNEL32.InterlockedIncrement
007AC1A8 .rdata Import ( KERNEL32.IsBadCodePtr
007AC0A0 .rdata Import ( KERNEL32.IsBadReadPtr
007AC1AC .rdata Import ( KERNEL32.IsBadWritePtr
007AC2AC .rdata Import WINMM.joyGetDevCapsA
007AC2B0 .rdata Import WINMM.joyGetPosEx
007AC1B8 .rdata Import ( KERNEL32.LCMapStringA
007AC1BC .rdata Import ( KERNEL32.LCMapStringW
007AC07C .rdata Import ( KERNEL32.LeaveCriticalSection
007AC248 .rdata Import ( USER32.LoadCursorA
007AC184 .rdata Import ( KERNEL32.LoadLibraryA
007AC064 .rdata Import ( KERNEL32.lstrlenA
007AC1F4 .rdata Import ( USER32.MessageBoxA
007AC27C .rdata Import WINMM.midiOutClose
007AC2A4 .rdata Import WINMM.midiOutGetDevCapsA
007AC264 .rdata Import WINMM.midiOutGetNumDevs
007AC294 .rdata Import WINMM.midiOutGetVolume
007AC278 .rdata Import WINMM.midiOutLongMsg
007AC274 .rdata Import WINMM.midiOutOpen
007AC290 .rdata Import WINMM.midiOutPrepareHeader
007AC2A8 .rdata Import WINMM.midiOutSetVolume
007AC298 .rdata Import WINMM.midiOutUnprepareHeader
007AC280 .rdata Import WINMM.midiStreamClose
007AC288 .rdata Import WINMM.midiStreamOpen
007AC26C .rdata Import WINMM.midiStreamOut
007AC28C .rdata Import WINMM.midiStreamPause
007AC29C .rdata Import WINMM.midiStreamProperty
007AC2A0 .rdata Import WINMM.midiStreamRestart
007AC284 .rdata Import WINMM.midiStreamStop
0040BA00 .text Export <ModuleEntryPoint>
007AC0E8 .rdata Import ( KERNEL32.MoveFileA
007AC15C .rdata Import ( KERNEL32.MultiByteToWideChar
007AC060 .rdata Import ( KERNEL32.OutputDebugStringA
007AC204 .rdata Import ( USER32.PeekMessageA
007AC224 .rdata Import ( USER32.PostQuitMessage
007AC094 .rdata Import ( KERNEL32.RaiseException
007AC1CC .rdata Import ( KERNEL32.ReadFile
007AC010 .rdata Import ( ADVAPI32.RegCloseKey
007AC004 .rdata Import ( ADVAPI32.RegDeleteValueA
007AC234 .rdata Import ( USER32.RegisterClassA
007AC00C .rdata Import ( ADVAPI32.RegOpenKeyExA
007AC008 .rdata Import ( ADVAPI32.RegQueryValueExA
007AC000 .rdata Import ( ADVAPI32.RegSetValueExA
007AC208 .rdata Import ( USER32.ReleaseDC
007AC0D0 .rdata Import ( KERNEL32.ResumeThread
007AC090 .rdata Import ( KERNEL32.RtlUnwind
007AC200 .rdata Import ( USER32.SendMessageA
007AC040 .rdata Import ( GDI32.SetBkColor
007AC0B0 .rdata Import ( KERNEL32.SetCurrentDirectoryA
007AC10C .rdata Import ( KERNEL32.SetEndOfFile
007AC100 .rdata Import ( KERNEL32.SetEnvironmentVariableA
007AC074 .rdata Import ( KERNEL32.SetErrorMode
007AC144 .rdata Import ( KERNEL32.SetFilePointer
007AC17C .rdata Import ( KERNEL32.SetHandleCount
007AC194 .rdata Import ( KERNEL32.SetLastError
007AC210 .rdata Import ( USER32.SetRect
007AC1C4 .rdata Import ( KERNEL32.SetStdHandle
007AC03C .rdata Import ( GDI32.SetTextColor
007AC0A4 .rdata Import ( KERNEL32.SetUnhandledExceptionFilter
007AC1F8 .rdata Import ( USER32.ShowCursor
007AC23C .rdata Import ( USER32.ShowWindow
007AC130 .rdata Import ( KERNEL32.Sleep
007AC1FC .rdata Import ( USER32.SystemParametersInfoA
007AC148 .rdata Import ( KERNEL32.TerminateProcess
007AC038 .rdata Import ( GDI32.TextOutA
007AC270 .rdata Import WINMM.timeBeginPeriod
007AC25C .rdata Import WINMM.timeEndPeriod
007AC2B4 .rdata Import WINMM.timeGetTime
007AC268 .rdata Import WINMM.timeKillEvent
007AC260 .rdata Import WINMM.timeSetEvent
007AC190 .rdata Import ( KERNEL32.TlsAlloc
007AC198 .rdata Import ( KERNEL32.TlsGetValue
007AC18C .rdata Import ( KERNEL32.TlsSetValue
007AC230 .rdata Import ( USER32.TranslateMessage
007AC150 .rdata Import ( KERNEL32.UnhandledExceptionFilter
007AC238 .rdata Import ( USER32.UpdateWindow
007AC1C0 .rdata Import ( KERNEL32.VirtualAlloc
007AC1A4 .rdata Import ( KERNEL32.VirtualFree
007AC070 .rdata Import ( KERNEL32.WaitForSingleObject
007AC250 .rdata Import ( USER32.WaitMessage
007AC088 .rdata Import ( KERNEL32.WideCharToMultiByte
007AC08C .rdata Import ( KERNEL32.WriteFile
I don't see any functions imported from OpenGl32.dll...
- Alhexx
-
...exactly what I was thinking. FF7 can run in OpenGL, but it's very broken. It's certainly not the default--nor really worth it.
http://forums.qhimm.com/viewtopic.php?t=2156
-
For some reason, my game uses OGL. Using a a hacked release with some chocobo patch applied. How about you send me your executable @ [email protected] and I send you mine?
Downloaded the missing file for dumpbin
Dump of file ff7.exe
File Type: EXECUTABLE IMAGE
Section contains the following imports:
WINMM.dll
7B636C Import Address Table
7B8BFC Import Name Table
0 time date stamp
0 Index of first forwarder reference
59 midiOutSetVolume
1A joyGetDevCapsA
97 timeGetTime
53 midiOutGetVolume
4D midiOutGetDevCapsA
62 midiStreamRestart
61 midiStreamProperty
94 timeEndPeriod
1E joyGetPosEx
57 midiOutPrepareHeader
5F midiStreamPause
5D midiStreamOpen
63 midiStreamStop
5C midiStreamClose
4C midiOutClose
54 midiOutLongMsg
56 midiOutOpen
93 timeBeginPeriod
5B midiOutUnprepareHeader
52 midiOutGetNumDevs
5E midiStreamOut
99 timeSetEvent
98 timeKillEvent
KERNEL32.dll
7B6064 Import Address Table
7B88F4 Import Name Table
0 time date stamp
0 Index of first forwarder reference
172 HeapSize
210 SetEndOfFile
3D CreateProcessA
26A WaitForSingleObject
213 SetErrorMode
14F GetVolumeInformationA
180 IsBadCodePtr
1C9 RaiseException
2A CreateDirectoryA
20C SetCurrentDirectoryA
183 IsBadReadPtr
236 SetUnhandledExceptionFilter
7E FindClose
87 FindNextFileA
82 FindFirstFileA
6C ExitThread
43 CreateThread
1E2 ResumeThread
4E DeleteFileA
DF GetDriveTypeA
F0 GetFullPathNameA
1D6 ReadFile
31 CreateFileA
F5 GetLocalTime
135 GetSystemTime
1A6 MoveFileA
186 IsBadWritePtr
58 EnterCriticalSection
4C DeleteCriticalSection
77 FileTimeToLocalFileTime
78 FileTimeToSystemTime
17C InterlockedExchange
18F LeaveCriticalSection
145 GetTickCount
19A LocalFree
98 FreeLibrary
179 InitializeCriticalSection
161 GlobalMemoryStatus
211 SetEnvironmentVariableA
93 FormatMessageA
1E CompareStringA
18 CloseHandle
F7 GetLocaleInfoW
116 GetProcAddress
8E FlushFileBuffers
229 SetStdHandle
190 LoadLibraryA
25B VirtualAlloc
12E GetStringTypeW
12B GetStringTypeA
18E LCMapStringW
18D LCMapStringA
F6 GetLocaleInfoA
168 HeapAlloc
16E HeapFree
219 SetFilePointer
27B WriteFile
1E5 RtlUnwind
25E VirtualFree
16A HeapCreate
16C HeapDestroy
24A TlsGetValue
21E SetLastError
248 TlsAlloc
E6 GetExitCodeProcess
1BA OutputDebugStringA
2A1 lstrlenA
F4 GetLastError
1F CompareStringW
24B TlsSetValue
D6 GetCurrentThreadId
EF GetFileType
12A GetStdHandle
21B SetHandleCount
109 GetOEMCP
9D GetACP
A3 GetCPInfo
26E WideCharToMultiByte
E3 GetEnvironmentStringsW
E1 GetEnvironmentStrings
97 FreeEnvironmentStringsW
1AB MultiByteToWideChar
96 FreeEnvironmentStringsA
FC GetModuleFileNameA
250 UnhandledExceptionFilter
D3 GetCurrentProcess
246 TerminateProcess
17E InterlockedIncrement
17B InterlockedDecrement
23F Sleep
D1 GetCurrentDirectoryA
171 HeapReAlloc
148 GetTimeZoneInformation
6B ExitProcess
128 GetStartupInfoA
FE GetModuleHandleA
14C GetVersion
AA GetCommandLineA
USER32.dll
7B6304 Import Address Table
7B8B94 Import Name Table
0 time date stamp
0 Index of first forwarder reference
251 UpdateWindow
D5 GetActiveWindow
80 DefWindowProcA
101 GetKeyState
D7 GetAsyncKeyState
1B3 PostQuitMessage
B6 EndPaint
9 BeginPaint
1CD ReleaseDC
EE GetDC
208 SetRect
22D ShowWindow
55 CreateWindowExA
1 AdjustWindowRect
1BE RegisterClassA
172 LoadCursorA
8A DestroyWindow
25D WaitMessage
90 DispatchMessageA
245 TranslateMessage
1AF PeekMessageA
1DA SendMessageA
234 SystemParametersInfoA
195 MessageBoxA
229 ShowCursor
GDI32.dll
7B6038 Import Address Table
7B88C8 Import Name Table
0 time date stamp
0 Index of first forwarder reference
F2 GetPixelFormat
FA GetStockObject
47 DescribePixelFormat
C7 GetDeviceCaps
168 SetPixelFormat
D ChoosePixelFormat
150 SetBkColor
183 TextOutA
172 SetTextColor
182 SwapBuffers
ADVAPI32.dll
7B6000 Import Address Table
7B8890 Import Name Table
0 time date stamp
0 Index of first forwarder reference
120 RegDeleteValueA
136 RegQueryValueExA
12E RegOpenKeyExA
141 RegSetValueExA
117 RegCloseKey
ole32.dll
7B63CC Import Address Table
7B8C5C Import Name Table
0 time date stamp
0 Index of first forwarder reference
C CoCreateInstance
48 CoUninitialize
26 CoInitialize
OPENGL32.dll
7B620C Import Address Table
7B8A9C Import Name Table
0 time date stamp
0 Index of first forwarder reference
CF glPointSize
164 wglGetProcAddress
C glBindTexture
6E glGetError
7D glGetString
42 glDeleteLists
B9 glNewList
69 glGenLists
53 glEndList
F glCallList
6B glGetBooleanv
40 glCullFace
50 glEnable
47 glDisable
12C glTexEnvi
15C wglDeleteContext
165 wglMakeCurrent
A5 glLoadIdentity
B6 glMatrixMode
48 glDisableClientState
70 glGetIntegerv
4A glDrawBuffer
157 glViewport
C5 glOrtho
A7 glLoadMatrixf
129 glTexCoordPointer
113 glTexCoord2f
51 glEnableClientState
156 glVertexPointer
3A glColorPointer
4B glDrawElements
B glBegin
32 glColor4ub
148 glVertex3f
52 glEnd
CB glPixelStorei
61 glFinish
F4 glReadBuffer
F5 glReadPixels
6A glGenTextures
135 glTexImage2D
45 glDepthMask
43 glDeleteTextures
88 glHint
138 glTexParameteri
8 glAlphaFunc
E glBlendFunc
14 glClearDepth
13 glClearColor
11 glClear
105 glShadeModel
D0 glPolygonMode
62 glFlush
15A wglCreateContext
89 glIndexMask
FE glRenderMode
67 glFrontFace
38 glColorMask
A3 glLineWidth
44 glDepthFunc
46 glDepthRange
DSOUND.dll
7B602C Import Address Table
7B88BC Import Name Table
0 time date stamp
0 Index of first forwarder reference
4 DirectSoundEnumerateA
3 DirectSoundCreate
DINPUT.dll
7B6024 Import Address Table
7B88B4 Import Name Table
0 time date stamp
0 Index of first forwarder reference
0 DirectInputCreateA
DDRAW.dll
7B6018 Import Address Table
7B88A8 Import Name Table
0 time date stamp
0 Index of first forwarder reference
7 DirectDrawEnumerateA
5 DirectDrawCreate
MSACM32.dll
7B61F0 Import Address Table
7B8A80 Import Name Table
0 time date stamp
0 Index of first forwarder reference
2A acmStreamSize
2B acmStreamUnprepareHeader
28 acmStreamPrepareHeader
25 acmStreamConvert
24 acmStreamClose
27 acmStreamOpen
Summary
797000 .data
4000 .rdata
1000 .rsrc
3B5000 .text
-
Final Fantasy VII 1.02 (nvidia patch) can function in OpenGL, it's just necessary to modifie the register base...
but the OpenGL support was not completely implanted...
http://forums.qhimm.com/viewtopic.php?t=1659
-
I see ... yeah, I've got Version 1.00 ... alright then
- Alhexx
-
So Cloud, the program is importing the libraries, but not using them?
Great...
-
The program uses the opengl...
I have test with my Voodoo 2 and 3dfx OpenGL ICD,
and the games start on Voodoo 2 when OpenGL ICD stays present...
-
So if FF7 can ru in OpenGL, then it should be no big problem to improve the resolution of FF7 ... I've gotta try to get my 1.02 patch running...
- Alhexx