networking

This commit is contained in:
2025-07-13 15:47:42 +03:00
parent f5b26be510
commit a9c28b8940
345 changed files with 142130 additions and 174 deletions

Binary file not shown.

View File

@@ -0,0 +1,40 @@
#!/usr/bin/env bash
STEAMROOT="$(cd "${0%/*}" && echo $PWD)"
STEAMEXE=`basename "$0" .sh`
UNAME=`uname`
if [ "$UNAME" == "Linux" ]; then
PLATFORM=linux32
export LD_LIBRARY_PATH="$STEAMROOT/$PLATFORM:$LD_LIBRARY_PATH"
else # if [ "$UNAME" == "Darwin" ]; then
PLATFORM=osx32
export DYLD_LIBRARY_PATH="$STEAMROOT/$PLATFORM:$DYLD_LIBRARY_PATH"
fi
ulimit -n 2048
MAGIC_RESTART_EXITCODE=42
if [ "$DEBUGGER" == "gdb" ] || [ "$DEBUGGER" == "cgdb" ]; then
ARGSFILE=$(mktemp $USER.steam.gdb.XXXX)
# Set the LD_PRELOAD varname in the debugger, and unset the global version.
if [ "$LD_PRELOAD" ]; then
echo set env LD_PRELOAD=$LD_PRELOAD >> "$ARGSFILE"
echo show env LD_PRELOAD >> "$ARGSFILE"
unset LD_PRELOAD
fi
$DEBUGGER -x "$ARGSFILE" "$STEAMROOT/$PLATFORM/$STEAMEXE" "$@"
rm "$ARGSFILE"
else
$DEBUGGER "$STEAMROOT/$PLATFORM/$STEAMEXE" "$@"
fi
STATUS=$?
if [ $STATUS -eq $MAGIC_RESTART_EXITCODE ]; then
exec "$0" "$@"
fi
exit $STATUS

Binary file not shown.

View File

@@ -0,0 +1,45 @@
#!/usr/bin/env bash
STEAMROOT="$(cd "${0%/*}" && echo $PWD)"
STEAMCMD=`basename "$0" .sh`
UNAME=`uname`
if [ "$UNAME" == "Linux" ]; then
STEAMEXE="${STEAMROOT}/linux32/${STEAMCMD}"
PLATFORM="linux32"
export LD_LIBRARY_PATH="$STEAMROOT/$PLATFORM:$LD_LIBRARY_PATH"
else # if [ "$UNAME" == "Darwin" ]; then
STEAMEXE="${STEAMROOT}/${STEAMCMD}"
if [ ! -x ${STEAMEXE} ]; then
STEAMEXE="${STEAMROOT}/Steam.AppBundle/Steam/Contents/MacOS/${STEAMCMD}"
fi
export DYLD_LIBRARY_PATH="$STEAMROOT:$DYLD_LIBRARY_PATH"
export DYLD_FRAMEWORK_PATH="$STEAMROOT:$DYLD_FRAMEWORK_PATH"
fi
ulimit -n 2048
MAGIC_RESTART_EXITCODE=42
if [ "$DEBUGGER" == "gdb" ] || [ "$DEBUGGER" == "cgdb" ]; then
ARGSFILE=$(mktemp $USER.steam.gdb.XXXX)
# Set the LD_PRELOAD varname in the debugger, and unset the global version.
if [ "$LD_PRELOAD" ]; then
echo set env LD_PRELOAD=$LD_PRELOAD >> "$ARGSFILE"
echo show env LD_PRELOAD >> "$ARGSFILE"
unset LD_PRELOAD
fi
$DEBUGGER -x "$ARGSFILE" "$STEAMEXE" "$@"
rm "$ARGSFILE"
else
$DEBUGGER "$STEAMEXE" "$@"
fi
STATUS=$?
if [ $STATUS -eq $MAGIC_RESTART_EXITCODE ]; then
exec "$0" "$@"
fi
exit $STATUS

View File

@@ -0,0 +1 @@
run_build.bat shows how to run a Steam content build for AppID 1000 which has one depot 1001.

View File

@@ -0,0 +1 @@
builder\steamcmd.exe +login account password +run_app_build ..\scripts\simple_app_build.vdf +quit

View File

@@ -0,0 +1,17 @@
"AppBuild"
{
"AppID" "1000" // Your AppID
"Desc" "Your build description here" // internal description for this build
"Preview" "1" // make this a preview build only, nothing is uploaded
"Local" "..\..\ContentServer\htdocs" // put content on local content server instead of uploading to Steam
"SetLive" "AlphaTest" // set this build live on beta branch AlphaTest
"ContentRoot" "..\content\" // content root folder relative to this script file
"BuildOutput" "D:\build_output\" // put build cache and log files on different drive for better performance
"verbose" "0" // spew more build details in console
"Depots"
{
// file mapping instructions for each depot are in separate script files
"1001" "depot_build_1001.vdf"
"1002" "depot_build_1002.vdf"
}
}

View File

@@ -0,0 +1,20 @@
"DepotBuild"
{
// Set your assigned depot ID here
"DepotID" "1001"
// include all files recursivley
"FileMapping"
{
// This can be a full path, or a path relative to ContentRoot
"LocalPath" "*"
// This is a path relative to the install folder of your game
"DepotPath" "."
// If LocalPath contains wildcards, setting this means that all
// matching files within subdirectories of LocalPath will also
// be included.
"Recursive" "1"
}
}

View File

@@ -0,0 +1,40 @@
"DepotBuild"
{
"DepotID" "1002"
"ContentRoot" "D:\content\depot1002" // override ContentRoot from app build script
"FileMapping"
{
// all source files and folders in ".\bin" will be mapped into folder ".\executables" in depot
"LocalPath" "bin\*"
"DepotPath" "executables\"
"Recursive" "1" // include all subfolders
}
"FileMapping"
{
// override audio files in \\audio with German versions
"LocalPath" "localization\german\audio\*"
"DepotPath" "audio\"
}
"FileMapping"
{
// copy install script for german version into depot root folder
"LocalPath" "localization\german\german_installscript.vdf"
"DepotPath" "."
}
"FileExclusion" "bin\server.exe" // exclude this file
"FileExclusion" "*.pdb" // exclude all .PDB files everywhere
"FileExclusion" "bin\tools*" // exclude all files under bin/tools/
"InstallScript" "localization\german\german_installscript.vdf"
"FileProperties"
{
"LocalPath" "bin\setup.cfg"
"Attributes" "userconfig" // this file will be modified during runtime
}
}

View File

@@ -0,0 +1,23 @@
"AppBuild"
{
"AppID" "1000" // your AppID
"Desc" "This is a simple build script" // internal description for this build
"verbose" "0" // spew more build details in console
"preview" "0" // make this a preview build only, nothing is uploaded
"ContentRoot" "..\content\" // root content folder, relative to location of this file
"BuildOutput" "..\output\" // build output folder for build logs and build cache files
"Depots"
{
"1001" // your DepotID
{
"FileMapping"
{
"LocalPath" "*" // all files from contentroot folder
"DepotPath" "." // mapped into the root of the depot
"recursive" "1" // include all subfolders
}
}
}
}

Binary file not shown.

View File

@@ -0,0 +1,7 @@
<html><body>
<h1>Steam Local Content Server</h1>
To download Steam content from this local content server, add "@localcontentserver [thishostname]" to the steam_dev.cfg right next to Steam.exe <br>
Browse local content <a href="depot">here</a> <br>
For more information, see the SteamWorks SDK <a href="http://partner.steamgames.com">documentation</a> <br>
</body></html>

Binary file not shown.

View File

@@ -0,0 +1,16 @@
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to use,
copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

View File

@@ -0,0 +1,30 @@
# Mongoose web server configuration file.
# Lines starting with '#' and empty lines are ignored.
# For detailed description of every option, visit
# http://code.google.com/p/mongoose/wiki/MongooseManual
# cgi_pattern **.cgi$|**.pl$|**.php$
# cgi_environment <value>
# put_delete_passwords_file <value>
# cgi_interpreter <value>
# protect_uri <value>
# authentication_domain mydomain.com
# ssi_pattern **.shtml$|**.shtm$
# access_log_file <value>
# ssl_chain_file <value>
# global_passwords_file <value>
# index_files index.html,index.htm,index.cgi
# access_control_list <value>
# max_request_size 16384
# extra_mime_types <value>
# ssl_certificate <value>
# num_threads 10
# run_as_user <value>
# url_rewrite_patterns <value>
document_root D:\ContentServer\htdocs
listening_ports 80
enable_directory_listing yes
enable_keep_alive yes
error_log_file error.log

Binary file not shown.

View File

@@ -0,0 +1,241 @@
import os
import io
import sys
import re
# wrapper for print
def printw( message ):
print( message )
try:
import Crypto
from Crypto.Signature import PKCS1_v1_5
from Crypto.Hash import SHA
from Crypto.PublicKey import RSA
except Exception as e:
printw( "Missing required module: "+str(e) )
sys.exit( -1 )
try:
import zlib
except Exception as e:
printw( "Missing required module: "+str(e) )
sys.exit( -1 )
try:
import hashlib
except Exception as e:
printw( "Missing required module: "+str(e) )
sys.exit( -1 )
try:
import ctypes
except Exception as e:
printw( "Missing required module: "+str(e) )
sys.exit( -1 )
def usage():
printw( "usage to verify a signaturefile:"+ sys.argv[0]+ " signaturefile publickeyfile" )
printw( "usage to write a new signaturefile:"+ sys.argv[0]+ " signaturefile publickeyfile privatekeyfile newfilename" )
printw( "" )
def readkeyfile( publickeyfilename ):
# read the public key file.
rawkey = open(publickeyfilename, mode='rb').read()
# import as an RSA key
key = RSA.importKey(rawkey)
return key
def signmessage_add_digest( message, privatekeyfile ):
key = RSA.importKey(open( privatekeyfile, mode='rb' ).read())
h = SHA.new(message)
signer = PKCS1_v1_5.new(key)
signature = signer.sign(h)
sighex = signature.encode("hex")
return "DIGEST:"+sighex.upper()+"\r\n"
def checkdigest( signaturefilename, key ):
with open(signaturefilename, mode='rb') as file:
fileContent = file.read()
# find the start of the digest
idxtodigest = fileContent.find('DIGEST:')
if idxtodigest == 0:
return 0
# the message is everything else
message = fileContent[0:idxtodigest]
digestpart = fileContent[idxtodigest+7:]
digestpart = digestpart.replace("\r\n","")
signature = digestpart.decode("hex")
try:
h = SHA.new(message)
verifier = PKCS1_v1_5.new(key)
if not verifier.verify(h, signature):
return 0
except Exception as e:
printw( "could not verify signature: "+str(e) )
return message
def crchex( crc32 ):
crc32b = ctypes.c_uint32(crc32).value
crc32hex = hex(crc32b).upper().replace("0X","").replace("L","")
lenhex = len(crc32hex)
# pad to 8 chars with leading 0s
padding = 8 - lenhex
while padding:
crc32hex = "0"+crc32hex
padding = padding - 1
# byte swap
crc32hex_reverse = crc32hex[6:8]+crc32hex[4:6]+crc32hex[2:4]+crc32hex[0:2]
return crc32hex_reverse
def parsehashes( message, pathto ):
# now verify all the file hashes
newmessage = ""
lines = message.split("\r\n")
for line in lines:
if len(line) == 0:
break
# parse the line, should be 5 parts
# filename "~SHA1" sha1 ";CRC:" crc32
parts=re.split(';|:|~',line)
if len(parts) != 5:
printw( "The file format is unexpected line:"+line )
break
if parts[1] != "SHA1" or parts[3] != "CRC":
printw( "The file format is unexpected line:"+line )
break
hashprovided = parts[2]
crcprovided = parts[4]
onefile = parts[0]
onefile = onefile.replace("...\\","")
onefilepath = os.path.join( pathto, onefile )
try:
with open(onefilepath, mode='rb') as file:
targetcontent = file.read()
except:
printw( "could not open: "+onefilepath )
continue
# compute sha1 of file
mm = hashlib.sha1()
mm.update(targetcontent)
newhash = mm.hexdigest().upper()
# compute crc32 of file
crc32 = zlib.crc32(targetcontent)
crc32hex = crchex(crc32)
if ( newhash == hashprovided.upper() and
crc32hex == crcprovided.upper() ):
printw( "The hashes are correct for "+onefile )
else:
printw( "The hashes are different for "+onefile+" sha: "+newhash+" "+hashprovided.upper()+" CRC "+crc32hex+" "+crcprovided.upper() )
# accumulate new hashes
linenew = "...\\"+onefile+"~SHA1:"+newhash+";CRC:"+crc32hex+"\r\n"
newmessage += linenew
return newmessage
def signatures_need_update( signaturefilename, publickeyfilename ):
if not os.path.exists( signaturefilename ):
printw( "Signature file does not exist" )
sys.stdout.flush()
return False
pathto = os.path.split(signaturefilename)[0]
if not os.path.exists( publickeyfilename ):
printw( "Public key file does not exist" )
sys.stdout.flush()
return False
key = readkeyfile( publickeyfilename )
message = checkdigest( signaturefilename, key )
if len(message) == 0:
printw( "failed to parse signature file " )
return False
newmessage = parsehashes( message, pathto )
if len(newmessage) == 0:
printw( "failed to parse hashes in signature data " )
return False
return newmessage != message
def write_new_signature_file( signaturefilename, publickeyfilename, privatekeyfilename, newsignaturefilename ):
if not os.path.exists( signaturefilename ):
printw( "Signature file does not exist" )
sys.stdout.flush()
return -1
pathto = os.path.split(signaturefilename)[0]
if not os.path.exists( publickeyfilename ):
printw( "Public key file does not exist" )
sys.stdout.flush()
return -2
if not os.path.exists( privatekeyfilename ):
printw( "Private key file does not exist" )
sys.stdout.flush()
return -3
if os.path.exists( newsignaturefilename ) and not os.access( newsignaturefilename, os.W_OK ):
printw( "new signatures file not writeable " )
sys.stdout.flush()
return -4
key = readkeyfile( publickeyfilename )
message = checkdigest( signaturefilename, key )
if len(message) == 0:
printw( "failed to parse old signature file " )
return -5
newmessage = parsehashes( message, pathto )
if len(newmessage) == 0:
printw( "failed to create new signature data " )
return -6
with open( newsignaturefilename, mode='wb') as file:
file.write( newmessage )
hexdigest = signmessage_add_digest( newmessage, privatekeyfilename )
file.write( hexdigest )
printw( "new signatures file written successfully " )
sys.stdout.flush()
return 0
def main():
if len( sys.argv ) != 5 and len( sys.argv ) != 3:
usage()
sys.exit(2)
# common args
signaturefilename = sys.argv[1]
publickeyfilename = sys.argv[2]
if len( sys.argv ) == 5:
# only if writing a new file
privatekeyfilename = sys.argv[3]
newsignaturefilename = sys.argv[4]
write_new_signature_file( signaturefilename, publickeyfilename, privatekeyfilename, newsignaturefilename )
else:
if signatures_need_update( signaturefilename, publickeyfilename ):
printw( "Some signatures did not match" )
else:
printw( "All signatures matched" )
if __name__ == '__main__':
main()

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,4 @@
[autorun]
OPEN=SETUP.EXE
ICON=ICON.ICO

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

View File

@@ -0,0 +1,26 @@
{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\froman\fcharset0 Times;}{\f1\froman\fcharset0 Times New Roman;}{\f2\fswiss\fcharset0 Arial;}}
{\colortbl ;\red0\green0\blue0;}
{\*\generator Msftedit 5.41.15.1507;}\viewkind4\uc1\pard\nowidctlpar\fi720\qc\b\f0\fs20 YOU SHOULD CAREFULLY READ THE ENTIRE FOLLOWING LICENSE AGREEMENT BEFORE INSTALLING THIS SOFTWARE PROGRAM. THIS AGREEMENT CONTAINS IMPORTANT TERMS THAT AFFECT YOUR LEGAL RIGHTS. BY INSTALLING THE SOFTWARE PROGRAM, YOU AGREE TO BE BOUND BY THE TERMS OF THIS AGREEMENT. IF YOU DO NOT AGREE TO THE TERMS OF THIS AGREEMENT, PLEASE DO NOT INSTALL THIS SOFTWARE PROGRAM.\par
\par
\pard\nowidctlpar\sa120\qj\tx360\tx720\b0 The software application(s) (the \ldblquote\ul Program\ulnone\rdblquote ), and any and all copies of the Program are the copyrighted work of Valve Corporation (\ldblquote\ul Valve\ulnone\rdblquote ) or its suppliers. All rights reserved, except as expressly stated herein. The Program is provided solely for installation by end users according to the terms of this License Agreement. All use of the Program is governed by the terms of the Steam Agreement as described below. Any use, reproduction or redistribution of the Program not in accordance with the terms of the License Agreement and the Steam Agreement is expressly prohibited.\par
\pard\nowidctlpar\qc\ul\b\f1 LICENSE AGREEMENT\par
\pard\nowidctlpar\par
\pard\nowidctlpar\qj\tx360\ulnone\b0\tab 1. \ul Limited Installation License\ulnone . \par
\par
\pard\nowidctlpar\fi720\qj\tx360 A. Valve hereby grants, and by installing the Program you thereby accept, a limited, non-exclusive license and right to install one (1) copy of the Program on a computer. In order to use the Program you will have to obtain an account with the Steam service and accept the terms of the \f0 Steam subscriber agreement (\ldblquote\ul Steam Agreement\ulnone\rdblquote )\f1 . \f0 By installing the Program, you agree that your future use of the Program will be subject to the terms of the Steam Agreement. A copy of the Steam Agreement is available at \ul www.steampowered.com/agreement.\ulnone \f1 The Steam Agreement will be displayed to you when you obtain an account with the Steam service. The Program is licensed, not sold. Your license confers no title or ownership in the Program or copies thereof.\par
\pard\nowidctlpar\qj\tx360\par
\pard\nowidctlpar\fi720 B. \f0 You may not, in whole or in part: copy, photocopy, reproduce, translate, reverse engineer\cf1 (with the exception of specific circumstances where such act is permitted by law)\cf0 , derive source code, modify, disassemble, decompile, or create derivative works based on the Program; remove any proprietary notices or labels on the Program; or attempt in any manner to circumvent any security measures designed to control access to the Program. The Program is licensed to you as a single product. Its component parts may not be separated for use on more than one computer. You may not sell, grant a security interest in or transfer reproductions of the Program to other parties in any way, nor to rent, lease or license the Program to others without the prior written consent of Valve.\f1\par
\pard\nowidctlpar\sa120\qj\tx360\tx720\f0\tab\par
\tab 2. \ul Ownership\ulnone . All title, ownership rights and intellectual property rights in and to the Program and any and all copies thereof (including but not limited to any titles, computer code, themes, objects, characters, character names, stories, dialog, catch phrases, locations, concepts, artwork, animations, sounds, musical compositions, audio-visual effects, methods of operation, moral rights, any related documentation, and \ldblquote applets\rdblquote incorporated into the Program) are owned by Valve or its licensors. The Program is protected by the copyright laws of the United States, international copyright treaties and conventions and other laws. All rights are reserved. The Program contains certain licensed materials and Valve\rquote s licensors may protect their rights in the event of any violation of this Agreement.\par
\tab 3. \ul Termination\ulnone . This License Agreement is effective until terminated. You may terminate the License Agreement at any time by destroying the Program. Valve may, at its discretion, terminate this License Agreement in the event that you fail to comply with the terms and conditions contained herein. This License Agreement shall automatically terminate in the event that you fail to comply with the terms and conditions contained herein. In such event, you must immediately destroy the Program. The provisions of Sections 2, 3, and 5-8 will survive any termination of the Agreement. \par
\tab 4. \ul Export Controls\ulnone . The Program may not be re-exported, downloaded or otherwise exported into (or to a national or resident of) any country to which the U.S. has embargoed goods, or to anyone on the U.S. Treasury Department\rquote s list of Specially Designated Nationals or the U.S. Commerce Department\rquote s Table of Denial Orders. By installing the Program, you are agreeing to the foregoing and you are representing and warranting that you are not located in, under the control of, or a national or resident of any such country or on any such list.\par
\pard\nowidctlpar\fi360\qj\tx8100\f1 5. \ul Limited Warranty\ulnone . The entire risk arising out of use or performance of the Program and any printed material(s) remains with the User.\f2 \f1 EXCEPT AS PROVIDED ABOVE, \caps The Program and ANY PRINTED MATERIAL(s) are provided "as is" without warranty of any kind, either express or implied, including, without limitation, the implied warranties of merchantability, fitness for a particular purpose, or noninfringement. \caps0 ANY WARRANTY AGAINST INFRINGEMENT THAT MAY BE PROVIDED IN SECTION 2-312(3) OF THE UNIFORM COMMERCIAL CODE AND/OR IN ANY OTHER COMPARABLE STATE STATUTE IS EXPRESSLY DISCLAIMED. Some states/jurisdictions do not allow the exclusion or limitation of implied warranties, so the above limitations may not apply to you.\par
\pard\nowidctlpar\qj\tx360\tx720\f0\fs18\par
\pard\nowidctlpar\qj\tx360\f1\tab 6. \ul\fs20 Limitation of Liability\ulnone . VALVE, ITS SUPPLIERS AND DISTRIBUTORS SHALL NOT BE LIABLE IN ANY WAY FOR LOSS OR DAMAGE OF ANY KIND RESULTING FROM THE USE OF THE PROGRAM INCLUDING, BUT NOT LIMITED TO, LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES. ANY WARRANTY AGAINST INFRINGEMENT THAT MAY BE PROVIDED IN SECTION 2-312(3) OF THE UNIFORM COMMERCIAL CODE AND/OR IN ANY OTHER COMPARABLE STATE STATUTE IS EXPRESSLY DISCLAIMED. \caps Valve CANNOT AND WILL NOT BE RESPONSIBLE FOR ANY SOFTWARE OR HARDWARE FAILURES OR ANY OTHER EVENT WHICH MAY RESULT IN A LOSS OF DATA OR DISRUPTION OF SERVICE. \caps0 Some states/jurisdictions do not allow the exclusion or limitation of incidental or consequential damages, so the above limitations may not apply. \par
\pard\nowidctlpar\qj\par
\pard\nowidctlpar\sa120\qj\tx360\tab 7. \ul Equitable Remedies\ulnone . You hereby agree that Valve would be irreparably damaged if the terms of this License Agreement were not specifically enforced, and therefore you agree that Valve shall be entitled to appropriate equitable remedies with respect to breaches of this License Agreement, in addition to such other remedies as Valve may otherwise have available to it under applicable laws. In the event any litigation is brought by either party in connection with this License Agreement, the prevailing party in such litigation shall be entitled to recover from the other party all the costs, attorneys\rquote fees and other expenses incurred by such prevailing party in the litigation.\par
\tab 8. \ul Miscellaneous\ulnone .\cf1 The terms of this paragraph do not apply to European Union consumers in the sense of Art. 5 of the Convention on the Law Applicable to Contractual Obligations opened for signature in Rome on 19 June 1980 (Rome Convention, 80/934/EEC) and national legislation based thereon.\cf0 You agree that this Agreement shall be deemed to have been made and executed in the State of Washington, and any dispute arising hereunder shall be resolved in accordance with the law of Washington. You agree that any claim asserted in any legal proceeding by you against Valve shall only be commenced and maintained in any state or federal court located in King County, Washington, and you agree to submit to the exclusive jurisdiction of those courts. In any dispute arising under this Agreement, the prevailing party will be entitled to attorneys' fees and expenses. This License Agreement may be amended, altered or modified only by an instrument in writing, specifying such amendment, alteration or modification, executed by both you and Valve. In the event that any provision of this License Agreement shall be held by a court or other tribunal of competent jurisdiction to be unenforceable, such provision will be enforced to the maximum extent permissible and the remaining portions of this License Agreement shall remain in full force and effect. This License Agreement and the Steam Agreement constitute and contain the entire agreement between the parties with respect to the subject matter hereof and supersede any prior oral or written agreements.\par
You hereby acknowledge that you have read and understand the foregoing License Agreement and agree that the action of installing the Program is an acknowledgment of your agreement to be bound by the terms and conditions of the License Agreement contained herein.\par
\par
}

View File

@@ -0,0 +1,74 @@
Steam Retail Setup File Overview:
---------------------------------
root\Setup.exe :
The main splash screen setup application launched when the customer inserts
the disc. Setup detects the current installation state and displays a simple
menu to install/play/reinstall or uninstall the game. Setup first loads
setup_default.ini, then the setup_<language>.ini for the language chosen by
the user, then all other resource files are loaded based on the current
language configuration. Setup.exe itself does not require admin rights.
root\SteamService.exe :
Helper application to run all additional 3rd party installers from a single
elevated process under Vista. If you don't need to run 3rd party installers,
this executable can be removed.
root\SteamSetup.exe
Used to install Steam on the users machine.
root\autorun.inf :
Tells Windows to run Setup.exe when user inserts disc
root\splash.tga :
Image displayed by Steam while installing files from disk (392x165 pixel)
root\setup.ini :
This is the first config file loaded by Setup regardless the chosen
language. This file configures any language independent settings for this
game like AppID or menu appearance. The syntax is "parameter" "value", a full
list of configuration parameters is given later.
root\resources\setup_<language>.ini :
These files configure Setup for the chosen language. The files are Unicode
encoded. They are loaded after setup_default.ini and can override any
configuration value for this language. Usually they don't need modification.
Currently supported language names are: english, german, french, italian,
korean, spanish, schinese, tchinese, russian, thai, japanese, portuguese,
polish, danish, dutch, finnish, norwegian, swedish, hungarian, czech
root\resources\eula.rtf :
The end user license agreement shown before the user installs the game.
This file is optional. If you have localized versions of this file,
name them eula_<language>.rtf
root\resources\setup.bmp :
The Setup background image as 640x480 pixel BMP file. If you have
localized versions of this file, name them setup_<language>.bmp
root\resources\click.wav :
Played when a button is click. Delete file to play no sound.
root\resources\hover.wav :
Played when a mouse hovers over a button. Delete file to play no sound.
root\resources\launch.wav :
Played when Setup starts. File can be deleted.
Setup_*.ini configuration values:
-------------------------------
"Game" : game name as it appears in the Setup menu
"AppID" : Steam AppID for this game
"Language" : overrides current language, usually not needed
"RequiredSize" : Required free disc space in KB
"URL" : target web URL for technical support button
"FontName" : menu Windows font like "Impact" or "Arial"
"FontHeight" : menu font height, eg "24"
"MenuPos" : menu X and Y coordinates, eg "100 100"
"MenuStyle" : menu text style, 0 = align left, 1 = center, 2 = right
"ColorDefault" : default menu text color in RGB, eg "255 0 255"
"ColorHover" : menu text color for mouse hover event
"ColorDown" : menu text color for mouse pressed event

Binary file not shown.

After

Width:  |  Height:  |  Size: 900 KiB

Binary file not shown.

View File

@@ -0,0 +1,27 @@
"sku"
{
"name" "Steamworks Spacewar"
"disks" "1"
"disk" "1"
"backup" "0"
"contenttype" "3"
"apps"
{
"0" "480"
}
"depots"
{
"0" "481"
}
"manifests"
{
"481" "8382873932604653347"
}
"chunkstores"
{
"481"
{
"1" "841424"
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 190 KiB

View File

@@ -0,0 +1,2 @@
steam.exe -login <account> <password> -build_installer sku_project_example.txt <path>
@type logs\backup_log.txt

View File

@@ -0,0 +1,12 @@
"sku"
{
"name" "Steamworks Spacewar"
"appID" "480"
"disk_size_mb" 4700
"included_depots"
{
"1" "481"
// "2" "482" more depots if needed
}
}

View File

@@ -0,0 +1,57 @@
## Building Spacewars (steamworksexample) for Linux
All native executables built for Steam for Linux should be built using the Steam for Linux runtime SDK.
For a complete developer guide regarding the Steam for Linux runtime, see [3]. For bugs and feature requests regarding the Steam for Linux runtime, see [4].
## Setup
Download, configure and open a shell in one of the Steam for Linux runtime SDKs. See [1] for details.
```
toolbox create -i registry.gitlab.steamos.cloud/steamrt/scout/sdk scout
toolbox enter scout
```
NOTE: You may also use the newer Linux runtime SDK for sniper. See [2].
## Build
Enter the toolbox shell, go to the `steamworksexample/` folder and build:
```
timo@eta-carinae ~/D/sdk> pwd
/home/timo/Downloads/sdk
timo@eta-carinae ~/D/sdk> toolbox enter scout
[timo@toolbox sdk]$ cd steamworksexample/
[timo@toolbox steamworksexample]$ make
g++ -g -DPOSIX -DSDL -I/usr/include/SDL2 -D_REENTRANT -DGNUC -O0 -std=c++0x -Wno-invalid-offsetof -I/home/timo/Downloads/sdk/steamworksexample/../public -DDEBUG -c BaseMenu.cpp -o debug/BaseMenu.o -MD -MF debug/BaseMenu.dep
[..]
```
Use `make CONFIG=RELEASE` for a release build.
Use `ARCH=32` to build a 32 bit binary (do not use the legacy 32 bit scout SDK image, do this in the normal toolbox 64 bit container).
## Run
NOTE: You should not attempt to run out of your docker/podman/toolbox shell. Although it may work in some cases.
The Steam client should be running. The test program will initialize the Steamworks API on startup.
Launch with the `SteamworksExample.sh` script:
```
timo@eta-carinae ~/D/s/s/debug> pwd
/home/timo/Downloads/sdk/steamworksexample/debug
timo@eta-carinae ~/D/s/s/debug> ./SteamworksExample.sh
[S_API] SteamAPI_Init(): Loaded '/home/timo/steam/main/client/linux64/steamclient.so' OK.
Setting breakpad minidump AppID = 480
```
## Reference
1. [Steam for Linux runtime - scout SDK](https://gitlab.steamos.cloud/steamrt/scout/sdk)
2. [Steam for Linux runtime - scout SDK](https://gitlab.steamos.cloud/steamrt/sniper/sdk)
3. [Steam Linux Runtime - guide for game developers](https://gitlab.steamos.cloud/steamrt/steam-runtime-tools/-/blob/main/docs/slr-for-game-developers.md)
4. [Steam Linux Runtime on github](https://github.com/ValveSoftware/steam-runtime)