Jump to content

Recommended Posts

Hello, everyone! I'm a wannabe game developer, and my current power level is, well, I managed to read a texture from a file with winapi, and display that texture with opengl.

I was curious how Don't Starve works, and which API it uses. You see, I'm still not sure what to use: OpenGL or Direct3D or DirectDraw, DirectX9 or DirectX8 or DirectX12, DirectSound or OpenAL or winmm.dll, raw winapi or some wrapper. And so, I'd like to use something that other popular games use, instead of deciding for myself.

This is a list of all dlls that the game loads when it starts, maybe somebody can tell something interesting about any of these?

Executable modules
Base       Size       Entry      Name       File version      Path
00400000   00016000   0040801F   XINPUT1_   9.18.944.0000     C:\Windows\system32\XINPUT1_3.dll
01380000   002C6000   01589201   dontstar                     C:\Program Files\Don't Starve\bin\dontstarve.exe
65980000   0001D000   65981060   swresamp                     C:\Program Files\Don't Starve\bin\swresample-ttv-0.dll
6EB80000   00089000   6EB81060   libmp3la                     C:\Program Files\Don't Starve\bin\libmp3lame-ttv.dll
6F2A0000   00177000   6F36EE4A   fmodex     4.44.07           C:\Program Files\Don't Starve\bin\fmodex.dll
6F630000   0011B000   6F6AA99F   twitchsd                     C:\Program Files\Don't Starve\bin\twitchsdk_32_release.dll
6F880000   0006C000   6F8BED48   fmod_eve   4.44.07           C:\Program Files\Don't Starve\bin\fmod_event.dll
6F8F0000   0008E000   6F929DC7   MSVCP90    9.00.30729.4940   C:\Windows\WinSxS\x86_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.4940_none_50916076bcb9a742\MSVCP90.dll
6F9C0000   00030000   6F9DEC5C   DINPUT8    6.1.7600.16385 (  C:\Windows\system32\DINPUT8.dll
6F9F0000   001C3000   6F9F1A45   d3d9       6.1.7601.17514 (  C:\Windows\system32\d3d9.dll
6FDE0000   00032000   6FDE37F1   WINMM      6.1.7600.16385 (  C:\Windows\system32\WINMM.dll
6FE20000   000D4000   6FEA9BA6   libGLESv   1.0.0.2249        C:\Program Files\Don't Starve\bin\libGLESv2.dll
70530000   00014000   70531340   MSACM32    6.1.7600.16385 (  C:\Windows\system32\MSACM32.dll
70550000   0001B000   7055ED9D   libEGL     1.0.0.2249        C:\Program Files\Don't Starve\bin\libEGL.dll
70570000   00006000   705711F0   d3d8thk    6.1.7600.16385 (  C:\Windows\system32\d3d8thk.dll
70A40000   0003A000   70A41060   avutil-t                     C:\Program Files\Don't Starve\bin\avutil-ttv-51.dll
71F30000   000A3000   71F52D40   MSVCR90    9.00.30729.4940   C:\Windows\WinSxS\x86_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.4940_none_50916076bcb9a742\MSVCR90.dll
72030000   00013000   72031858   dwmapi     6.1.7601.18917 (  C:\Windows\system32\dwmapi.dll
73620000   00009000   73621220   VERSION    6.1.7601.17647 (  C:\Windows\system32\VERSION.dll
73E80000   00007000   73E81120   WSOCK32    6.1.7600.16385 (  C:\Windows\system32\WSOCK32.dll
74BA0000   0000C000   74BA10E1   CRYPTBAS   6.1.7601.23223 (  C:\Windows\syswow64\CRYPTBASE.dll
74BB0000   00060000   74BCA3AD   SspiCli    6.1.7601.23211 (  C:\Windows\syswow64\SspiCli.dll
74C10000   000F0000   74C20569   RPCRT4     6.1.7600.16385 (  C:\Windows\syswow64\RPCRT4.dll
74D00000   00035000   74D0145D   WS2_32     6.1.7600.16385 (  C:\Windows\syswow64\WS2_32.dll
74D50000   00047000   74D574E1   KERNELBA   6.1.7601.18015 (  C:\Windows\syswow64\KERNELBASE.dll
74DA0000   00090000   74DB633B   GDI32      6.1.7601.18898 (  C:\Windows\syswow64\GDI32.dll
74E30000   00C4B000   74EB14F1   SHELL32    6.1.7601.17514 (  C:\Windows\syswow64\SHELL32.dll
75A80000   0015C000   75ACBA3D   ole32      6.1.7600.16385 (  C:\Windows\syswow64\ole32.dll
75C10000   00057000   75C29BA6   SHLWAPI    6.1.7600.16385 (  C:\Windows\syswow64\SHLWAPI.dll
75C70000   00027000   75C758B9   CFGMGR32   6.1.7601.17621 (  C:\Windows\syswow64\CFGMGR32.dll
75CA0000   000AC000   75CAA472   msvcrt     7.0.7601.17744 (  C:\Windows\syswow64\msvcrt.dll
75D50000   00136000   75D51B35   urlmon     8.00.7600.16385   C:\Windows\syswow64\urlmon.dll
75F20000   00045000   75F211E1   WLDAP32    6.1.7600.16385 (  C:\Windows\syswow64\WLDAP32.dll
75F70000   001FB000   75F722D9   iertutil   8.00.7601.17514   C:\Windows\syswow64\iertutil.dll
76180000   0009D000   761B40EA   USP10      1.0626.7601.1845  C:\Windows\syswow64\USP10.dll
76220000   00121000   7622158E   CRYPT32    6.1.7601.18839 (  C:\Windows\syswow64\CRYPT32.dll
76350000   00100000   7636B6ED   USER32     6.1.7601.17514 (  C:\Windows\syswow64\USER32.dll
76450000   0000A000   764536A0   LPK        6.1.7601.18985 (  C:\Windows\syswow64\LPK.dll
764E0000   00012000   764E1441   DEVOBJ     6.1.7601.17621 (  C:\Windows\syswow64\DEVOBJ.dll
76500000   000CC000   7650168B   MSCTF      6.1.7600.16385 (  C:\Windows\syswow64\MSCTF.dll
76600000   0019D000   766017E7   SETUPAPI   6.1.7600.16385 (  C:\Windows\syswow64\SETUPAPI.dll
767A0000   00019000   767A4975   sechost    6.1.7600.16385 (  C:\Windows\SysWOW64\sechost.dll
76820000   00006000   76821782   NSI        6.1.7600.16385 (  C:\Windows\syswow64\NSI.dll
76830000   00110000   76843293   kernel32   6.1.7601.18015 (  C:\Windows\syswow64\kernel32.dll
769D0000   000F5000   769D1865   WININET    8.00.7600.16385   C:\Windows\syswow64\WININET.dll
76AD0000   000A0000   76AE4965   ADVAPI32   6.1.7600.16385 (  C:\Windows\syswow64\ADVAPI32.dll
76B70000   00060000   76B8158F   IMM32      6.1.7601.17514 (  C:\Windows\system32\IMM32.DLL
76BD0000   0008F000   76BD3FB1   OLEAUT32   6.1.7601.18679    C:\Windows\syswow64\OLEAUT32.dll
77030000   0000C000   7703238E   MSASN1     6.1.7601.17514 (  C:\Windows\syswow64\MSASN1.dll
77060000   00180000              ntdll      6.1.7600.16385 (  C:\Windows\SysWOW64\ntdll.dll

 

I suggest you try OpenGL. It is fairly easy to use (once you establish basic knowledge), has cross-platform compatibility, and is commonly used. Another platform you may want to try is Unity, which increasingly many games are being made in. I personally dislike Unity, as it is constrictive and resource hungry, but it may be a path to consider.

 

As to the DLLs, my knowledge matches Mobbstar's.

7 minutes ago, Arkathorn said:

I suggest you try OpenGL. It is fairly easy to use (once you establish basic knowledge), has cross-platform compatibility, and is commonly used. Another platform you may want to try is Unity, which increasingly many games are being made in. I personally dislike Unity, as it is constrictive and resource hungry, but it may be a path to consider.

 

As to the DLLs, my knowledge matches Mobbstar's.

My biggest concern against using OpenGL, is that DirectX is a de-facto standart for most of the games in the past and present right now, and that DirectX covers all functionality while OpenGL only handles graphics. What's the point of using OpenGL if I'll still use DirectX for sound and controller support? It will just bring more trouble... I need to research more about that.

And what I like about OpenGL, is that it only uses C. It's a bit simplier than C++, which is probably good. Also I heard that OpenGL works better in Wine than Direct3D, but I'm not sure if that matters too much...

Unity looks too hardcore for what I'm trying to do. If it supports changing game logic on the fly, I'll definily consider looking into it. It's a feature I'm looking for the most.

Twitch I can ignore for now. I have nothing to stream yet.

fmod, I heard about it before. Should I try to learn this too, or should I just dig into DirectSound stright away. I don't like layers of abstraction too much, they hide details from me. Especially closed-source ones, through there isn't much difference for me since just having a source ain't solving much.

I suppose those are for the graphics:

  • libGLESv2.dll

  • libEGL.dll

  • d3d9.dll

  • d3d8thk.dll

It's possible that Don't Starve uses only one of them directly, and 3 others are just a dependency. I wish I could see a hierarchy of library usage, instead of just a list.

1 minute ago, Mattew said:

What's the point of using OpenGL if I'll still use DirectX for sound and controller support? 

If it supports changing game logic on the fly, I'll definily consider looking into it. It's a feature I'm looking for the most.

My main objection to DirectX is it's centralization. It's completely Microsoft controlled, and in my experience MS is pretty unreliable. My approach would/will be to use open source libraries such as OpenGL.

 

I'm not sure what you mean by that. Do you just mean a quick Edit/Test cycle? It certainly has that, to a degree, but it' designed for pre-staged, pre-designed maps. Lighting, staging, collision... All of these are done before runtime, so if that isn't what you're looking for, I don't advise it. It's also worth noting that Unity does not support modding to any degree, the final result being very closed source.

7 minutes ago, Arkathorn said:

I'm not sure what you mean by that. Do you just mean a quick Edit/Test cycle? It certainly has that, to a degree, but it' designed for pre-staged, pre-designed maps. Lighting, staging, collision... All of these are done before runtime, so if that isn't what you're looking for, I don't advise it. It's also worth noting that Unity does not support modding to any degree, the final result being very closed source.

Yes, something like that, I guess. I was thinking about embedding a text editor inside a game, and changing game logic at runtime with it. It's called Edit And Continue, and Code Swapping. Or something.

Didn't really understood what you meant by staging and collision.

Unity is probably too costly for me right now anyway. Maybe one day.

So, I googled libGLESv2 and libEGL, and look what I found!

http://gpupowered.org/node/29

https://chromium.googlesource.com/angle/angle

Looks like this is an OpenGL->Direct3D converter, and it's called ANGLE. Something made by Google. So dev team used this as a crossplatform 3D rendering API. Interesting.

So, ANGLE for 3d, fmod for sound, and what's for gamepad input and network? Gamepad support was added much later (judging by release log and just how everything is designed to be used with a mouse), I wonder if they just used DirectInput for that.

@Mobbstar Google Co writes code. They needed a crossplatform rendering library for their browser, I guess.

I guess it is. They both do almost the same thing, and ANGLE only does a subset of OpenGL. App talks to ANGLE on the OpenGL language, and ANGLE talks to OS on the Direct3D language, it's a translator of sorts.

4 hours ago, Mattew said:

Didn't really understood what you meant by staging and collision.

Procedural generation is not done in Unity. Technically it can be done, but it would be abnormally difficult. I was referring to the positioning and collision data of objects/the map, which would normally be created in the editor, as opposed to at runtime.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
  • Create New...