With cordite in the air, splintered steel, shell casings and powder burns, there’s only one explanation...
Post feedback & meet new friends. General SG discussion.

Moderators: Pardner, TheDoctor

Demo recording improvements for 1.0

Postby Lucky Bro » Sun Aug 09, 2009 6:20 pm

Good day,

I always want to record a demo of a good game, but the trouble is that I always want it after the game happened.
Quake Live as well as ioQuake3 have very good variable cl_autoRecordDemo for such proposes.
We already have it in upcoming SG 1.1, but before SG1.1 will be released a few tourneys will happen, so I decided to do a short binary patch for current 1.0.

1. New variables.
cl_autoRecordDemo 0 by default.
If set to 1 will record every game you play. 0 turns off this feature.
cl_autoDemoName 0 by default.
Will use improved demo naming instead of default one if set to 1. 0 turns this feature off.
cl_hideDemoMessage 0 by default.
Will hide big text "Recoding <demo name> : <amount> Kb" if set to 1. 0 turns off this feature.
cl_autoScreenshot 0 by default.
Will do a screenshot after each team match (only Team games and Timeouts!) if set to 1.
cl_autoScreenshotJPEG 0 by default.
Will do a screenshotJPEG after each team match (only Team games and Timeouts!) if set to 1.
cl_autoConsoleDump 0 by default.
Will do a console dump after each team match (only Team games and Timeouts!) if set to 1.
cl_autoScreenshotTime 220 by default.
Sets amout of frames to wait before take auto screenshot.
2. How to use new variables.
Just open the console and type:
/<variable name> <value>
For example:
/cl_autoRecordDemo 1
to turn on this feature.
NB: The autoscreenshot feature just checks for scorelimit/timout print message to arrive. I haven't found other way to do autoscreenshot feature without modifying QVMs. So you have to set cl_autoScreenshotTime value as it fits your game. If you set it to 0 you'll get the screenshot right when the message arrives (there is no scoretable in that particular moment).
Also TGA screenshot is taken for one frame later than JPEG one. It is done beause you can't do both at the same frame.
I suggest that you'll use only one value from these that will fit your needs. But still you are free to use both.

3. How to install patch.
Just download binary file (see at the bottom of the post). Place it near your main binary smokinguns.exe in game's directory.
Use it instead of smokinguns.exe to launch the game. Yes, it is allowed to play with it on official servers. This is not a cheating.
If you don't have openAL.dll installed use smokingunsARnoOAL.exe (smokin' guns exe without openAL) instead.
4. The source code patch.
You also may took my source code patch (at the bottom of the post).
If you can improve it - please post it in this topic after. I would like to use better version if it is possible.
If you want just to read it take a look in the spoiler:
Index: code/client/cl_cgame.c
===================================================================
--- code/client/cl_cgame.c (revision 263)
+++ code/client/cl_cgame.c (working copy)
@@ -418,8 +418,49 @@
#define VMA(x) VM_ArgPtr(args[x])
#define VMF(x) ((float *)args)[x]
int CL_CgameSystemCalls( int *args ) {
+ char timestamp[MAX_OSPATH]; //Required for auto Screenshot&ConsoleDump stuff
switch( args[0] ) {
case CG_PRINT:
+ if (cl_autoScreenshotJPEG->integer || cl_autoScreenshot->integer || cl_autoConsoleDump->integer) {
+ if (Q_strncmp(VMA(1),Cvar_VariableString("g_blueteamname"),strlen(Cvar_VariableString("g_blueteamname"))) == 0) {
+ if (Q_strncmp((const char*)VMA(1)+strlen(Cvar_VariableString("g_blueteamname"))," hit the scorelimit.",20) == 0) {
+ CL_CurrentTimestamp(timestamp);
+ if (cl_autoConsoleDump->integer) {
+ Cbuf_ExecuteText( EXEC_INSERT, va( "wait %d; condump \"%s.txt\"",cl_autoScreenshotTime->integer, timestamp) );
+ }
+ if (cl_autoScreenshotJPEG->integer) {
+ Cbuf_ExecuteText( EXEC_INSERT, va( "wait %d; screenshotJPEG \"%s\"",cl_autoScreenshotTime->integer, timestamp ) );
+ }
+ if (cl_autoScreenshot->integer) {
+ Cbuf_ExecuteText( EXEC_INSERT, va( "wait %d; screenshot \"%s\"",cl_autoScreenshotTime->integer+1, timestamp ) );
+ }
+ }
+ } else if (Q_strncmp(VMA(1),Cvar_VariableString("g_redteamname"),strlen(Cvar_VariableString("g_redteamname"))) == 0) {
+ if (Q_strncmp((const char*)VMA(1)+strlen(Cvar_VariableString("g_redteamname"))," hit the scorelimit.",20) == 0) {
+ CL_CurrentTimestamp(timestamp);
+ if (cl_autoConsoleDump->integer) {
+ Cbuf_ExecuteText( EXEC_INSERT, va( "wait %d; condump \"%s.txt\"",cl_autoScreenshotTime->integer, timestamp) );
+ }
+ if (cl_autoScreenshotJPEG->integer) {
+ Cbuf_ExecuteText( EXEC_INSERT, va( "wait %d; screenshotJPEG \"%s\"",cl_autoScreenshotTime->integer, timestamp ) );
+ }
+ if (cl_autoScreenshot->integer) {
+ Cbuf_ExecuteText( EXEC_INSERT, va( "wait %d; screenshot \"%s\"",cl_autoScreenshotTime->integer+1, timestamp ) );
+ }
+ }
+ } else if (Q_strncmp(VMA(1),"Timelimit hit.",14) == 0) {
+ CL_CurrentTimestamp(timestamp);
+ if (cl_autoConsoleDump->integer) {
+ Cbuf_ExecuteText( EXEC_INSERT, va( "wait %d; condump \"%s.txt\"",cl_autoScreenshotTime->integer, timestamp) );
+ }
+ if (cl_autoScreenshotJPEG->integer) {
+ Cbuf_ExecuteText( EXEC_INSERT, va( "wait %d; screenshotJPEG \"%s\"",cl_autoScreenshotTime->integer, timestamp ) );
+ }
+ if (cl_autoScreenshot->integer) {
+ Cbuf_ExecuteText( EXEC_INSERT, va( "wait %d; screenshot \"%s\"",cl_autoScreenshotTime->integer+1, timestamp ) );
+ }
+ }
+ }
Com_Printf( "%s", VMA(1) );
return 0;
case CG_ERROR:
Index: code/client/cl_main.c
===================================================================
--- code/client/cl_main.c (revision 263)
+++ code/client/cl_main.c (working copy)
@@ -55,6 +55,13 @@
cvar_t *cl_timedemo;
cvar_t *cl_avidemo;
cvar_t *cl_forceavidemo;
+cvar_t *cl_autoRecordDemo;
+cvar_t *cl_autoDemoName;
+cvar_t *cl_hideDemoMessage;
+cvar_t *cl_autoScreenshot;
+cvar_t *cl_autoScreenshotJPEG;
+cvar_t *cl_autoConsoleDump;
+cvar_t *cl_autoScreenshotTime;

cvar_t *cl_freelook;
cvar_t *cl_sensitivity;
@@ -292,6 +299,36 @@
, a, b, c, d );
}

+void CL_CurrentTimestamp(char *fileName) {
+ //Build the name:
+ qtime_t now;
+ char *nowString;
+ char *p;
+ char mapName[ MAX_QPATH ];
+ char serverName[ MAX_OSPATH ];
+
+ Com_RealTime( &now );
+ nowString = va( "%04d%02d%02d-%02d%02d%02d",
+ 1900 + now.tm_year,
+ 1 + now.tm_mon,
+ now.tm_mday,
+ now.tm_hour,
+ now.tm_min,
+ now.tm_sec );
+
+ Q_strncpyz( serverName, cls.servername, MAX_OSPATH );
+ // Replace the ":" in the address as it is not a valid
+ // file name character
+ p = strstr( serverName, ":" );
+ if( p ) {
+ *p = '.';
+ }
+
+ Q_strncpyz( mapName, COM_SkipPath( cl.mapname ), sizeof( cl.mapname ) );
+ COM_StripExtension(mapName, mapName, sizeof(mapName));
+
+ Com_sprintf (fileName, MAX_OSPATH, "%s-%s-%s-%s",Cvar_VariableString("name"),nowString, serverName, mapName);
+}
/*
====================
CL_Record_f
@@ -339,16 +376,23 @@
Q_strncpyz( demoName, s, sizeof( demoName ) );
Com_sprintf (name, sizeof(name), "demos/%s.dm_%d", demoName, PROTOCOL_VERSION );
} else {
- int number;
+ if (cl_autoDemoName->integer) {
+ int number;

- // scan for a free demo name
- for ( number = 0 ; number <= 9999 ; number++ ) {
- CL_DemoFilename( number, demoName );
+ CL_CurrentTimestamp(demoName);
Com_sprintf (name, sizeof(name), "demos/%s.dm_%d", demoName, PROTOCOL_VERSION );
+ } else {
+ int number;

- len = FS_ReadFile( name, NULL );
- if ( len <= 0 ) {
- break; // file doesn't exist
+ // scan for a free demo name
+ for ( number = 0 ; number <= 9999 ; number++ ) {
+ CL_DemoFilename( number, demoName );
+ Com_sprintf (name, sizeof(name), "demos/%s.dm_%d", demoName, PROTOCOL_VERSION );
+
+ len = FS_ReadFile( name, NULL );
+ if ( len <= 0 ) {
+ break; // file doesn't exist
+ }
}
}
}
@@ -2141,6 +2185,20 @@
}
}

+ if( cl_autoRecordDemo->integer ) {
+ if( cls.state == CA_ACTIVE && !clc.demorecording && !clc.demoplaying ) {
+ // If not recording a demo, and we should be, start one
+ char timestamp[MAX_OSPATH];
+ CL_CurrentTimestamp(timestamp);
+
+ Cbuf_ExecuteText( EXEC_NOW, va( "record %s", timestamp) );
+ }
+ else if( cls.state != CA_ACTIVE && clc.demorecording ) {
+ // Recording, but not CA_ACTIVE, so stop recording
+ CL_StopRecord_f( );
+ }
+ }
+
// save the msec before checking pause
cls.realFrametime = msec;

@@ -2454,6 +2512,14 @@
cl_activeAction = Cvar_Get( "activeAction", "", CVAR_TEMP );

cl_timedemo = Cvar_Get ("timedemo", "0", 0);
+ cl_autoRecordDemo = Cvar_Get ("cl_autoRecordDemo", "0", CVAR_ARCHIVE);
+ cl_autoDemoName = Cvar_Get ("cl_autoDemoName", "0", CVAR_ARCHIVE);
+ cl_hideDemoMessage = Cvar_Get ("cl_hideDemoMessage", "0", CVAR_ARCHIVE);
+ cl_autoScreenshot = Cvar_Get ("cl_autoScreenshot", "0", CVAR_ARCHIVE);
+ cl_autoScreenshotJPEG = Cvar_Get ("cl_autoScreenshotJPEG", "0", CVAR_ARCHIVE);
+ cl_autoScreenshotTime = Cvar_Get ("cl_autoScreenshotTime", "220", CVAR_ARCHIVE);
+ cl_autoConsoleDump = Cvar_Get ("cl_autoConsoleDump", "0", CVAR_ARCHIVE);
+
cl_avidemo = Cvar_Get ("cl_avidemo", "0", 0);
cl_forceavidemo = Cvar_Get ("cl_forceavidemo", "0", 0);

Index: code/client/cl_parse.c
===================================================================
--- code/client/cl_parse.c (revision 263)
+++ code/client/cl_parse.c (working copy)
@@ -469,6 +469,10 @@
// parse serverId and other cvars
CL_SystemInfoChanged();

+ // stop recording now so the demo won't have an unnecessary level load at the end.
+ if(cl_autoRecordDemo->integer && clc.demorecording)
+ CL_StopRecord_f();
+
// reinitialize the filesystem if the game directory has changed
FS_ConditionalRestart( clc.checksumFeed );

Index: code/client/cl_scrn.c
===================================================================
--- code/client/cl_scrn.c (revision 263)
+++ code/client/cl_scrn.c (working copy)
@@ -490,7 +490,7 @@
break;
case CA_ACTIVE:
CL_CGameRendering( stereoFrame );
- SCR_DrawDemoRecording();
+ if (!cl_hideDemoMessage->integer)SCR_DrawDemoRecording();
break;
}
}
Index: code/client/client.h
===================================================================
--- code/client/client.h (revision 263)
+++ code/client/client.h (working copy)
@@ -353,6 +353,13 @@
extern cvar_t *cl_allowDownload;
extern cvar_t *cl_conXOffset;
extern cvar_t *cl_inGameVideo;
+extern cvar_t *cl_autoRecordDemo;
+extern cvar_t *cl_autoDemoName;
+extern cvar_t *cl_hideDemoMessage;
+extern cvar_t *cl_autoScreenshot;
+extern cvar_t *cl_autoScreenshotJPEG;
+extern cvar_t *cl_autoScreenshotTime;
+extern cvar_t *cl_autoConsoleDump;

#ifdef USE_MUMBLE
extern cvar_t *cl_useMumble;
@@ -392,8 +399,8 @@
void CL_InitRef( void );
qboolean CL_CDKeyValidate( const char *key, const char *checksum );
int CL_ServerStatus( char *serverAddress, char *serverStatusString, int maxLen );
+void CL_CurrentTimestamp(char *fileName);

-
//
// cl_input
//

5. File names description.
For every feature it is the following:
<player name><timestamp>-<server name>-<map name>
Be aware that demos are stored in smokinguns/demos folder, screenshot in smokinguns/screenshots and console dumps in smokinguns/ folder.
6. Something else?
Yeah.
You may add the following to your current config or to autoexec.cfg:
// Record demos

bind F4 "g_synchronousclients 1;record;g_synchronousclients 0"
bind F5 "stoprecord"
bind F6 "record"
//I'm not sure that it is the best way to do it.. but I don't know other.

// Playback Controls (taken from Qlive forums, sorry I forgot the author and can't find it again)

bind leftarrow "vstr seis_speed-"
bind rightarrow "vstr seis_speed+"
bind downarrow "vstr seis_speed_0.0"
bind uparrow "vstr seis_speed_1.0"
set seis_speed- "vstr seis_speed_0.9"
set seis_speed+ "vstr seis_speed_2.0"
set seis_speed_0.0 "set timescale 0.0001; cl_freezedemo 1; set seis_speed- vstr seis_speed_0.0; set seis_speed+ vstr

seis_speed_0.1; echo ^2Timescale^7: ^30.0 (Paused);"
set seis_speed_0.1 "set timescale 0.1; cl_freezedemo 0; set seis_speed- vstr seis_speed_0.0; set seis_speed+ vstr

seis_speed_0.2; echo ^2Timescale^7: ^30.1;"
set seis_speed_0.2 "set timescale 0.2; cl_freezedemo 0; set seis_speed- vstr seis_speed_0.1; set seis_speed+ vstr

seis_speed_0.3; echo ^2Timescale^7: ^30.2;"
set seis_speed_0.3 "set timescale 0.3; cl_freezedemo 0; set seis_speed- vstr seis_speed_0.2; set seis_speed+ vstr

seis_speed_0.4; echo ^2Timescale^7: ^30.3;"
set seis_speed_0.4 "set timescale 0.4; cl_freezedemo 0; set seis_speed- vstr seis_speed_0.3; set seis_speed+ vstr

seis_speed_0.5; echo ^2Timescale^7: ^30.4;"
set seis_speed_0.5 "set timescale 0.5; cl_freezedemo 0; set seis_speed- vstr seis_speed_0.4; set seis_speed+ vstr

seis_speed_0.6; echo ^2Timescale^7: ^30.5;"
set seis_speed_0.6 "set timescale 0.6; cl_freezedemo 0; set seis_speed- vstr seis_speed_0.5; set seis_speed+ vstr

seis_speed_0.7; echo ^2Timescale^7: ^30.6;"
set seis_speed_0.7 "set timescale 0.7; cl_freezedemo 0; set seis_speed- vstr seis_speed_0.6; set seis_speed+ vstr

seis_speed_0.8; echo ^2Timescale^7: ^30.7;"
set seis_speed_0.8 "set timescale 0.8; cl_freezedemo 0; set seis_speed- vstr seis_speed_0.7; set seis_speed+ vstr

seis_speed_0.9; echo ^2Timescale^7: ^30.8;"
set seis_speed_0.9 "set timescale 0.9; cl_freezedemo 0; set seis_speed- vstr seis_speed_0.8; set seis_speed+ vstr

seis_speed_1.0; echo ^2Timescale^7: ^30.9;"
set seis_speed_1.0 "set timescale 1.0; cl_freezedemo 0; set seis_speed- vstr seis_speed_0.9; set seis_speed+ vstr

seis_speed_2.0; echo ^2Timescale^7: ^31.0 (Normal);"
set seis_speed_2.0 "set timescale 2.0; cl_freezedemo 0; set seis_speed- vstr seis_speed_1.0; set seis_speed+ vstr

seis_speed_4.0; echo ^2Timescale^7: ^32.0;"
set seis_speed_4.0 "set timescale 4.0; cl_freezedemo 0; set seis_speed- vstr seis_speed_2.0; set seis_speed+ vstr

seis_speed_8.0; echo ^2Timescale^7: ^34.0;"
set seis_speed_8.0 "set timescale 8.0; cl_freezedemo 0; set seis_speed- vstr seis_speed_4.0; set seis_speed+ vstr

seis_speed_16.0; echo ^2Timescale^7: ^38.0;"
set seis_speed_16.0 "set timescale 16.0; cl_freezedemo 0; set seis_speed- vstr seis_speed_8.0; set seis_speed+ vstr

seis_speed_32.0; echo ^2Timescale^7: ^316.0;"
set seis_speed_32.0 "set timescale 32.0; cl_freezedemo 0; set seis_speed- vstr seis_speed_16.0; set seis_speed+ vstr

seis_speed_64.0; echo ^2Timescale^7: ^332.0;"
set seis_speed_64.0 "set timescale 64.0; cl_freezedemo 0; set seis_speed- vstr seis_speed_32.0; set seis_speed+ vstr

seis_speed_128.0; echo ^2Timescale^7: ^364.0;"
set seis_speed_128.0 "set timescale 128.0; cl_freezedemo 0; set seis_speed- vstr seis_speed_64.0; set seis_speed+ vstr

seis_speed_128.0; echo ^2Timescale^7: ^3128.0 (Maximum);"

echo ^3Demo^1 plyaback control ^7successfully ^9Loaded;
echo Use arrows to control playback process;

This allow you to have F4 as button to record demo, F5 as button to stop demorecording and arrow keys as controls during demo playback.

Feel free to suggest improvements to these variables. As well as to ask help about them.
Also if you have a better solutions or ways to record and playback demos - post them too (maybe not in this thread, but still - share them - I'm looking for those things too).

One more thing - I don't have any *nix system around me to build *nix binaries. Conq is posting them in second post here.

Here are the files:
smokingunsAR.exe
smokingunsARnoOAL.exe
AutoRecord.patch

Thank you for attention!
Have fun!

P.S. Thank you Conq for helping figure out some hard things during this patch creation ;)
Last edited by Lucky Bro on Wed Aug 12, 2009 11:38 am, edited 10 times in total.
"You should know that the lies won't hide your flaws/No sense in hiding all of yours/You gave up on your dreams along the way" (c) "Fake it" by Seether
P.S. English isn't my native language.
User avatar
Lucky Bro
Gunslinger
 
Posts: 143
Joined: Mon Mar 09, 2009 4:12 pm



Postby Conq » Sun Aug 09, 2009 6:29 pm

Good job Lucky Bro ;-)

I have just finished to build & upload the Linux binary version of your patch ;-).

Here it is. You just have to use the "Télécharger ce fichier" link ;-). (Yes, it's in french... But at least, there's no flash ><).
Last edited by Conq on Wed Aug 12, 2009 12:03 pm, edited 2 times in total.
Conq
Drifter
 
Posts: 13
Joined: Sun May 31, 2009 9:37 am



Postby mLy! » Sun Aug 09, 2009 6:37 pm

nice patch, but i dont keep demos because i never will make an SG video with them myself.

If a skilled movie maker wants to make a movie from me they can contact me and we can talk :)
My Latest fragmovies:
Winning BB cup
User avatar
mLy!
Gunslinger
 
Posts: 218
Joined: Wed Feb 11, 2009 8:46 pm



Postby Lucky Bro » Mon Aug 10, 2009 8:25 am

The advance is not only it movie making.
I think major part is about the upcoming tourneys you will lead.
You will have enough of material if someone will complain about something (cheating, absence or whatever else may happen).
With auto demo you'll have every match. And with controls for playback from configuration section you may find doubtable moments very fast.
Also it is a good practice to share demos between players. If demo worth it - a lot of new players will learn much. It is much better than watching players on Jeux especially because matches usually are played with a little different server configuration than there.

As far as I know mS // Donnie may help you with movie making :) At least with simple one for youtube.
Usually you'll need Fraps for capturing and Audacity for some sound recording/editing. And some program to merge sound and video in final file (virtualDub, for example).
But before any of these you'll need the material :) And here comes this auto-recording and naming.
I saw a nifty variable in Qlive which also forces to make a screenshot after each match. As far as I know this is a strict rule - to make a screenshot after each tourney match.
So, maybe we could implement this one too (yeah, right after black color.. ;)).
"You should know that the lies won't hide your flaws/No sense in hiding all of yours/You gave up on your dreams along the way" (c) "Fake it" by Seether
P.S. English isn't my native language.
User avatar
Lucky Bro
Gunslinger
 
Posts: 143
Joined: Mon Mar 09, 2009 4:12 pm



Postby mLy! » Mon Aug 10, 2009 10:50 am

yes you are right.

btw, does recording with this patch also display the very large 'RECORDING' text on the screen when playing?
My Latest fragmovies:
Winning BB cup
User avatar
mLy!
Gunslinger
 
Posts: 218
Joined: Wed Feb 11, 2009 8:46 pm



Needs a new variable to implement such thing

Postby Lucky Bro » Mon Aug 10, 2009 11:01 am

The big "Recording" text is not going from this patch but from general demo recording process - each time when we are recording demo we are watching this text (as a big reminder).
And you are right it could be hidden because its annoyingly. So, I'll try to take a look for a way to implement a variable to hide this text.

EDIT: Done. Check the first post.
"You should know that the lies won't hide your flaws/No sense in hiding all of yours/You gave up on your dreams along the way" (c) "Fake it" by Seether
P.S. English isn't my native language.
User avatar
Lucky Bro
Gunslinger
 
Posts: 143
Joined: Mon Mar 09, 2009 4:12 pm



Postby /dev/random » Mon Aug 10, 2009 9:48 pm

The Competition-Mod for World of Padman does both, taking a screenshot and saving the results of the match into a textfile, at the end of a round.

By the way, according to this post, the code of q3mme is lost :(
User avatar
/dev/random
Smokin' Amigo!
 
Posts: 410
Joined: Thu Jan 22, 2009 1:58 pm



Screenshot accepted. What exactly should be in the text file

Postby Lucky Bro » Tue Aug 11, 2009 8:38 am

Thank you for link but.. I think it'll be really hard to me to find something in WoP :) I can barely look to SG one :)
About the screenshots after round - yeah, I think this way too. Should be done. Now I have to fast rewind demo to end of round to take a screenshot if I forgot to do one (I always forget :)). But I don't know when I'll code it..
And about text file - what exactly should be in such a file (console dump + scores)?

Hadn't try q3mme. I only read about it.
I don't think that we badly need all its features, but timeline and possibility to play in backward direction would help a lot during demos inspecting.
"You should know that the lies won't hide your flaws/No sense in hiding all of yours/You gave up on your dreams along the way" (c) "Fake it" by Seether
P.S. English isn't my native language.
User avatar
Lucky Bro
Gunslinger
 
Posts: 143
Joined: Mon Mar 09, 2009 4:12 pm



Postby mLy! » Tue Aug 11, 2009 10:19 am

Dont know if it helps, but OSP mod for rtcw and ETPRO mod for et both have a cvar for screenshot and console dump after every round

they are both q3 engine, so code might be similar.
My Latest fragmovies:
Winning BB cup
User avatar
mLy!
Gunslinger
 
Posts: 218
Joined: Wed Feb 11, 2009 8:46 pm



Postby Lucky Bro » Wed Aug 12, 2009 11:50 am

Thanks for info mLy. I don't know if OSP or ET are open-source ones.
Anyway the major point here is that I can modify only binaries which makes the job pretty tough sometimes.

Anyway the job is done. Check the first post and second for *nix binaries.
This isn't the way how things done in OSP, WoP or ET for sure.. I think the most closest example is modified CPMA client.

Hope this is all about demos improvements in 1.0 SG for now :)

Also thanks mLy for idea about non-openAL version :)
"You should know that the lies won't hide your flaws/No sense in hiding all of yours/You gave up on your dreams along the way" (c) "Fake it" by Seether
P.S. English isn't my native language.
User avatar
Lucky Bro
Gunslinger
 
Posts: 143
Joined: Mon Mar 09, 2009 4:12 pm



Postby mLy! » Wed Aug 12, 2009 1:40 pm

nice that you added the ss option.
what is the third file, the 'patch' ?

guess i need to dl again for the ss options?
My Latest fragmovies:
Winning BB cup
User avatar
mLy!
Gunslinger
 
Posts: 218
Joined: Wed Feb 11, 2009 8:46 pm



Postby Lucky Bro » Wed Aug 12, 2009 2:21 pm

Patch file is the source code that I have modified. If someone is interested how its done or just to use it current or any other project. Mean "the things inside" :) You don't need it to play SG :)

Yeah, you have to re-download binary. Take the second one without openAL to be able to launch game without openAL. If you wonder what is so special about openAL you may download the first file and then download and install openAL library (official site direct download link) . In short - it is sound engine. It will be used it upcoming 1.1.
"You should know that the lies won't hide your flaws/No sense in hiding all of yours/You gave up on your dreams along the way" (c) "Fake it" by Seether
P.S. English isn't my native language.
User avatar
Lucky Bro
Gunslinger
 
Posts: 143
Joined: Mon Mar 09, 2009 4:12 pm



Postby Sucalakafufu » Wed Aug 12, 2009 9:15 pm

nice work LuckyBro! anyway it might be just me but im not able to download either of the binaries? i click on the download on mediafire and it just refreshes my screen... hmm im not sure what the problem is with this
SG Name: Sucalakafufu
Clan: [CWNN] - Clan With No Name
User avatar
Sucalakafufu
Gunslinger
 
Posts: 239
Joined: Thu Apr 16, 2009 8:59 am



Postby Lucky Bro » Wed Aug 12, 2009 9:52 pm

Files are there for sure. My bro has downloaded them today.
And I just checked from other PC - they are downloadable.
Maybe it is because of flash on that site (MediaFire)?
I don't know other good and free file storages..
Point me some if you think they worth a try.
"You should know that the lies won't hide your flaws/No sense in hiding all of yours/You gave up on your dreams along the way" (c) "Fake it" by Seether
P.S. English isn't my native language.
User avatar
Lucky Bro
Gunslinger
 
Posts: 143
Joined: Mon Mar 09, 2009 4:12 pm



Postby Sucalakafufu » Thu Aug 13, 2009 5:25 am

Lucky Bro wrote:Files are there for sure. My bro has downloaded them today.
And I just checked from other PC - they are downloadable.
Maybe it is because of flash on that site (MediaFire)?
I don't know other good and free file storages..
Point me some if you think they worth a try.


nah MediaFire is actually good. haha it must have been something else cuz i just got the downloads to work :)
SG Name: Sucalakafufu
Clan: [CWNN] - Clan With No Name
User avatar
Sucalakafufu
Gunslinger
 
Posts: 239
Joined: Thu Apr 16, 2009 8:59 am



Next

Return to Saloon

Show Sidebar
Show Sidebar

User Control Panel

cron