Skip to content

Latest commit

 

History

History
73 lines (47 loc) · 2.65 KB

README.txt

File metadata and controls

73 lines (47 loc) · 2.65 KB
 
Sep 16, 2015
Sep 16, 2015
1
2
What is this?
Sep 16, 2015
Sep 16, 2015
3
- This is a small piece of code, written in C++, that acts as a bridge between
Sep 16, 2015
Sep 16, 2015
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
a child process and the Steamworks SDK. The child process links against a
small piece of code, written in C, to facilitate communication with the
bridge.
What would I ever need this for?
There are two good reasons to use this piece of code:
- You have a GPL-licensed game and can't link directly against the Steamworks
SDK. The child process links against the simple, open source C code, which
talks to the open source C++ code via a pipe, which talks to Steamworks. You
can now add Steam achievements to your game without violating the GPL.
- You have a game written in a programming language that can't interact with
C++ directly, so you can't make use of the Steamworks SDK directly. If your
language can link to C-callable code, you can use this to wire up to
Steamworks.
How does it work?
Sep 16, 2015
Sep 16, 2015
25
26
27
- You get a copy of the Steamworks SDK, and link steamshim_parent.cpp against
it. You ship that program and the steam_api.dll (or whatever) with your game.
Sep 16, 2015
Sep 16, 2015
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
- The parent process (the C++ code) gets launched as if it were your game. It
initializes Steamworks, creates some pipes and launches your actual game, then
waits on your game to talk to it over those pipes.
- Your game links against steamshim_child.c and at some point #includes
steamshim_child.h to use this functionality.
- Your game calls STEAMSHIM_init() at startup to prepare the system. It can
then make other STEAMSHIM_*() calls to interact with the parent process and
Steamworks.
- Your game, once a frame, calls STEAMSHIM_pump() until it returns NULL. Each
time it doesn't return NULL is a new message (event) from the parent process.
Often times, this is results from a command you asked the parent process to
do earlier, or some other out-of-band event from Steamworks.
- Your game, when shutting down normally, calls STEAMSHIM_deinit(), so the
parent process knows you're going away. It says goodbye, shuts down the pipe,
waits for your game to terminate, and then terminates itself.
Is this all of Steamworks?
- No! It's actually just enough to deal with stats and achievements right now,
but it can definitely be extended to offer more things. Take a look at
Sep 16, 2015
Sep 16, 2015
55
56
57
58
59
60
How do I get the Steamworks SDK?
- Go to https://partner.steamgames.com/ and login with your Steam account. You
can agree to some terms and then download the SDK.
Sep 16, 2015
Sep 16, 2015
61
62
Is there an example?
Sep 16, 2015
Sep 16, 2015
63
- That would be testapp.c. This example expects you to own Postal 1 on Steam and
Sep 16, 2015
Sep 16, 2015
64
65
66
67
68
69
70
71
will RESET ALL YOUR ACHIEVEMENTS, so be careful running it. But hey, if you
lose your work, it's a good exercise in SteamShim usage to put them back
again. :)
Questions? Ask me.
--ryan.
icculus@icculus.org