Just Cause 2

Oh ok, any one in particular? I'm stuck with only my laptop now so can't check it out for myself.

I'm not sure, I just turned them all off in one fell swoop and saw my framerate literally double and I couldn't notice any degradation to the ingame graphics either. Medium + high res shadows seem to give the best combination of quality and performance to my eyes as well.
 
No, its that the Nvidia specific effects absolutely destroy performance, for very questionable image quality gains. It was a little unclear what was causing such middling performance before, they're definitely the culprit. Perhaps separating them from the other settings would have helped.

They are Nvidia's marketing differentiators, even if you can't use them and still get playable framerates even on top end hardware.
 
Time for benchmarking.

V'sync and TB enabled:

vsynctb.png


V'sync and TB disabled:

39184663.png


System:
* Q9540 @ 3608MHz
* HD5870 @ 900/5000MHz, Cat 10.3 press review
* Win7 x86

1680*1050, everything maxed out, 4xAA.

Since there's no fixed timedemo record, I had to improvise by wandering around the training camp and blowing up stuff, keeping more or less the same path.
 
Last edited by a moderator:
I was just about to say something along those lines. The faster context switching in Fermi should help with the DirectX+CUDA combo. Maybe the AO and bokeh kernels might even run in parallel.
 
What a great demo. Looks great and looks like a fun sandbox mayhem. It ran solidly on my 4890 + Q8200 @1920x4xAA.
 
Not really. It's what brain_stew said; the bokeh filter incurs a massive performance penalty for a visual effect that I can best describe as "meh".

That's not what I'm seeing, granted it's based on just the first little area in the demo. SSAO is giving me a much bigger hit than the bokeh filter. The point light specular setting has no impact on performance, at least in that part of the game.

Base: 60fps
+SSAO/Specular: 49fps
+Bokeh: 45fps

Q9550 @ 3.1Ghz, stock GTX 285

jc2.png
 
Hack to bypass demo time-limit:

1. Install AutoIt 3
2. Run the demo
3. While in the main menu, launch Scite (AutoIt editor)
4. Paste this code:
Code:
Code: 
;;====================================== ======================================== == 
;; Includes 
;;====================================== ======================================== == 
#include <GUIConstantsEx.au3> 
#include <StaticConstants.au3> 
#include <WindowsConstants.au3> 
#RequireAdmin 
#NoTrayIcon 
;;====================================== ======================================== == 
;; Main 
;;====================================== ======================================== == 
Opt("WinTitleMatchMode", 4) 
SetPrivilege("SeDebugPrivilege", 1) 
Global $ProcessID = WinGetProcess("Just Cause 2 Demo", "") 
Dim $ProcessFound = 0 
While $ProcessFound = 0 
If $ProcessID = -1 Then 
MsgBox(4096, "Error", "No process found.") 
Exit(1) 
EndIf 
$ProcessFound = 1 
WEnd 
 
WinActivate("Just Cause 2 Demo") 
$wc = WinGetPos("Just Cause 2 Demo") 
$x = $wc[0] + ($wc[2] / 2) - 149/2 
$y = $wc[1] + ($wc[3] / 2) - 42/2 
 
GUICreate("BOLOPatch", 149, 42, $x, $y, BitOR($WS_SYSMENU,$WS_CAPTION,$WS_POPUP, $WS_POPUPWINDOW,$WS_BORDER)) 
GUICtrlCreateLabel("Status:", 0, 0, 37, 17, $SS_CENTER) 
$status = GUICtrlCreateLabel("", 40, 0, 107, 17, $SS_CENTER, $WS_EX_CLIENTEDGE) 
GUICtrlCreateLabel("Coding by G&H Productions", 0, 24, 148, 17, BitOR($SS_CENTER,$SS_NOPREFIX), $WS_EX_CLIENTEDGE) 
GUISetState() 
 
Patch() 
 
While 1 
$msg = GUIGetMsg() 
Switch $msg 
Case $GUI_EVENT_CLOSE 
Exit 
EndSwitch 
WEnd 
;;====================================== ======================================== == 
;; Patch 
;;====================================== ======================================== == 
Func Patch() 
$DLL = _MemoryOpen($ProcessID) 
 
If @Error Then 
GUICtrlSetData($status, "Patching failure.") 
EndIf 
 
_MemoryWrite(0x004FE17D, $DLL, 0x90, "byte");;; 
_MemoryWrite(0x004FE17E, $DLL, 0x90, "byte");;; TIME LIMIT DISABLE 
_MemoryWrite(0x004FE17F, $DLL, 0x90, "byte");;; 
 
_MemoryWrite(0x007F2C95, $DLL, 0x90, "byte");;; 
_MemoryWrite(0x007F2C96, $DLL, 0x90, "byte");;; 
_MemoryWrite(0x007F2C97, $DLL, 0x90, "byte");;; MAP LIMIT DISABLE 
_MemoryWrite(0x007F2C98, $DLL, 0x90, "byte");;; 
_MemoryWrite(0x007F2C99, $DLL, 0x90, "byte");;; 
 
_MemoryClose($DLL) 
 
GUICtrlSetData($status, "Patching success!") 
EndFunc 
 
;;; 
;; NOMADMEMORY EXTRACT 
;;; 
 
Func _MemoryOpen($iv_Pid, $iv_DesiredAccess = 0x1F0FFF, $iv_InheritHandle = 1) 
 
If Not ProcessExists($iv_Pid) Then 
SetError(1) 
Return 0 
EndIf 
 
Local $ah_Handle[2] = [DllOpen('kernel32.dll')] 
 
If @Error Then 
SetError(2) 
Return 0 
EndIf 
 
Local $av_OpenProcess = DllCall($ah_Handle[0], 'int', 'OpenProcess', 'int', $iv_DesiredAccess, 'int', $iv_InheritHandle, 'int', $iv_Pid) 
 
If @Error Then 
DllClose($ah_Handle[0]) 
SetError(3) 
Return 0 
EndIf 
 
$ah_Handle[1] = $av_OpenProcess[0] 
 
Return $ah_Handle 
 
EndFunc 
 
Func _MemoryWrite($iv_Address, $ah_Handle, $v_Data, $sv_Type = 'dword') 
 
If Not IsArray($ah_Handle) Then 
SetError(1) 
Return 0 
EndIf 
 
Local $v_Buffer = DllStructCreate($sv_Type) 
 
If @Error Then 
SetError(@Error + 1) 
Return 0 
Else 
DllStructSetData($v_Buffer, 1, $v_Data) 
If @Error Then 
SetError(6) 
Return 0 
EndIf 
EndIf 
 
DllCall($ah_Handle[0], 'int', 'WriteProcessMemory', 'int', $ah_Handle[1], 'int', $iv_Address, 'ptr', DllStructGetPtr($v_Buffer), 'int', DllStructGetSize($v_Buffer), 'int', '') 
 
If Not @Error Then 
Return 1 
Else 
SetError(7) 
Return 0 
EndIf 
 
EndFunc 
 
Func _MemoryClose($ah_Handle) 
 
If Not IsArray($ah_Handle) Then 
SetError(1) 
Return 0 
EndIf 
 
DllCall($ah_Handle[0], 'int', 'CloseHandle', 'int', $ah_Handle[1]) 
If Not @Error Then 
DllClose($ah_Handle[0]) 
Return 1 
Else 
DllClose($ah_Handle[0]) 
SetError(2) 
Return 0 
EndIf 
 
EndFunc 
 
Func SetPrivilege( $privilege, $bEnable ) 
Const $MY_TOKEN_ADJUST_PRIVILEGES = 0x0020 
Const $MY_TOKEN_QUERY = 0x0008 
Const $MY_SE_PRIVILEGE_ENABLED = 0x0002 
Local $hToken, $SP_auxret, $SP_ret, $hCurrProcess, $nTokens, $nTokenIndex, $priv 
$nTokens = 1 
$LUID = DLLStructCreate("dword;int") 
If IsArray($privilege) Then $nTokens = UBound($privilege) 
$TOKEN_PRIVILEGES = DLLStructCreate("dword;dword[" & (3 * $nTokens) & "]") 
$NEWTOKEN_PRIVILEGES = DLLStructCreate("dword;dword[" & (3 * $nTokens) & "]") 
$hCurrProcess = DLLCall("kernel32.dll","hwnd","GetCurren tProcess") 
$SP_auxret = DLLCall("advapi32.dll","int","OpenProces sToken","hwnd",$hCurrProcess[0], _ 
"int",BitOR($MY_TOKEN_ADJUST_PRIVILEGES, $MY_TOKEN_QUERY),"int*",0) 
If $SP_auxret[0] Then 
$hToken = $SP_auxret[3] 
DLLStructSetData($TOKEN_PRIVILEGES,1,1) 
$nTokenIndex = 1 
While $nTokenIndex <= $nTokens 
If IsArray($privilege) Then 
$priv = $privilege[$nTokenIndex-1] 
Else 
$priv = $privilege 
EndIf 
$ret = DLLCall("advapi32.dll","int","LookupPriv ilegeValue","str","","str",$priv, _ 
"ptr",DLLStructGetPtr($LUID)) 
If $ret[0] Then 
If $bEnable Then 
DLLStructSetData($TOKEN_PRIVILEGES,2,$MY _SE_PRIVILEGE_ENABLED,(3 * $nTokenIndex)) 
Else 
DLLStructSetData($TOKEN_PRIVILEGES,2,0,( 3 * $nTokenIndex)) 
EndIf 
DLLStructSetData($TOKEN_PRIVILEGES,2,Dll StructGetData($LUID,1),(3 * ($nTokenIndex-1)) + 1) 
DLLStructSetData($TOKEN_PRIVILEGES,2,Dll StructGetData($LUID,2),(3 * ($nTokenIndex-1)) + 2) 
DLLStructSetData($LUID,1,0) 
DLLStructSetData($LUID,2,0) 
EndIf 
$nTokenIndex += 1 
WEnd 
$ret = DLLCall("advapi32.dll","int","AdjustToke nPrivileges","hwnd",$hToken,"int",0, _ 
"ptr",DllStructGetPtr($TOKEN_PRIVILEGES) ,"int",DllStructGetSize($NEWTOKEN_PRIVIL EGES), _ 
"ptr",DllStructGetPtr($NEWTOKEN_PRIVILEG ES),"int*",0) 
$f = DLLCall("kernel32.dll","int","GetLastErr or") 
EndIf 
$NEWTOKEN_PRIVILEGES=0 
$TOKEN_PRIVILEGES=0 
$LUID=0 
If $SP_auxret[0] = 0 Then Return 0 
$SP_auxret = DLLCall("kernel32.dll","int","CloseHandl e","hwnd",$hToken) 
If Not $ret[0] And Not $SP_auxret[0] Then Return 0 
return $ret[0] 
EndFunc
5. Save it as *.au3 file type
6. Press F5 to run the script

Now the demo should be limit-free.

Anyone to try this?

This code is pretty broken as-is, something with the copy/paste job put a bunch of random spaces in a lot of the function calls. It took me a few minutes to figure out all the errors and get it fixed.

However, once I got the spaces all fixed, it worked as-expected. :)

Even without this patch, this game completely rocks balls! A definite purchase for me; I will be ordering it tonight with the steam sale they have going. Great job to the entire team, and of course to you too Humus!
 
So, just a curiosity about a crash I've experienced...

If I finish the task at...

the radar station down there in the southwest corner of the map, where you have to enter the four-digit code,

the game abends to the desktop. If this was truly the end, I'd assume you would show the same advertisement thing like you do when the demo timer runs out. But it just drops me out, any thoughts? Anyone else experience that? There's also another place kinda in the center of the map with a huge fuel depot that has a similar opportunity, but it CTD's the same way.

I'm not overly worried about it, I've now purchased the game so I'm ready for the end of March :D Just more curious if anyone else has seen it...

Q9450 at 3.6Ghz, VisionTek 5850 at 775/1125, 4GB of ram on Vista64 Ultimate SP2. NO other complaints at all, this is a blast to play! I've mastered the rocketing barrel trick in the GIF above, and that's been a blast :D There's so much fun and cool shit to do in this game!
 
I've heard that the trainer timer stopper causes it to crash to the desktop on the GPS mission, maybe the same thing...are you using the trainer?
 
I've heard that the trainer timer stopper causes it to crash to the desktop on the GPS mission, maybe the same thing...are you using the trainer?

No trainer, but I was using that little autoit snippet of code. Which is why I wasn't complaining, I figured it might be something related. I just decided not to finish it and instead to enjoy doing all the other zillion things that are equally fun :D
 
Yeah, the trainer and that code snippet whatever thingy have fatal flaws. The CheatEngine method works perfectly, besides it's more fun!

My son is having a blast playing with CheatEngine now with all his games, I'm sooo proud! (Offline, single-player only...the kid ain't an arsehole. :cool: )
 
Standing in the little base where the demo starts. All settings maxed 1440x900 2xMSAA.
GTX260 + E6750 at 3.2 GHz

38 FPS
With Bokeh filter: 38 FPS
With GPU water: 25 FPS
With GPU water and Bokeh filter: 25 FPS

And there is no water anywhere to be seen...........

Edit: OMFG this game is awesome :yes:
 
Last edited by a moderator:
Standing in the little base where the demo starts. All settings maxed 1440x900 2xMSAA.
GTX260 + E6750 at 3.2 GHz

38 FPS
With Bokeh filter: 38 FPS
With GPU water: 25 FPS
With GPU water and Bokeh filter: 25 FPS

And there is no water anywhere to be seen...........

Edit: OMFG this game is awesome :yes:

Maybe its so accurate, its modelling the humidity in the air! :D
 
If you have it though, I will always recommend keeping an XP partition for those "just in case" games.

I must note though, "required: 8800 Series Geforce or Ati Radeon 2600 Pro". Is that 8800 a typo that is supposed to be 8600? We all know an 8800 series GPU is pretty much 3-4 times as powerful as the Radeon 2600.

Yeah, sadly XP mode in Win7 Ultimate/Proffesional dosn't support 3D...had a weird feeling install XP mode...and then updating old XP...in Win7.
 
OpenCL isn't ready for primetime and CS obviously has a tiny installed base compared to CUDA. Also, Nvidia's behind it so why wouldn't they use CUDA? :)

Is OpenCL and DirectCompute limited on DX10 and DX10.1 cards anyways?
As in if you want CUDA like option you need to have DX11 hardware for OpenCL and DirectCompute to match CUDA?
 
Back
Top