Guest User

bulkovsky

a guest
Dec 25th, 2014
176
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 63.65 KB | None | 0 0
  1. [ParseCmdLine] command-line args: "C:\Program Files (x86)\Spring\spring.exe "C:\Users\pc\AppData\Roaming\springlobby\script.txt""
  2. Using configuration source: "C:\Users\pc\Documents\My Games\Spring\springsettings.cfg"
  3. Using additional configuration source: "C:\Users\pc\Documents\Spring\springsettings.cfg"
  4. Available log sections: KeyBindings, AutohostInterface, GameServer, Net, CSMFGroundTextures, RoamMeshDrawer, BumpWater, DynWater, SkyBox, DecalsDrawerGL4, FarTextureHandler, Model, Piece, ModelDrawer, OBJParser, WorldObjectModelRenderer, Shader, Texture, Font, CregSerializer, ArchiveScanner, VFS, Sound, LuaSocket, GroundMoveType, Path, UnitScript
  5. Enabled log sections: Sound(Notice)
  6. Enable or disable log sections using the LogSections configuration key
  7. or the SPRING_LOG_SECTIONS environment variable (both comma separated).
  8. Use "none" to disable the default log sections.
  9. LogOutput initialized.
  10. Spring 98.0
  11. Build Date & Time: Oct 7 2014 21:51:24
  12. Build Environment: boost-105500, GNU libstdc++ version 20130531
  13. Compiler Version: gcc-4.8.1
  14. Operating System: Microsoft Windows
  15. Microsoft Windows 7 Business Edition, 64-bit (build 7600)
  16. Intel(R) Core(TM) i5 CPU M 480 @ 2.67GHz; 3950MB RAM, 7898MB pagefile
  17. Word Size: 32-bit (emulated)
  18. CPU Clock: win32::TimeGetTime
  19. Physical CPU Cores: 2
  20. Logical CPU Cores: 4
  21. [CMyMath::Init] CPU SSE mask: 127, flags:
  22. SSE 1.0: 1, SSE 2.0: 1
  23. SSE 3.0: 1, SSSE 3.0: 1
  24. SSE 4.1: 1, SSE 4.2: 1
  25. SSE 4.0A: 0, SSE 5.0A: 0
  26. using streflop SSE FP-math mode, CPU supports SSE instructions
  27. Supported Video modes on Display 1 x:0 y:0 1920x1080:
  28. 640x480, 800x600, 1024x768, 1280x720, 1280x768, 1280x1024, 1600x900, 1680x1050, 1920x1080
  29. SDL version: linked 2.0.2; compiled 2.0.2
  30. GL version: 3.2.9756 Compatibility Profile Context
  31. GL vendor: ATI Technologies Inc.
  32. GL renderer: ATI Mobility Radeon HD 5650
  33. GLSL version: 1.50
  34. GLEW version: 1.5.8
  35. Video RAM: total 740MB, available 964MB
  36. SwapInterval: 0
  37. GL info:
  38. haveARB: 1, haveGLSL: 1, ATI hacks: 1
  39. FBO support: 1, NPOT-texture support: 1, 24bit Z-buffer support: 0
  40. maximum texture size: 16384, compress MIP-map textures: 1
  41. maximum SmoothPointSize: 63, maximum vec4 varying/attributes: 16/16
  42. maximum drawbuffers: 8, maximum recommended indices/vertices: 16777215/2147483647
  43. number of UniformBufferBindings: 75 (64kB)
  44. VSync disabled
  45. [InitOpenGL] video mode set to 1920x1080:24bit @60Hz (windowed)
  46. [WatchDog::Install] disabled
  47. [ThreadPool::SetThreadCount][1] #wanted=2 #current=1 #max=2
  48. [ThreadPool::SetThreadCount][2] #threads=1
  49. Using read-write data directory: C:\Users\pc\Documents\My Games\Spring\
  50. Using read-only data directory: C:\Users\pc\Documents\Spring\
  51. Using read-only data directory: C:\Program Files (x86)\Spring\
  52. Scanning: C:\Program Files (x86)\Spring\maps
  53. Scanning: C:\Program Files (x86)\Spring\base
  54. Scanning: C:\Program Files (x86)\Spring\games
  55. Scanning: C:\Users\pc\Documents\My Games\Spring\maps
  56. Scanning: C:\Users\pc\Documents\My Games\Spring\games
  57. Scanning: C:\Users\pc\Documents\My Games\Spring\packages
  58. [f=0000000] Joysticks found: 0
  59. [f=0000000] [ThreadPool::SetThreadCount][1] #wanted=2 #current=2 #max=2
  60. [f=0000000] [ThreadPool::SetThreadCount][2] #threads=1
  61. [f=0000000] [Threading] Main thread CPU affinity mask set: 14
  62. [f=0000000] [Startup] Loading StartScript from: C:\Users\pc\AppData\Roaming\springlobby\script.txt
  63. [f=0000000] Connecting to: 92.222.18.22:8451
  64. [f=0000000] Connecting to 92.222.18.22:8451 using name Bulkovsky
  65. [f=0000000] [Sound] OpenAL info:
  66. [f=0000000] [Sound] Available Devices:
  67. [f=0000000] [Sound] Głośniki (Urządzenie zgodne ze standardem High Definition Audio)
  68. [f=0000000] [Sound] Device: OpenAL Soft
  69. [f=0000000] [Sound] Vendor: OpenAL Community
  70. [f=0000000] [Sound] Version: 1.1 ALSOFT 1.15.1
  71. [f=0000000] [Sound] Renderer: OpenAL Soft
  72. [f=0000000] [Sound] AL Extensions: AL_EXT_ALAW AL_EXT_DOUBLE AL_EXT_EXPONENT_DISTANCE AL_EXT_FLOAT32 AL_EXT_IMA4 AL_EXT_LINEAR_DISTANCE AL_EXT_MCFORMATS AL_EXT_MULAW AL_EXT_MULAW_MCFORMATS AL_EXT_OFFSET AL_EXT_source_distance_model AL_LOKI_quadriphonic AL_SOFT_buffer_samples AL_SOFT_buffer_sub_data AL_SOFTX_deferred_updates AL_SOFT_direct_channels AL_SOFT_loop_points AL_SOFT_source_latency
  73. [f=0000000] [Sound] ALC Extensions: ALC_ENUMERATE_ALL_EXT ALC_ENUMERATION_EXT ALC_EXT_CAPTURE ALC_EXT_DEDICATED ALC_EXT_disconnect ALC_EXT_EFX ALC_EXT_thread_local_context ALC_SOFT_loopback
  74. [f=0000000] [Sound] EFX Enabled: yes
  75. [f=0000000] [Sound] Max Sounds: 32
  76. [f=0000000] [InitOpenGL] video mode set to 1920x1080:24bit @60Hz (windowed)
  77. [f=0000000] Using map: DeltaSiegeDry
  78. [f=0000000] Using game: Balanced Annihilation V8.06
  79. [f=0000000] Using game archive: 9b310220b3f30e158ccce7ce3f94dbdc.sdp
  80. [f=0000000] Recording demo to: C:\Users\pc\Documents\My Games\Spring\demos\20141225_190750_DeltaSiegeDry_98.sdf
  81. [f=0000000] PreGame::GameDataReceived: 99 ms
  82. [f=0000000] [PreGame::UpdateClientNet] user number 24 (team 0, allyteam 0)
  83. [f=0000000] [LuaIntro] Searching for new Widgets
  84. [f=0000000] [LuaIntro] Scanning: LuaIntro/Addons/
  85. [f=0000000] [LuaIntro] Scanning: LuaIntro/Widgets/
  86. [f=0000000] [LuaIntro] Scanning: LuaIntro/SystemAddons/
  87. [f=0000000] [LuaIntro] Scanning: LuaIntro/SystemWidgets/
  88. [f=0000000] [LuaIntro] Scanning: LuaIntro/chili/
  89. [f=0000000] [LuaIntro] Found new widget "SpringLogo"
  90. [f=0000000] [LuaIntro] Found new widget "LoadTexture"
  91. [f=0000000] [LuaIntro] Found new widget "LoadProgress"
  92. [f=0000000] [LuaIntro] Found new widget "Main"
  93. [f=0000000] [LuaIntro] Found new widget "Music"
  94. [f=0000000] [LuaIntro] Loading widgets <>=vfs **=raw ()=unknown
  95. [f=0000000] [LuaIntro] Loading widget: Engine Taskbar Stuff <engine_taskbar_control.lua>
  96. [f=0000000] [LuaIntro] Loading widget: LoadProgress <loadprogress.lua>
  97. [f=0000000] [LuaIntro] Loading widget: Main <main.lua>
  98. [f=0000000] [LuaIntro] Loading widget: Music <music.lua>
  99. [f=0000000] [LuaIntro] Loading widget: LoadTexture <bg_texture.lua>
  100. [f=0000000] [LuaIntro] LuaIntro v1.0 (Lua 5.1)
  101. [f=0000000] Parsing Map Information
  102. [f=0000000] Loading SMF
  103. [f=0000000] Loading Map (80 MB)
  104. [f=0000000] Loading Radar Icons
  105. [f=0000000] Loading GameData Definitions
  106. [f=0000000] Loading all definitions: 1.398000
  107. [f=0000000] Game::LoadDefs (GameData): 1591 ms
  108. [f=0000000] Loading Sound Definitions
  109. [f=0000000] [Sound] parsed 28 sounds from gamedata/sounds.lua
  110. [f=0000000] Game::LoadDefs (Sound): 10 ms
  111. [f=0000000] Creating Smooth Height Mesh
  112. [f=0000000] SmoothHeightMesh::MakeSmoothMesh: 257 ms
  113. [f=0000000] Creating QuadField & CEGs
  114. [f=0000000] [CDamageArrayHandler] number of ArmorDefs: 11
  115. [f=0000000] [RegisterAssimpModelFormats] supported Assimp model formats: *.3ds;*.blend;*.dae;*.lwo;
  116. [f=0000000] Creating Unit Textures
  117. [f=0000000] Creating Sky
  118. [f=0000000] Loading Weapon Definitions
  119. [f=0000000] Loading Unit Definitions
  120. [f=0000000] Loading Feature Definitions
  121. [f=0000000] [IPathManager::GetInstance] using DEFAULT path-manager
  122. [f=0000000] Initializing Map Features
  123. [f=0000000] Error: [LoadFeaturesFromMap] unknown map feature type ""
  124. [f=0000000] Creating ShadowHandler & DecalHandler
  125. [f=0000000] FBO::maxSamples: 8
  126. [f=0000000] Creating GroundDrawer
  127. [f=0000000] Loading Map Tiles
  128. [f=0000000] Loading Square Textures
  129. [f=0000000] CSMFGroundTextures::ConvolveHeightMap: 13 ms
  130. [f=0000000] Switching to ROAM Mesh Rendering
  131. [f=0000000] [Shader] Warning: [GLSL-SO::Compile] shader-object name: GLSL/SMFFragProg.glsl, compile-log:
  132. Fragment shader failed to compile with the following errors:
  133. ERROR: 6:205: error(#71) Syntax error incorrect preprocessor directive
  134. WARNING: 6:205: warning(#64) Unexpected tokens following the preprocessor directive - expected a newline(#if )
  135. ERROR: 6:206: error(#143) Undeclared identifier MAX_DYNAMIC_MAP_LIGHTS
  136. ERROR: 6:207: error(#143) Undeclared identifier BASE_DYNAMIC_MAP_LIGHT
  137. ERROR: 6:207: error(#166) Integer expression required []
  138. ERROR: 6:208: error(#166) Integer expression required []
  139. ERROR: 6:210: error(#166) Integer expression required []
  140. ERROR: 6:226: error(#166) Integer expression required []
  141. ERROR: 6:227: error(#166) Integer expression required []
  142. ERROR: 6:236: error(#166) Integer expression required []
  143. ERROR: 6:237: error(#166) Integer expression required []
  144. ERROR: 6:238: error(#166) Integer expression required []
  145. ERROR: 6:378: error(#71) Syntax error incorrect preprocessor directive
  146. WARNING: 6:378: warning(#64) Unexpected tokens following the preprocessor directive - expected a newline(#if )
  147. ERROR: error(#273) 12 compilation errors. No code generated
  148.  
  149.  
  150. [f=0000000] [Shader] Warning:
  151. // SHADER VERSION
  152. #version 120
  153. // SHADER FLAGS
  154. #define SMF_TEXSQUARE_SIZE 1024.000000
  155. #define SMF_INTENSITY_MULT 0.823529
  156.  
  157. // SHADER SOURCE
  158. #line 1
  159.  
  160. #ifdef NOSPRING
  161. #define SMF_INTENSITY_MULT (210.0 / 255.0)
  162. #define SMF_TEXSQUARE_SIZE 1024.0
  163. #define MAX_DYNAMIC_MAP_LIGHTS 4
  164. #define BASE_DYNAMIC_MAP_LIGHT 0
  165. #define GBUFFER_NORMTEX_IDX 0
  166. #define GBUFFER_DIFFTEX_IDX 1
  167. #define GBUFFER_SPECTEX_IDX 2
  168. #define GBUFFER_EMITTEX_IDX 3
  169. #define GBUFFER_MISCTEX_IDX 4
  170. #endif
  171.  
  172.  
  173. /***********************************************************************/
  174. // Consts
  175.  
  176. const float SMF_SHALLOW_WATER_DEPTH = 10.0;
  177. const float SMF_SHALLOW_WATER_DEPTH_INV = 1.0 / SMF_SHALLOW_WATER_DEPTH;
  178. const float SMF_DETAILTEX_RES = 0.02;
  179.  
  180.  
  181. /***********************************************************************/
  182. // Uniforms + Varyings
  183.  
  184. uniform sampler2D diffuseTex;
  185. uniform sampler2D normalsTex;
  186. uniform sampler2D detailTex;
  187. uniform vec2 normalTexGen; // either 1.0/mapSize (when NPOT are supported) or 1.0/mapSizePO2
  188. uniform vec2 specularTexGen; // 1.0/mapSize
  189.  
  190. uniform vec3 groundAmbientColor;
  191. uniform vec3 groundDiffuseColor;
  192. uniform vec3 groundSpecularColor;
  193. uniform float groundShadowDensity;
  194.  
  195. uniform vec2 mapHeights; // min & max height on the map
  196.  
  197. uniform vec4 lightDir;
  198. uniform vec3 cameraPos;
  199.  
  200. varying vec3 halfDir;
  201. varying float fogFactor;
  202. varying vec4 vertexWorldPos;
  203. varying vec2 diffuseTexCoords;
  204.  
  205. #ifdef HAVE_INFOTEX
  206. uniform sampler2D infoTex;
  207. uniform float infoTexIntensityMul;
  208. uniform vec2 infoTexGen; // 1.0/(pwr2map{x,z} * SQUARE_SIZE)
  209. #endif
  210.  
  211. #ifndef SMF_ARB_LIGHTING
  212. uniform sampler2D specularTex;
  213. #endif
  214.  
  215. #ifdef HAVE_SHADOWS
  216. uniform sampler2DShadow shadowTex;
  217. uniform mat4 shadowMat;
  218. uniform vec4 shadowParams;
  219. #endif
  220.  
  221. #ifdef SMF_WATER_ABSORPTION
  222. uniform vec3 waterMinColor;
  223. uniform vec3 waterBaseColor;
  224. uniform vec3 waterAbsorbColor;
  225. #endif
  226.  
  227. #ifdef SMF_DETAIL_TEXTURE_SPLATTING
  228. uniform sampler2D splatDetailTex;
  229. uniform sampler2D splatDistrTex;
  230. uniform vec4 splatTexMults; // per-channel splat intensity multipliers
  231. uniform vec4 splatTexScales; // defaults to SMF_DETAILTEX_RES per channel
  232. #endif
  233.  
  234. #ifdef SMF_SKY_REFLECTIONS
  235. uniform samplerCube skyReflectTex;
  236. uniform sampler2D skyReflectModTex;
  237. #endif
  238.  
  239. #ifdef SMF_DETAIL_NORMALS
  240. uniform sampler2D detailNormalTex;
  241. #endif
  242.  
  243. #ifdef SMF_LIGHT_EMISSION
  244. uniform sampler2D lightEmissionTex;
  245. #endif
  246.  
  247. #ifdef SMF_PARALLAX_MAPPING
  248. uniform sampler2D parallaxHeightTex;
  249. #endif
  250.  
  251.  
  252. /***********************************************************************/
  253. // Helper functions
  254.  
  255. #ifdef SMF_PARALLAX_MAPPING
  256. vec2 GetParallaxUVOffset(vec2 uv, vec3 dir) {
  257. vec4 texel = texture2D(parallaxHeightTex, uv);
  258.  
  259. // RG: height in [ 0.0, 1.0] (256^2 strata)
  260. // B: scale in [ 0.0, 1.0] (256 strata), eg. 0.04 (~10.0/256.0)
  261. // A: bias in [-0.5, 0.5] (256 strata), eg. -0.02 (~75.0/256.0)
  262. //
  263. const float RMUL = 255.0 * 256.0;
  264. const float GMUL = 256.0;
  265. const float HDIV = 65536.0;
  266.  
  267. float heightValue = dot(texel.rg, vec2(RMUL, GMUL)) / HDIV;
  268. float heightScale = texel.b;
  269. float heightBias = texel.a - 0.5;
  270. float heightOffset = heightValue * heightScale + heightBias;
  271.  
  272. return ((dir.xy / dir.z) * heightOffset);
  273. }
  274. #endif
  275.  
  276. vec3 GetFragmentNormal(vec2 uv) {
  277. vec3 normal;
  278. #ifdef SSMF_UNCOMPRESSED_NORMALS
  279. normal = normalize(texture2D(normalsTex, uv).xyz);
  280. #else
  281. normal.xz = texture2D(normalsTex, uv).ra;
  282. normal.y = sqrt(1.0 - dot(normal.xz, normal.xz));
  283. #endif
  284. return normal;
  285. }
  286.  
  287. vec4 GetDetailTextureColor(vec2 uv) {
  288. #ifndef SMF_DETAIL_TEXTURE_SPLATTING
  289. vec2 detailTexCoord = vertexWorldPos.xz * vec2(SMF_DETAILTEX_RES);
  290. vec4 detailCol = (texture2D(detailTex, detailTexCoord) * 2.0) - 1.0;
  291. #else
  292. vec4 splatTexCoord0 = vertexWorldPos.xzxz * splatTexScales.rrgg;
  293. vec4 splatTexCoord1 = vertexWorldPos.xzxz * splatTexScales.bbaa;
  294. vec4 splatDetails;
  295. splatDetails.r = texture2D(splatDetailTex, splatTexCoord0.st).r;
  296. splatDetails.g = texture2D(splatDetailTex, splatTexCoord0.pq).g;
  297. splatDetails.b = texture2D(splatDetailTex, splatTexCoord1.st).b;
  298. splatDetails.a = texture2D(splatDetailTex, splatTexCoord1.pq).a;
  299. splatDetails = (splatDetails * 2.0) - 1.0;
  300.  
  301. vec4 splatCofac = texture2D(splatDistrTex, uv) * splatTexMults;
  302. vec4 detailCol = vec4(dot(splatDetails, splatCofac));
  303. #endif
  304.  
  305. return detailCol;
  306. }
  307.  
  308. vec4 GetShadeInt(float groundLightInt, float groundShadowCoeff, float groundDiffuseAlpha) {
  309. vec4 groundShadeInt = vec4(0.0, 0.0, 0.0, 1.0);
  310.  
  311. groundShadeInt.rgb = groundAmbientColor + groundDiffuseColor * (groundLightInt * groundShadowCoeff);
  312. groundShadeInt.rgb *= vec3(SMF_INTENSITY_MULT);
  313.  
  314. #ifdef SMF_VOID_WATER
  315. // cut out all underwater fragments indiscriminately
  316. groundShadeInt.a = float(vertexWorldPos.y >= 0.0);
  317. #endif
  318.  
  319. #ifdef SMF_VOID_GROUND
  320. // assume the map(per)'s diffuse texture provides sensible alphas
  321. // note that voidground overrides voidwater if *both* are enabled
  322. // (limiting it to just above-water fragments would be arbitrary)
  323. groundShadeInt.a = groundDiffuseAlpha;
  324. #endif
  325.  
  326. #ifdef SMF_WATER_ABSORPTION
  327. // use alpha of groundShadeInt cause:
  328. // allow voidground maps to create holes in the seabed
  329. // (SMF_WATER_ABSORPTION == 1 implies voidwater is not
  330. // enabled but says nothing about the voidground state)
  331. vec4 waterShadeInt = vec4(waterBaseColor.rgb, groundShadeInt.a);
  332. if (mapHeights.x <= 0.0) {
  333. float waterShadeAlpha = abs(vertexWorldPos.y) * SMF_SHALLOW_WATER_DEPTH_INV;
  334. float waterShadeDecay = 0.2 + (waterShadeAlpha * 0.1);
  335. float vertexStepHeight = min(1023.0, -vertexWorldPos.y);
  336. float waterLightInt = min(groundLightInt * 2.0 + 0.4, 1.0);
  337.  
  338. // vertex below shallow water depth --> alpha=1
  339. // vertex above shallow water depth --> alpha=waterShadeAlpha
  340. waterShadeAlpha = min(1.0, waterShadeAlpha + float(vertexWorldPos.y <= -SMF_SHALLOW_WATER_DEPTH));
  341.  
  342. waterShadeInt.rgb -= (waterAbsorbColor.rgb * vertexStepHeight);
  343. waterShadeInt.rgb = max(waterMinColor.rgb, waterShadeInt.rgb);
  344. waterShadeInt.rgb *= vec3(SMF_INTENSITY_MULT * waterLightInt);
  345.  
  346. // make shadowed areas darker over deeper water
  347. waterShadeInt.rgb *= (1.0 - waterShadeDecay * (1.0 - groundShadowCoeff));
  348.  
  349. // if depth is greater than _SHALLOW_ depth, select waterShadeInt
  350. // otherwise interpolate between groundShadeInt and waterShadeInt
  351. // (both are already cosine-weighted)
  352. waterShadeInt.rgb = mix(groundShadeInt.rgb, waterShadeInt.rgb, waterShadeAlpha);
  353. }
  354. return mix(groundShadeInt, waterShadeInt, float(vertexWorldPos.y < 0.0));
  355. #else
  356. return groundShadeInt;
  357. #endif
  358. }
  359.  
  360.  
  361. vec3 DynamicLighting(vec3 normal, vec3 diffuseCol, vec3 specularCol, float specularExp) {
  362. vec3 light = vec3(0.0);
  363. #if !defined(DEFERRED_MODE) && (MAX_DYNAMIC_MAP_LIGHTS > 0)
  364. for (int i = 0; i < MAX_DYNAMIC_MAP_LIGHTS; i++) {
  365. vec3 lightVec = gl_LightSource[BASE_DYNAMIC_MAP_LIGHT + i].position.xyz - vertexWorldPos.xyz;
  366. vec3 halfVec = gl_LightSource[BASE_DYNAMIC_MAP_LIGHT + i].halfVector.xyz;
  367.  
  368. float lightRadius = gl_LightSource[BASE_DYNAMIC_MAP_LIGHT + i].constantAttenuation;
  369. float lightDistance = length(lightVec);
  370. float lightScale = float(lightDistance <= lightRadius);
  371. float lightCosAngDiff = clamp(dot(normal, lightVec / lightDistance), 0.0, 1.0);
  372. float lightCosAngSpec = clamp(dot(normal, normalize(halfVec)), 0.0, 1.0);
  373. #ifdef OGL_SPEC_ATTENUATION
  374. float lightAttenuation =
  375. (gl_LightSource[BASE_DYNAMIC_MAP_LIGHT + i].constantAttenuation) +
  376. (gl_LightSource[BASE_DYNAMIC_MAP_LIGHT + i].linearAttenuation * lightDistance) +
  377. (gl_LightSource[BASE_DYNAMIC_MAP_LIGHT + i].quadraticAttenuation * lightDistance * lightDistance);
  378.  
  379. lightAttenuation = 1.0 / max(lightAttenuation, 1.0);
  380. #else
  381. float lightAttenuation = 1.0 - min(1.0, ((lightDistance * lightDistance) / (lightRadius * lightRadius)));
  382. #endif
  383.  
  384. float vectorDot = -dot((lightVec / lightDistance), gl_LightSource[BASE_DYNAMIC_MAP_LIGHT + i].spotDirection);
  385. float cutoffDot = gl_LightSource[BASE_DYNAMIC_MAP_LIGHT + i].spotCosCutoff;
  386.  
  387. float lightSpecularPow = 0.0;
  388. #ifndef SMF_ARB_LIGHTING
  389. lightSpecularPow = max(0.0, pow(lightCosAngSpec, specularExp));
  390. #endif
  391.  
  392. lightScale *= float(vectorDot >= cutoffDot);
  393.  
  394. light += (lightScale * gl_LightSource[BASE_DYNAMIC_MAP_LIGHT + i].ambient.rgb);
  395. light += (lightScale * lightAttenuation * (diffuseCol.rgb * gl_LightSource[BASE_DYNAMIC_MAP_LIGHT + i].diffuse.rgb * lightCosAngDiff));
  396. light += (lightScale * lightAttenuation * (specularCol.rgb * gl_LightSource[BASE_DYNAMIC_MAP_LIGHT + i].specular.rgb * lightSpecularPow));
  397. }
  398. #endif
  399. return light;
  400. }
  401.  
  402. /***********************************************************************/
  403. // main()
  404.  
  405. void main() {
  406. vec2 diffTexCoords = diffuseTexCoords;
  407. vec2 specTexCoords = vertexWorldPos.xz * specularTexGen;
  408. vec2 normTexCoords = vertexWorldPos.xz * normalTexGen;
  409.  
  410. // not calculated in the vertex shader to save varying components (OpenGL2.0 allows just 32)
  411. vec3 cameraDir = vertexWorldPos.xyz - cameraPos;
  412. vec3 normal = GetFragmentNormal(normTexCoords);
  413.  
  414. #if defined(SMF_DETAIL_NORMALS) || defined(SMF_PARALLAX_MAPPING)
  415. // detail-normals are (assumed to be) defined within STN space
  416. // (for a regular vertex normal equal to <0, 1, 0>, the S- and
  417. // T-tangents are aligned with Spring's +x and +z (!) axes)
  418. vec3 tTangent = normalize(cross(normal, vec3(-1.0, 0.0, 0.0)));
  419. vec3 sTangent = cross(normal, tTangent);
  420. mat3 stnMatrix = mat3(sTangent, tTangent, normal);
  421. #endif
  422.  
  423.  
  424. #ifdef SMF_PARALLAX_MAPPING
  425. {
  426. // use specular-texture coordinates to index parallaxHeightTex
  427. // (ie. specularTex and parallaxHeightTex must have equal size)
  428. // cameraDir does not need to be normalized, x/z and y/z ratios
  429. // do not change
  430. vec2 uvOffset = GetParallaxUVOffset(specTexCoords, transpose(stnMatrix) * cameraDir);
  431.  
  432. // scale the parallax offset since it is in spectex-space
  433. diffTexCoords += (uvOffset / (SMF_TEXSQUARE_SIZE * specularTexGen));
  434. normTexCoords += (uvOffset * (normalTexGen / specularTexGen));
  435. specTexCoords += (uvOffset);
  436.  
  437. normal = GetFragmentNormal(normTexCoords);
  438. }
  439. #endif
  440.  
  441. #ifdef SMF_DETAIL_NORMALS
  442. {
  443. vec4 dtSample = texture2D(detailNormalTex, normTexCoords);
  444. vec3 dtNormal = (dtSample.xyz * 2.0) - 1.0;
  445.  
  446. // convert dtNormal from TS to WS before mixing
  447. normal = normalize(mix(normal, stnMatrix * dtNormal, dtSample.a));
  448. }
  449. #endif
  450.  
  451. #ifndef DEFERRED_MODE
  452. float cosAngleDiffuse = clamp(dot(lightDir.xyz, normal), 0.0, 1.0);
  453. float cosAngleSpecular = clamp(dot(normalize(halfDir), normal), 0.0, 1.0);
  454. #endif
  455.  
  456. vec4 diffuseCol = texture2D(diffuseTex, diffTexCoords);
  457. vec4 detailCol = GetDetailTextureColor(specTexCoords);
  458. // non-zero default specularity on non-SSMF maps (for DL)
  459. vec4 specularCol = vec4(0.5, 0.5, 0.5, 1.0);
  460. vec4 emissionCol = vec4(0.0, 0.0, 0.0, 0.0);
  461.  
  462. #if !defined(DEFERRED_MODE) && defined(SMF_SKY_REFLECTIONS)
  463. {
  464. // cameraDir does not need to be normalized for reflect()
  465. vec3 reflectDir = reflect(cameraDir, normal);
  466. vec3 reflectCol = textureCube(skyReflectTex, gl_NormalMatrix * reflectDir).rgb;
  467. vec3 reflectMod = texture2D(skyReflectModTex, specTexCoords).rgb;
  468.  
  469. diffuseCol.rgb = mix(diffuseCol.rgb, reflectCol, reflectMod);
  470. }
  471. #endif
  472. #if !defined(DEFERRED_MODE) && defined(HAVE_INFOTEX)
  473. {
  474. // increase contrast and brightness for the overlays
  475. // TODO: make the multiplier configurable by users?
  476. vec2 infoTexCoords = vertexWorldPos.xz * infoTexGen;
  477. diffuseCol.rgb += (texture2D(infoTex, infoTexCoords).rgb * infoTexIntensityMul);
  478. diffuseCol.rgb -= (vec3(0.5, 0.5, 0.5) * float(infoTexIntensityMul == 1.0));
  479. }
  480. #endif
  481.  
  482.  
  483.  
  484. float shadowCoeff = 1.0;
  485.  
  486. #if !defined(DEFERRED_MODE) && defined(HAVE_SHADOWS)
  487. {
  488. vec2 p17 = shadowParams.zz;
  489. vec2 p18 = shadowParams.ww;
  490.  
  491. vec4 vertexShadowPos = shadowMat * vertexWorldPos;
  492. vertexShadowPos.st *= (inversesqrt(abs(vertexShadowPos.st) + p17) + p18);
  493. vertexShadowPos.st += shadowParams.xy;
  494.  
  495. // same as ARB shader: shadowCoeff = 1 - (1 - shadowCoeff) * groundShadowDensity
  496. shadowCoeff = shadow2DProj(shadowTex, vertexShadowPos).r;
  497. shadowCoeff = mix(1.0, shadowCoeff, groundShadowDensity);
  498. }
  499. #endif
  500.  
  501. #ifndef DEFERRED_MODE
  502. {
  503. // GroundMaterialAmbientDiffuseColor * LightAmbientDiffuseColor
  504. vec4 shadeInt = GetShadeInt(cosAngleDiffuse, shadowCoeff, diffuseCol.a);
  505.  
  506. gl_FragColor.rgb = (diffuseCol.rgb + detailCol.rgb) * shadeInt.rgb;
  507. gl_FragColor.a = shadeInt.a;
  508. }
  509. #endif
  510.  
  511. #ifdef SMF_LIGHT_EMISSION
  512. {
  513. // apply self-illumination aka. glow, not masked by shadows
  514. emissionCol = texture2D(lightEmissionTex, specTexCoords);
  515.  
  516. #ifndef DEFERRED_MODE
  517. gl_FragColor.rgb = gl_FragColor.rgb * (1.0 - emissionCol.a) + emissionCol.rgb;
  518. #endif
  519. }
  520. #endif
  521.  
  522. #ifndef SMF_ARB_LIGHTING
  523. specularCol = texture2D(specularTex, specTexCoords);
  524.  
  525. #ifndef DEFERRED_MODE
  526. // sun specular lighting contribution
  527. float specularExp = specularCol.a * 16.0;
  528. float specularPow = pow(cosAngleSpecular, specularExp);
  529.  
  530. vec3 specularInt = specularCol.rgb * specularPow;
  531. specularInt *= shadowCoeff;
  532.  
  533. // no need to multiply by groundSpecularColor anymore
  534. gl_FragColor.rgb += specularInt;
  535.  
  536. #if (MAX_DYNAMIC_MAP_LIGHTS > 0)
  537. gl_FragColor.rgb += DynamicLighting(normal, diffuseCol.rgb, specularCol.rgb, specularExp);
  538. #endif
  539. #endif
  540. #endif
  541.  
  542. #ifdef DEFERRED_MODE
  543. gl_FragData[GBUFFER_NORMTEX_IDX] = vec4((normal + vec3(1.0, 1.0, 1.0)) * 0.5, 1.0);
  544. gl_FragData[GBUFFER_DIFFTEX_IDX] = diffuseCol + detailCol;
  545. gl_FragData[GBUFFER_SPECTEX_IDX] = specularCol;
  546. gl_FragData[GBUFFER_EMITTEX_IDX] = emissionCol;
  547. gl_FragData[GBUFFER_MISCTEX_IDX] = vec4(0.0);
  548.  
  549. // linearly transform the eye-space depths, might be more useful?
  550. // gl_FragDepth = gl_FragCoord.z / gl_FragCoord.w;
  551. #else
  552. gl_FragColor.rgb = mix(gl_Fog.color.rgb, gl_FragColor.rgb, fogFactor);
  553. #endif
  554. }
  555.  
  556.  
  557. [f=0000000] [Shader] Warning: [GLSL-SO::Compile] shader-object name: GLSL/SMFFragProg.glsl, compile-log:
  558. Fragment shader failed to compile with the following errors:
  559. ERROR: 6:205: error(#71) Syntax error incorrect preprocessor directive
  560. WARNING: 6:205: warning(#64) Unexpected tokens following the preprocessor directive - expected a newline(#if )
  561. ERROR: 6:206: error(#143) Undeclared identifier MAX_DYNAMIC_MAP_LIGHTS
  562. ERROR: 6:207: error(#143) Undeclared identifier BASE_DYNAMIC_MAP_LIGHT
  563. ERROR: 6:207: error(#166) Integer expression required []
  564. ERROR: 6:208: error(#166) Integer expression required []
  565. ERROR: 6:210: error(#166) Integer expression required []
  566. ERROR: 6:226: error(#166) Integer expression required []
  567. ERROR: 6:227: error(#166) Integer expression required []
  568. ERROR: 6:236: error(#166) Integer expression required []
  569. ERROR: 6:237: error(#166) Integer expression required []
  570. ERROR: 6:238: error(#166) Integer expression required []
  571. ERROR: 6:378: error(#71) Syntax error incorrect preprocessor directive
  572. WARNING: 6:378: warning(#64) Unexpected tokens following the preprocessor directive - expected a newline(#if )
  573. ERROR: error(#273) 12 compilation errors. No code generated
  574.  
  575.  
  576. [f=0000000] [Shader] Warning:
  577. // SHADER VERSION
  578. #version 120
  579. // SHADER FLAGS
  580. #define SMF_TEXSQUARE_SIZE 1024.000000
  581. #define SMF_INTENSITY_MULT 0.823529
  582.  
  583. // SHADER SOURCE
  584. #line 1
  585.  
  586. #ifdef NOSPRING
  587. #define SMF_INTENSITY_MULT (210.0 / 255.0)
  588. #define SMF_TEXSQUARE_SIZE 1024.0
  589. #define MAX_DYNAMIC_MAP_LIGHTS 4
  590. #define BASE_DYNAMIC_MAP_LIGHT 0
  591. #define GBUFFER_NORMTEX_IDX 0
  592. #define GBUFFER_DIFFTEX_IDX 1
  593. #define GBUFFER_SPECTEX_IDX 2
  594. #define GBUFFER_EMITTEX_IDX 3
  595. #define GBUFFER_MISCTEX_IDX 4
  596. #endif
  597.  
  598.  
  599. /***********************************************************************/
  600. // Consts
  601.  
  602. const float SMF_SHALLOW_WATER_DEPTH = 10.0;
  603. const float SMF_SHALLOW_WATER_DEPTH_INV = 1.0 / SMF_SHALLOW_WATER_DEPTH;
  604. const float SMF_DETAILTEX_RES = 0.02;
  605.  
  606.  
  607. /***********************************************************************/
  608. // Uniforms + Varyings
  609.  
  610. uniform sampler2D diffuseTex;
  611. uniform sampler2D normalsTex;
  612. uniform sampler2D detailTex;
  613. uniform vec2 normalTexGen; // either 1.0/mapSize (when NPOT are supported) or 1.0/mapSizePO2
  614. uniform vec2 specularTexGen; // 1.0/mapSize
  615.  
  616. uniform vec3 groundAmbientColor;
  617. uniform vec3 groundDiffuseColor;
  618. uniform vec3 groundSpecularColor;
  619. uniform float groundShadowDensity;
  620.  
  621. uniform vec2 mapHeights; // min & max height on the map
  622.  
  623. uniform vec4 lightDir;
  624. uniform vec3 cameraPos;
  625.  
  626. varying vec3 halfDir;
  627. varying float fogFactor;
  628. varying vec4 vertexWorldPos;
  629. varying vec2 diffuseTexCoords;
  630.  
  631. #ifdef HAVE_INFOTEX
  632. uniform sampler2D infoTex;
  633. uniform float infoTexIntensityMul;
  634. uniform vec2 infoTexGen; // 1.0/(pwr2map{x,z} * SQUARE_SIZE)
  635. #endif
  636.  
  637. #ifndef SMF_ARB_LIGHTING
  638. uniform sampler2D specularTex;
  639. #endif
  640.  
  641. #ifdef HAVE_SHADOWS
  642. uniform sampler2DShadow shadowTex;
  643. uniform mat4 shadowMat;
  644. uniform vec4 shadowParams;
  645. #endif
  646.  
  647. #ifdef SMF_WATER_ABSORPTION
  648. uniform vec3 waterMinColor;
  649. uniform vec3 waterBaseColor;
  650. uniform vec3 waterAbsorbColor;
  651. #endif
  652.  
  653. #ifdef SMF_DETAIL_TEXTURE_SPLATTING
  654. uniform sampler2D splatDetailTex;
  655. uniform sampler2D splatDistrTex;
  656. uniform vec4 splatTexMults; // per-channel splat intensity multipliers
  657. uniform vec4 splatTexScales; // defaults to SMF_DETAILTEX_RES per channel
  658. #endif
  659.  
  660. #ifdef SMF_SKY_REFLECTIONS
  661. uniform samplerCube skyReflectTex;
  662. uniform sampler2D skyReflectModTex;
  663. #endif
  664.  
  665. #ifdef SMF_DETAIL_NORMALS
  666. uniform sampler2D detailNormalTex;
  667. #endif
  668.  
  669. #ifdef SMF_LIGHT_EMISSION
  670. uniform sampler2D lightEmissionTex;
  671. #endif
  672.  
  673. #ifdef SMF_PARALLAX_MAPPING
  674. uniform sampler2D parallaxHeightTex;
  675. #endif
  676.  
  677.  
  678. /***********************************************************************/
  679. // Helper functions
  680.  
  681. #ifdef SMF_PARALLAX_MAPPING
  682. vec2 GetParallaxUVOffset(vec2 uv, vec3 dir) {
  683. vec4 texel = texture2D(parallaxHeightTex, uv);
  684.  
  685. // RG: height in [ 0.0, 1.0] (256^2 strata)
  686. // B: scale in [ 0.0, 1.0] (256 strata), eg. 0.04 (~10.0/256.0)
  687. // A: bias in [-0.5, 0.5] (256 strata), eg. -0.02 (~75.0/256.0)
  688. //
  689. const float RMUL = 255.0 * 256.0;
  690. const float GMUL = 256.0;
  691. const float HDIV = 65536.0;
  692.  
  693. float heightValue = dot(texel.rg, vec2(RMUL, GMUL)) / HDIV;
  694. float heightScale = texel.b;
  695. float heightBias = texel.a - 0.5;
  696. float heightOffset = heightValue * heightScale + heightBias;
  697.  
  698. return ((dir.xy / dir.z) * heightOffset);
  699. }
  700. #endif
  701.  
  702. vec3 GetFragmentNormal(vec2 uv) {
  703. vec3 normal;
  704. #ifdef SSMF_UNCOMPRESSED_NORMALS
  705. normal = normalize(texture2D(normalsTex, uv).xyz);
  706. #else
  707. normal.xz = texture2D(normalsTex, uv).ra;
  708. normal.y = sqrt(1.0 - dot(normal.xz, normal.xz));
  709. #endif
  710. return normal;
  711. }
  712.  
  713. vec4 GetDetailTextureColor(vec2 uv) {
  714. #ifndef SMF_DETAIL_TEXTURE_SPLATTING
  715. vec2 detailTexCoord = vertexWorldPos.xz * vec2(SMF_DETAILTEX_RES);
  716. vec4 detailCol = (texture2D(detailTex, detailTexCoord) * 2.0) - 1.0;
  717. #else
  718. vec4 splatTexCoord0 = vertexWorldPos.xzxz * splatTexScales.rrgg;
  719. vec4 splatTexCoord1 = vertexWorldPos.xzxz * splatTexScales.bbaa;
  720. vec4 splatDetails;
  721. splatDetails.r = texture2D(splatDetailTex, splatTexCoord0.st).r;
  722. splatDetails.g = texture2D(splatDetailTex, splatTexCoord0.pq).g;
  723. splatDetails.b = texture2D(splatDetailTex, splatTexCoord1.st).b;
  724. splatDetails.a = texture2D(splatDetailTex, splatTexCoord1.pq).a;
  725. splatDetails = (splatDetails * 2.0) - 1.0;
  726.  
  727. vec4 splatCofac = texture2D(splatDistrTex, uv) * splatTexMults;
  728. vec4 detailCol = vec4(dot(splatDetails, splatCofac));
  729. #endif
  730.  
  731. return detailCol;
  732. }
  733.  
  734. vec4 GetShadeInt(float groundLightInt, float groundShadowCoeff, float groundDiffuseAlpha) {
  735. vec4 groundShadeInt = vec4(0.0, 0.0, 0.0, 1.0);
  736.  
  737. groundShadeInt.rgb = groundAmbientColor + groundDiffuseColor * (groundLightInt * groundShadowCoeff);
  738. groundShadeInt.rgb *= vec3(SMF_INTENSITY_MULT);
  739.  
  740. #ifdef SMF_VOID_WATER
  741. // cut out all underwater fragments indiscriminately
  742. groundShadeInt.a = float(vertexWorldPos.y >= 0.0);
  743. #endif
  744.  
  745. #ifdef SMF_VOID_GROUND
  746. // assume the map(per)'s diffuse texture provides sensible alphas
  747. // note that voidground overrides voidwater if *both* are enabled
  748. // (limiting it to just above-water fragments would be arbitrary)
  749. groundShadeInt.a = groundDiffuseAlpha;
  750. #endif
  751.  
  752. #ifdef SMF_WATER_ABSORPTION
  753. // use alpha of groundShadeInt cause:
  754. // allow voidground maps to create holes in the seabed
  755. // (SMF_WATER_ABSORPTION == 1 implies voidwater is not
  756. // enabled but says nothing about the voidground state)
  757. vec4 waterShadeInt = vec4(waterBaseColor.rgb, groundShadeInt.a);
  758. if (mapHeights.x <= 0.0) {
  759. float waterShadeAlpha = abs(vertexWorldPos.y) * SMF_SHALLOW_WATER_DEPTH_INV;
  760. float waterShadeDecay = 0.2 + (waterShadeAlpha * 0.1);
  761. float vertexStepHeight = min(1023.0, -vertexWorldPos.y);
  762. float waterLightInt = min(groundLightInt * 2.0 + 0.4, 1.0);
  763.  
  764. // vertex below shallow water depth --> alpha=1
  765. // vertex above shallow water depth --> alpha=waterShadeAlpha
  766. waterShadeAlpha = min(1.0, waterShadeAlpha + float(vertexWorldPos.y <= -SMF_SHALLOW_WATER_DEPTH));
  767.  
  768. waterShadeInt.rgb -= (waterAbsorbColor.rgb * vertexStepHeight);
  769. waterShadeInt.rgb = max(waterMinColor.rgb, waterShadeInt.rgb);
  770. waterShadeInt.rgb *= vec3(SMF_INTENSITY_MULT * waterLightInt);
  771.  
  772. // make shadowed areas darker over deeper water
  773. waterShadeInt.rgb *= (1.0 - waterShadeDecay * (1.0 - groundShadowCoeff));
  774.  
  775. // if depth is greater than _SHALLOW_ depth, select waterShadeInt
  776. // otherwise interpolate between groundShadeInt and waterShadeInt
  777. // (both are already cosine-weighted)
  778. waterShadeInt.rgb = mix(groundShadeInt.rgb, waterShadeInt.rgb, waterShadeAlpha);
  779. }
  780. return mix(groundShadeInt, waterShadeInt, float(vertexWorldPos.y < 0.0));
  781. #else
  782. return groundShadeInt;
  783. #endif
  784. }
  785.  
  786.  
  787. vec3 DynamicLighting(vec3 normal, vec3 diffuseCol, vec3 specularCol, float specularExp) {
  788. vec3 light = vec3(0.0);
  789. #if !defined(DEFERRED_MODE) && (MAX_DYNAMIC_MAP_LIGHTS > 0)
  790. for (int i = 0; i < MAX_DYNAMIC_MAP_LIGHTS; i++) {
  791. vec3 lightVec = gl_LightSource[BASE_DYNAMIC_MAP_LIGHT + i].position.xyz - vertexWorldPos.xyz;
  792. vec3 halfVec = gl_LightSource[BASE_DYNAMIC_MAP_LIGHT + i].halfVector.xyz;
  793.  
  794. float lightRadius = gl_LightSource[BASE_DYNAMIC_MAP_LIGHT + i].constantAttenuation;
  795. float lightDistance = length(lightVec);
  796. float lightScale = float(lightDistance <= lightRadius);
  797. float lightCosAngDiff = clamp(dot(normal, lightVec / lightDistance), 0.0, 1.0);
  798. float lightCosAngSpec = clamp(dot(normal, normalize(halfVec)), 0.0, 1.0);
  799. #ifdef OGL_SPEC_ATTENUATION
  800. float lightAttenuation =
  801. (gl_LightSource[BASE_DYNAMIC_MAP_LIGHT + i].constantAttenuation) +
  802. (gl_LightSource[BASE_DYNAMIC_MAP_LIGHT + i].linearAttenuation * lightDistance) +
  803. (gl_LightSource[BASE_DYNAMIC_MAP_LIGHT + i].quadraticAttenuation * lightDistance * lightDistance);
  804.  
  805. lightAttenuation = 1.0 / max(lightAttenuation, 1.0);
  806. #else
  807. float lightAttenuation = 1.0 - min(1.0, ((lightDistance * lightDistance) / (lightRadius * lightRadius)));
  808. #endif
  809.  
  810. float vectorDot = -dot((lightVec / lightDistance), gl_LightSource[BASE_DYNAMIC_MAP_LIGHT + i].spotDirection);
  811. float cutoffDot = gl_LightSource[BASE_DYNAMIC_MAP_LIGHT + i].spotCosCutoff;
  812.  
  813. float lightSpecularPow = 0.0;
  814. #ifndef SMF_ARB_LIGHTING
  815. lightSpecularPow = max(0.0, pow(lightCosAngSpec, specularExp));
  816. #endif
  817.  
  818. lightScale *= float(vectorDot >= cutoffDot);
  819.  
  820. light += (lightScale * gl_LightSource[BASE_DYNAMIC_MAP_LIGHT + i].ambient.rgb);
  821. light += (lightScale * lightAttenuation * (diffuseCol.rgb * gl_LightSource[BASE_DYNAMIC_MAP_LIGHT + i].diffuse.rgb * lightCosAngDiff));
  822. light += (lightScale * lightAttenuation * (specularCol.rgb * gl_LightSource[BASE_DYNAMIC_MAP_LIGHT + i].specular.rgb * lightSpecularPow));
  823. }
  824. #endif
  825. return light;
  826. }
  827.  
  828. /***********************************************************************/
  829. // main()
  830.  
  831. void main() {
  832. vec2 diffTexCoords = diffuseTexCoords;
  833. vec2 specTexCoords = vertexWorldPos.xz * specularTexGen;
  834. vec2 normTexCoords = vertexWorldPos.xz * normalTexGen;
  835.  
  836. // not calculated in the vertex shader to save varying components (OpenGL2.0 allows just 32)
  837. vec3 cameraDir = vertexWorldPos.xyz - cameraPos;
  838. vec3 normal = GetFragmentNormal(normTexCoords);
  839.  
  840. #if defined(SMF_DETAIL_NORMALS) || defined(SMF_PARALLAX_MAPPING)
  841. // detail-normals are (assumed to be) defined within STN space
  842. // (for a regular vertex normal equal to <0, 1, 0>, the S- and
  843. // T-tangents are aligned with Spring's +x and +z (!) axes)
  844. vec3 tTangent = normalize(cross(normal, vec3(-1.0, 0.0, 0.0)));
  845. vec3 sTangent = cross(normal, tTangent);
  846. mat3 stnMatrix = mat3(sTangent, tTangent, normal);
  847. #endif
  848.  
  849.  
  850. #ifdef SMF_PARALLAX_MAPPING
  851. {
  852. // use specular-texture coordinates to index parallaxHeightTex
  853. // (ie. specularTex and parallaxHeightTex must have equal size)
  854. // cameraDir does not need to be normalized, x/z and y/z ratios
  855. // do not change
  856. vec2 uvOffset = GetParallaxUVOffset(specTexCoords, transpose(stnMatrix) * cameraDir);
  857.  
  858. // scale the parallax offset since it is in spectex-space
  859. diffTexCoords += (uvOffset / (SMF_TEXSQUARE_SIZE * specularTexGen));
  860. normTexCoords += (uvOffset * (normalTexGen / specularTexGen));
  861. specTexCoords += (uvOffset);
  862.  
  863. normal = GetFragmentNormal(normTexCoords);
  864. }
  865. #endif
  866.  
  867. #ifdef SMF_DETAIL_NORMALS
  868. {
  869. vec4 dtSample = texture2D(detailNormalTex, normTexCoords);
  870. vec3 dtNormal = (dtSample.xyz * 2.0) - 1.0;
  871.  
  872. // convert dtNormal from TS to WS before mixing
  873. normal = normalize(mix(normal, stnMatrix * dtNormal, dtSample.a));
  874. }
  875. #endif
  876.  
  877. #ifndef DEFERRED_MODE
  878. float cosAngleDiffuse = clamp(dot(lightDir.xyz, normal), 0.0, 1.0);
  879. float cosAngleSpecular = clamp(dot(normalize(halfDir), normal), 0.0, 1.0);
  880. #endif
  881.  
  882. vec4 diffuseCol = texture2D(diffuseTex, diffTexCoords);
  883. vec4 detailCol = GetDetailTextureColor(specTexCoords);
  884. // non-zero default specularity on non-SSMF maps (for DL)
  885. vec4 specularCol = vec4(0.5, 0.5, 0.5, 1.0);
  886. vec4 emissionCol = vec4(0.0, 0.0, 0.0, 0.0);
  887.  
  888. #if !defined(DEFERRED_MODE) && defined(SMF_SKY_REFLECTIONS)
  889. {
  890. // cameraDir does not need to be normalized for reflect()
  891. vec3 reflectDir = reflect(cameraDir, normal);
  892. vec3 reflectCol = textureCube(skyReflectTex, gl_NormalMatrix * reflectDir).rgb;
  893. vec3 reflectMod = texture2D(skyReflectModTex, specTexCoords).rgb;
  894.  
  895. diffuseCol.rgb = mix(diffuseCol.rgb, reflectCol, reflectMod);
  896. }
  897. #endif
  898. #if !defined(DEFERRED_MODE) && defined(HAVE_INFOTEX)
  899. {
  900. // increase contrast and brightness for the overlays
  901. // TODO: make the multiplier configurable by users?
  902. vec2 infoTexCoords = vertexWorldPos.xz * infoTexGen;
  903. diffuseCol.rgb += (texture2D(infoTex, infoTexCoords).rgb * infoTexIntensityMul);
  904. diffuseCol.rgb -= (vec3(0.5, 0.5, 0.5) * float(infoTexIntensityMul == 1.0));
  905. }
  906. #endif
  907.  
  908.  
  909.  
  910. float shadowCoeff = 1.0;
  911.  
  912. #if !defined(DEFERRED_MODE) && defined(HAVE_SHADOWS)
  913. {
  914. vec2 p17 = shadowParams.zz;
  915. vec2 p18 = shadowParams.ww;
  916.  
  917. vec4 vertexShadowPos = shadowMat * vertexWorldPos;
  918. vertexShadowPos.st *= (inversesqrt(abs(vertexShadowPos.st) + p17) + p18);
  919. vertexShadowPos.st += shadowParams.xy;
  920.  
  921. // same as ARB shader: shadowCoeff = 1 - (1 - shadowCoeff) * groundShadowDensity
  922. shadowCoeff = shadow2DProj(shadowTex, vertexShadowPos).r;
  923. shadowCoeff = mix(1.0, shadowCoeff, groundShadowDensity);
  924. }
  925. #endif
  926.  
  927. #ifndef DEFERRED_MODE
  928. {
  929. // GroundMaterialAmbientDiffuseColor * LightAmbientDiffuseColor
  930. vec4 shadeInt = GetShadeInt(cosAngleDiffuse, shadowCoeff, diffuseCol.a);
  931.  
  932. gl_FragColor.rgb = (diffuseCol.rgb + detailCol.rgb) * shadeInt.rgb;
  933. gl_FragColor.a = shadeInt.a;
  934. }
  935. #endif
  936.  
  937. #ifdef SMF_LIGHT_EMISSION
  938. {
  939. // apply self-illumination aka. glow, not masked by shadows
  940. emissionCol = texture2D(lightEmissionTex, specTexCoords);
  941.  
  942. #ifndef DEFERRED_MODE
  943. gl_FragColor.rgb = gl_FragColor.rgb * (1.0 - emissionCol.a) + emissionCol.rgb;
  944. #endif
  945. }
  946. #endif
  947.  
  948. #ifndef SMF_ARB_LIGHTING
  949. specularCol = texture2D(specularTex, specTexCoords);
  950.  
  951. #ifndef DEFERRED_MODE
  952. // sun specular lighting contribution
  953. float specularExp = specularCol.a * 16.0;
  954. float specularPow = pow(cosAngleSpecular, specularExp);
  955.  
  956. vec3 specularInt = specularCol.rgb * specularPow;
  957. specularInt *= shadowCoeff;
  958.  
  959. // no need to multiply by groundSpecularColor anymore
  960. gl_FragColor.rgb += specularInt;
  961.  
  962. #if (MAX_DYNAMIC_MAP_LIGHTS > 0)
  963. gl_FragColor.rgb += DynamicLighting(normal, diffuseCol.rgb, specularCol.rgb, specularExp);
  964. #endif
  965. #endif
  966. #endif
  967.  
  968. #ifdef DEFERRED_MODE
  969. gl_FragData[GBUFFER_NORMTEX_IDX] = vec4((normal + vec3(1.0, 1.0, 1.0)) * 0.5, 1.0);
  970. gl_FragData[GBUFFER_DIFFTEX_IDX] = diffuseCol + detailCol;
  971. gl_FragData[GBUFFER_SPECTEX_IDX] = specularCol;
  972. gl_FragData[GBUFFER_EMITTEX_IDX] = emissionCol;
  973. gl_FragData[GBUFFER_MISCTEX_IDX] = vec4(0.0);
  974.  
  975. // linearly transform the eye-space depths, might be more useful?
  976. // gl_FragDepth = gl_FragCoord.z / gl_FragCoord.w;
  977. #else
  978. gl_FragColor.rgb = mix(gl_Fog.color.rgb, gl_FragColor.rgb, fogFactor);
  979. #endif
  980. }
  981.  
  982.  
  983. [f=0000000] Creating TreeDrawer
  984. [f=0000000] Creating ProjectileDrawer & UnitDrawer
  985. [f=0000000] Creating Projectile Textures
  986. [f=0000000] Creating Water
  987. [f=0000000] Game::LoadInterface (Camera&Mouse): 665 ms
  988. [f=0000000] Game::LoadInterface (Console): 67 ms
  989. [f=0000000] Loading LuaRules
  990. [f=0000000] Loaded synced gadget: Metalspot Finder Gadget <mex_spot_finder.lua>
  991. [f=0000000] Loaded synced gadget: Rez Exp <unit_rez_exp.lua>
  992. [f=0000000] Loaded synced gadget: ranks api <api_ranks.lua>
  993. [f=0000000] Loaded synced gadget: CameraBroadcast <camera_lockcamera.lua>
  994. [f=0000000] Loaded synced gadget: Awards <gui_awards.lua>
  995. [f=0000000] Loaded synced gadget: Air Release <unit_air_release_manager.lua>
  996. [f=0000000] Loaded synced gadget: AirPlantParents <unit_air_plants.lua>
  997. [f=0000000] Loaded synced gadget: Armageddon <mo_armageddon.lua>
  998. [f=0000000] Loaded synced gadget: Bomber Control <unit_bomber_control.lua>
  999. [f=0000000] Loaded synced gadget: Commander Blast <unit_commander_blast.lua>
  1000. [f=0000000] Loaded synced gadget: Commando Watch <unit_commando_watch.lua>
  1001. [f=0000000] Loaded synced gadget: Cursor Broadcast <cmd_mouse_pos_broadcast.lua>
  1002. [f=0000000] Loaded synced gadget: DGun CmdType Fix <unit_dgun_cmdtype_fix.lua>
  1003. [f=0000000] Loaded synced gadget: Death Messages <game_death_messages.lua>
  1004. [f=0000000] Loaded synced gadget: Debris Damage <unit_debris_damage.lua>
  1005. [f=0000000] Loaded synced gadget: Depthcharge splash <fx_depthcharge_splash.lua>
  1006. [f=0000000] Loaded synced gadget: DirectControl <unit_direct_control.lua>
  1007. [f=0000000] Loaded synced gadget: DragonsDisguise <unit_set_neutral.lua>
  1008. [f=0000000] Loaded synced gadget: Dynamic collision volume & Hitsphere Scaledown <unit_dynamic_collision_volume.lua>
  1009. [f=0000000] Loaded synced gadget: Energy Conversion <game_energy_conversion.lua>
  1010. [f=0000000] Loaded synced gadget: FinishedBuilding <unit_finished_building.lua>
  1011. [f=0000000] Loaded synced gadget: Game End <game_end.lua>
  1012. [f=0000000] Loaded synced gadget: Initial Spawn <game_initial_spawn.lua>
  1013. [f=0000000] Loaded synced gadget: Juno Damage <unit_juno_damage.lua>
  1014. [f=0000000] Loaded synced gadget: Lightning Spash Damage <unit_lightning_splash_dmg.lua>
  1015. [f=0000000] Loaded synced gadget: Limit Dgun Use (Charge) <unit_dgun_charge.lua>
  1016. [f=0000000] Loaded synced gadget: Load Missiles <cmd_loadmissiles.lua>
  1017. [f=0000000] Loaded synced gadget: Lua unit script framework <unit_script.lua>
  1018. [f=0000000] Loaded synced gadget: Maverick Exp <unit_maverick_exp.lua>
  1019. [f=0000000] Loaded synced gadget: Merc/Scr stockpile control <unit_mercscr_stockpile_limit.lua>
  1020. [f=0000000] Loaded synced gadget: Napalm <lups_napalm.lua>
  1021. [f=0000000] Loaded synced gadget: No Land Damage <unit_no_land_damage.lua>
  1022. [f=0000000] Loaded synced gadget: No Self Pwn <unit_noselfpwn.lua>
  1023. [f=0000000] Loaded synced gadget: No Self-D <unit_prevent_share_selfd.lua>
  1024. [f=0000000] Loaded synced gadget: Nonblocking mines <unit_nonblocking_mines.lua>
  1025. [f=0000000] Loaded synced gadget: Paralyse Multiplier <unit_paralyze_multiplier.lua>
  1026. [f=0000000] Loaded synced gadget: Passive Builders v3 <unit_passive_builders.lua>
  1027. [f=0000000] Loaded synced gadget: PopUpWaterStructures <unit_pop_up_water_structures.lua>
  1028. [f=0000000] Loaded synced gadget: Prevent Excessive Share <game_prevent_excessive_share.lua>
  1029. [f=0000000] Loaded synced gadget: Prevent Lab Hax <unit_prevent_lab_hax.lua>
  1030. [f=0000000] Loaded synced gadget: Prevent Load Hax <unit_prevent_load_hax.lua>
  1031. [f=0000000] Loaded synced gadget: Prevent Range Hax <unit_prevent_range_hax.lua>
  1032. [f=0000000] Loaded synced gadget: Prevent Strange Orders <unit_prevent_strange_orders.lua>
  1033. [f=0000000] Loaded synced gadget: Prevent Unload Hax <unit_prevent_unload_hax.lua>
  1034. [f=0000000] Loaded synced gadget: Prevent outside-of-map hax <unit_prevent_aircraft_hax.lua>
  1035. [f=0000000] Loaded synced gadget: Reclaim Fix <unit_reclaim_fix.lua>
  1036. [f=0000000] Loaded synced gadget: Reclaim flash <gfx_reclaim_flash.lua>
  1037. [f=0000000] Loaded synced gadget: Shockwaves <lups_shockwaves.lua>
  1038. [f=0000000] Loaded synced gadget: Stealthy Passengers <unit_stealthy_passengers.lua>
  1039. [f=0000000] Loaded synced gadget: Stun Control <unit_stun_control.lua>
  1040. [f=0000000] Loaded synced gadget: Target on the move <unit_target_on_the_move.lua>
  1041. [f=0000000] Loaded synced gadget: Team Resourcing <game_team_resources.lua>
  1042. [f=0000000] Loaded synced gadget: Transportee Hider <unit_transportee_hider.lua>
  1043. [f=0000000] Loaded synced gadget: Unit transportable nanos <unit_transportable_nanos.lua>
  1044. [f=0000000] Loaded synced gadget: Watereffects <fx_watersplash.lua>
  1045. [f=0000000] Loaded synced gadget: fx_reclaim_shards <fx_reclaim_shards.lua>
  1046. [f=0000000] Loaded synced gadget: fx_wreck_shards <fx_wreck_shards.lua>
  1047. [f=0000000] Loaded synced gadget: game_no_share_to_enemy <game_no_share_to_enemy.lua>
  1048. [f=0000000] Loaded synced gadget: gfx_dynamic_lighting.lua <gfx_dynamic_lighting.lua>
  1049. [f=0000000] Loaded synced gadget: lib_startpoint_guesser.lua <lib_startpoint_guesser.lua>
  1050. [f=0000000] Loaded synced gadget: lups_wrapper.lua <lups_wrapper.lua>
  1051. [f=0000000] Loaded synced gadget: mo_enemywrecks <mo_enemywrecks.lua>
  1052. [f=0000000] Loaded synced gadget: mo_preventcombomb <mo_preventcombomb.lua>
  1053. [f=0000000] Loaded synced gadget: subMissile splash <fx_submissile_splash.lua>
  1054. [f=0000000] Loaded synced gadget: transportfix <unit_transportfix.lua>
  1055. [f=0000000] Loaded synced gadget: unit_combomb_full_damage <unit_combomb_full_damage.lua>
  1056. [f=0000000] Loaded synced gadget: Area Attack <unit_areaattack.lua>
  1057. [f=0000000] Loaded synced gadget: CustomUnitShaders <gfx_customunitshaders.lua>
  1058. [f=0000000] Loaded synced gadget: Substitution <game_replace_afk_players.lua>
  1059. [f=0000000] Loaded synced gadget: Take Manager <cmd_idle_players.lua>
  1060. [f=0000000] Loaded synced gadget: Team Com Ends <game_team_com_ends.lua>
  1061. [f=0000000] Loaded synced gadget: LupsSyncedManager <lups_manager.lua>
  1062. [f=0000000] Loaded synced gadget: Mex Upgrader Gadget <unit_mex_upgrader.lua>
  1063. [f=0000000] Loaded synced gadget: Crashing Aircraft <unit_crashing_aircraft.lua>
  1064. [f=0000000] <LockCamera>: Sorry for the camera switch spam, but this is the only reliable way to list camera states other than hardcoding them
  1065. [f=0000000] Switching to Overview style camera
  1066. [f=0000000] Switching to Smooth style camera
  1067. [f=0000000] Switching to Overhead (TA) style camera
  1068. [f=0000000] Switching to Free style camera
  1069. [f=0000000] Switching to Total War style camera
  1070. [f=0000000] Switching to Rotatable overhead camera
  1071. [f=0000000] Switching to Orbit style camera
  1072. [f=0000000] Switching to FPS style camera
  1073. [f=0000000] Switching to Overhead (TA) style camera
  1074. [f=0000000] Loaded unsynced gadget: Metalspot Finder Gadget <mex_spot_finder.lua>
  1075. [f=0000000] Loaded unsynced gadget: ranks api <api_ranks.lua>
  1076. [f=0000000] Loaded unsynced gadget: CustomIcons <unit_customicons.lua>
  1077. [f=0000000] Loaded unsynced gadget: CameraBroadcast <camera_lockcamera.lua>
  1078. [f=0000000] Loaded unsynced gadget: Awards <gui_awards.lua>
  1079. [f=0000000] Loaded unsynced gadget: Newbie Info <gui_newbie_info.lua>
  1080. [f=0000000] Loaded unsynced gadget: Air Release <unit_air_release_manager.lua>
  1081. [f=0000000] Loaded unsynced gadget: AirPlantParents <unit_air_plants.lua>
  1082. [f=0000000] Loaded unsynced gadget: Cursor Broadcast <cmd_mouse_pos_broadcast.lua>
  1083. [f=0000000] Loaded unsynced gadget: Debris Damage <unit_debris_damage.lua>
  1084. [f=0000000] Loaded unsynced gadget: DragonsDisguise <unit_set_neutral.lua>
  1085. [f=0000000] Loaded unsynced gadget: Dynamic collision volume & Hitsphere Scaledown <unit_dynamic_collision_volume.lua>
  1086. [f=0000000] Loaded unsynced gadget: FinishedBuilding <unit_finished_building.lua>
  1087. [f=0000000] Loaded unsynced gadget: Initial Spawn <game_initial_spawn.lua>
  1088. [f=0000000] Loaded unsynced gadget: Juno Damage <unit_juno_damage.lua>
  1089. [f=0000000] Loaded unsynced gadget: Lightning Spash Damage <unit_lightning_splash_dmg.lua>
  1090. [f=0000000] Loaded unsynced gadget: Limit Dgun Use (Charge) <unit_dgun_charge.lua>
  1091. [f=0000000] Loaded unsynced gadget: Load Missiles <cmd_loadmissiles.lua>
  1092. [f=0000000] Loaded unsynced gadget: Merc/Scr stockpile control <unit_mercscr_stockpile_limit.lua>
  1093. [f=0000000] Loaded unsynced gadget: Napalm <lups_napalm.lua>
  1094. [f=0000000] Loaded unsynced gadget: No Self-D <unit_prevent_share_selfd.lua>
  1095. [f=0000000] Loaded unsynced gadget: Opacity control <api_opacity.lua>
  1096. [f=0000000] Loaded unsynced gadget: PopUpWaterStructures <unit_pop_up_water_structures.lua>
  1097. [f=0000000] Loaded unsynced gadget: Prevent Unload Hax <unit_prevent_unload_hax.lua>
  1098. [f=0000000] Loaded unsynced gadget: Reclaim Fix <unit_reclaim_fix.lua>
  1099. [f=0000000] Loaded unsynced gadget: Reclaim flash <gfx_reclaim_flash.lua>
  1100. [f=0000000] Loaded unsynced gadget: Shockwaves <lups_shockwaves.lua>
  1101. [f=0000000] Loaded unsynced gadget: Target on the move <unit_target_on_the_move.lua>
  1102. [f=0000000] Loaded unsynced gadget: Transportee Hider <unit_transportee_hider.lua>
  1103. [f=0000000] Loaded unsynced gadget: fx_reclaim_shards <fx_reclaim_shards.lua>
  1104. [f=0000000] Loaded unsynced gadget: fx_wreck_shards <fx_wreck_shards.lua>
  1105. [f=0000000] Loaded unsynced gadget: game_no_share_to_enemy <game_no_share_to_enemy.lua>
  1106. [f=0000000] Loaded unsynced gadget: gfx_dynamic_lighting.lua <gfx_dynamic_lighting.lua>
  1107. [f=0000000] Loaded unsynced gadget: lib_startpoint_guesser.lua <lib_startpoint_guesser.lua>
  1108. [f=0000000] Loaded unsynced gadget: mo_enemywrecks <mo_enemywrecks.lua>
  1109. [f=0000000] Loaded unsynced gadget: mo_noowner <mo_noowner.lua>
  1110. [f=0000000] Loaded unsynced gadget: transportfix <unit_transportfix.lua>
  1111. [f=0000000] Loaded unsynced gadget: Area Attack <unit_areaattack.lua>
  1112. [f=0000000] Loaded unsynced gadget: CustomUnitShaders <gfx_customunitshaders.lua>
  1113. [f=0000000] Loaded unsynced gadget: Substitution <game_replace_afk_players.lua>
  1114. [f=0000000] Loaded unsynced gadget: Take Manager <cmd_idle_players.lua>
  1115. [f=0000000] Loaded unsynced gadget: LupsSyncedManager <lups_manager.lua>
  1116. [f=0000000] Loaded unsynced gadget: Mex Upgrader Gadget <unit_mex_upgrader.lua>
  1117. [f=0000000] Loaded unsynced gadget: Crashing Aircraft <unit_crashing_aircraft.lua>
  1118. [f=0000000] Loaded unsynced gadget: Lups <lups_wrapper.lua>
  1119. [f=0000000] Loading LuaGaia
  1120. [f=0000000] Loading LuaUI
  1121. [f=0000000] LuaSocketEnabled: yes
  1122. [f=0000000] This game has locked LuaUI access
  1123. [f=0000000] This game has locked LuaUI access
  1124. [f=0000000] Using LUAUI_DIRNAME = LuaUI/
  1125. [f=0000000] Reloaded ctrlpanel from file: LuaUI/ctrlpanel.txt
  1126. [f=0000000] LuaUI: bound F11 to the widget selector
  1127. [f=0000000] LuaUI: bound CTRL+F11 to tweak mode
  1128. [f=0000000] Loading widget from mod: Spy move/reclaim defaults <unit_default_spy_move_cloaked.lua> ...
  1129. [f=0000000] Loading widget from mod: Defense Range <gui_defenserange.lua> ...
  1130. [f=0000000] Loading widget from mod: Red_UI_Framework <red_ui_framework.lua> ...
  1131. [f=0000000] Loading widget from mod: Metalspot Finder <api_metalspot_finder.lua> ...
  1132. [f=0000000] Loading widget from mod: MexUpg Helper <cmd_mex_upgrade_helper.lua> ...
  1133. [f=0000000] Loading widget from mod: Red Tooltip <gui_red_tooltip.lua> ...
  1134. [f=0000000] Loading widget from mod: Faction Change <gui_faction_change.lua> ...
  1135. [f=0000000] Loading widget from mod: HealthBars <gui_healthbars.lua> ...
  1136. [f=0000000] Loading widget from mod: LockCamera <camera_lockcamera.lua> ...
  1137. [f=0000000] Loading widget from mod: Open Host List <gui_open_hosts.lua> ...
  1138. [f=0000000] Loading widget from mod: AdvPlayersList <gui_advplayerslist.lua> ...
  1139. [f=0000000] Loading widget from mod: BuildETA <gui_build_eta.lua> ...
  1140. [f=0000000] Loading widget from mod: Projectile lights <gfx_projectile_lights.lua> ...
  1141. [f=0000000] Loading widget from mod: Initial Queue <unit_initial_queue.lua> ...
  1142. [f=0000000] Loading widget from mod: Anti Range <gui_anti_range.lua> ...
  1143. [f=0000000] Loading widget from mod: Auto First Build Facing <unit_autofirstbuildfacing.lua> ...
  1144. [f=0000000] Loading widget from mod: Autoquit <cmd_autoquit.lua> ...
  1145. [f=0000000] Loading widget from mod: Auto group <unit_auto_group.lua> ...
  1146. [f=0000000] Loading widget from mod: BA_AllyCursors <gui_ba_ally_cursors.lua> ...
  1147. [f=0000000] Loading widget from mod: BuildBar <gui_buildbar.lua> ...
  1148. [f=0000000] Loading widget from mod: Build Split <cmd_buildsplit.lua> ...
  1149. [f=0000000] Loading widget from mod: CameraFlip <camera_flip.lua> ...
  1150. [f=0000000] Loading widget from mod: Com Counter <gui_comcounter.lua> ...
  1151. [f=0000000] Loading widget from mod: DontMove <unit_dontmove.lua> ...
  1152. [f=0000000] Loading widget from mod: Group Label <gui_group_label.lua> ...
  1153. [f=0000000] Loading widget from mod: Highlight Geos <gui_highlight_geos.lua> ...
  1154. [f=0000000] Loading widget from mod: Easy Facing <gui_easyfacing.lua> ...
  1155. [f=0000000] Loading widget from mod: Com DontBreakCloak <unit_com_dontbreakcloak.lua> ...
  1156. [f=0000000] Loading widget from mod: Holdfire Fix <cmd_holdfire_fix.lua> ...
  1157. [f=0000000] Loading widget from mod: Ghost Radar <unit_ghostradar.lua> ...
  1158. [f=0000000] Loading widget from mod: Ignore List API <api_ignore.lua> ...
  1159. [f=0000000] Loading widget from mod: Ghost Site <unit_ghostsite.lua> ...
  1160. [f=0000000] Loading widget from mod: Load Own Moving <unit_load_own_moving.lua> ...
  1161. [f=0000000] Loading widget from mod: Loop Select <unit_loop_select.lua> ...
  1162. [f=0000000] Loading widget from mod: Mex Snap <cmd_mex_snap.lua> ...
  1163. [f=0000000] Loading widget from mod: Energy Conversion Info <gui_energy_conversion.lua> ...
  1164. [f=0000000] <Energy Conversion Info> Spectator mode. Widget removed.
  1165. [f=0000000] Loading widget from mod: Pause Screen <gui_pausescreen.lua> ...
  1166. [f=0000000] Loading widget from mod: Persistent Build Spacing <cmd_persistent_build_spacing.lua> ...
  1167. [f=0000000] Loading widget from mod: Point Tracker <gui_point_tracker.lua> ...
  1168. [f=0000000] Loading widget from mod: ReclaimInfo <gui_reclaiminfo.lua> ...
  1169. [f=0000000] Loading widget from mod: Red Build/Order Menu <gui_red_buildordermenu.lua> ...
  1170. [f=0000000] Loading widget from mod: Red Console <gui_red_console.lua> ...
  1171. [f=0000000] Loading widget from mod: Red Resource Bars <gui_red_resourcebars.lua> ...
  1172. [f=0000000] Loading widget from mod: Red_Drawing <red_ui_framework_drawing.lua> ...
  1173. [f=0000000] Loading widget from mod: GameTypeInfo <gui_game_type_info.lua> ...
  1174. [f=0000000] Loading widget from mod: RelativeMinimap <minimap_relative.lua> ...
  1175. [f=0000000] Loading widget from mod: Share Tracker <unit_share_tracker.lua> ...
  1176. [f=0000000] Loading widget from mod: NoDuplicateOrders <cmd_no_duplicate_orders.lua> ...
  1177. [f=0000000] Loading widget from mod: SmoothCam <camera_smoothcam.lua> ...
  1178. [f=0000000] Loading widget from mod: Spectate Selected <gui_spectate_selected.lua> ...
  1179. [f=0000000] Loading widget from mod: State Reverse Toggle <cmd_state_reverse_toggle.lua> ...
  1180. [f=0000000] Loading widget from mod: Take Proxy <cmd_take_proxy.lua> ...
  1181. [f=0000000] Loading widget from mod: Unit Finished Sounds <snd_unit_finished.lua> ...
  1182. [f=0000000] Loading widget from mod: Volume OSD <snd_volume_osd.lua> ...
  1183. [f=0000000] Loading widget from mod: Armageddon Countdown <gui_armageddon_countdown.lua> ...
  1184. [f=0000000] Loading widget from mod: Start Boxes <map_startbox.lua> ...
  1185. [f=0000000] Loading widget from mod: ImmobileBuilder <unit_immobile_builder.lua> ...
  1186. [f=0000000] Loading widget from mod: Specific Unit Reclaimer <unit_specific_unit_reclaimer.lua> ...
  1187. [f=0000000] Loading widget from mod: Stockpiler (dynamic) <unit_stockpile_dynamic.lua> ...
  1188. [f=0000000] Loading widget from mod: Attack AoE <gui_attack_aoe.lua> ...
  1189. [f=0000000] Loading widget from mod: Building Hotkeys <cmd_building_hotkeys.lua> ...
  1190. [f=0000000] Loading widget from mod: Context Build <cmd_context_build.lua> ...
  1191. [f=0000000] Loading widget from mod: Prospector <gui_prospector.lua> ...
  1192. [f=0000000] Loading widget from mod: Red Minimap <gui_red_minimap.lua> ...
  1193. [f=0000000] Loading widget from mod: Set Target Hotkeys <cmd_target_on_the_move_hotkeys.lua> ...
  1194. [f=0000000] Loading widget from mod: SmoothScroll <camera_smooth_move.lua> ...
  1195. [f=0000000] Loading widget from mod: Attack and Move Notification <unit_attackmovenotification.lua> ...
  1196. [f=0000000] Loading widget from mod: BA Waypoint Dragger <unit_waypoint_dragger_2.lua> ...
  1197. [f=0000000] Loading widget from mod: Bomber control <unit_bomber_control.lua> ...
  1198. [f=0000000] Loading widget from mod: CommandInsert <cmd_commandinsert.lua> ...
  1199. [f=0000000] Loading widget from mod: Rank Icons <gui_xp.lua> ...
  1200. [f=0000000] Loading widget from mod: Select n Center! <gui_center_n_select.lua> ...
  1201. [f=0000000] Loading widget from mod: LupsManager <gfx_lups_manager.lua> ...
  1202. [f=0000000] Loading widget from mod: Mouse Buildspacing <gui_buildspacing.lua> ...
  1203. [f=0000000] Loading widget from mod: Lups <gfx_lups_wrapper.lua> ...
  1204. [f=0000000] Loading widget from mod: CustomFormations2 <cmd_customformations2.lua> ...
  1205. [f=0000000] LuaUI v0.3
  1206. [f=0000000] [LoadFinalize] finalizing PFS
  1207. [f=0000000] [Path] [PathEstimator::ReadFile] hash=2553438466
  1208. [f=0000000] Reading Estimate PathCosts [8]
  1209. [f=0000000] [Path] [PathEstimator::ReadFile] hash=2553438490
  1210. [f=0000000] Reading Estimate PathCosts [32]
  1211. [f=0000000] [LoadFinalize] finalized PFS (554ms, checksum bd3fdb97)
  1212. [f=0000000] Loaded DecalsDrawer: Legacy
  1213. [f=0000000] GameID: 77529c54d9d6f34ec254c9aaac94bf19
  1214. [f=0000000] Connection attempt from mEIT09
  1215. [f=0000000] -> Version: 98.0
  1216. [f=0000000] -> Connection established (given id 4)
  1217. [f=0000000] Connection attempt from YesThisIsDog
  1218. [f=0000000] -> Version: 98.0
  1219. [f=0000000] -> Connection established (given id 15)
  1220. [f=0000000] Connection attempt from Insann
  1221. [f=0000000] -> Version: 98.0
  1222. [f=0000000] -> Connection established (given id 11)
  1223. [f=0000000] Connection attempt from vandie
  1224. [f=0000000] -> Version: 98.0
  1225. [f=0000000] -> Connection established (given id 6)
  1226. [f=0000000] Connection attempt from oXo
  1227. [f=0000000] -> Version: 98.0
  1228. [f=0000000] -> Connection established (given id 3)
  1229. [f=0000000] Connection attempt from Szabi
  1230. [f=0000000] -> Version: 98.0
  1231. [f=0000000] -> Connection established (given id 1)
  1232. [f=0000000] Connection attempt from DeGhosty
  1233. [f=0000000] -> Version: 98.0
  1234. [f=0000000] -> Connection established (given id 14)
  1235. [f=0000000] Connection attempt from MasterPasseli
  1236. [f=0000000] -> Version: 98.0
  1237. [f=0000000] -> Connection established (given id 26)
  1238. [f=0000000] Connection attempt from murtagon
  1239. [f=0000000] -> Version: 98.0
  1240. [f=0000000] -> Connection established (given id 25)
  1241. [f=0000000] Connection attempt from Ilya
  1242. [f=0000000] -> Version: 98.0
  1243. [f=0000000] -> Connection established (given id 17)
  1244. [f=0000000] Connection attempt from [FUEL]Afterburner
  1245. [f=0000000] -> Version: 98.0
  1246. [f=0000000] -> Connection established (given id 0)
  1247. [f=0000000] Connection attempt from Krox
  1248. [f=0000000] -> Version: 98.0
  1249. [f=0000000] -> Connection established (given id 13)
  1250. [f=0000000] Connection attempt from whitemage100
  1251. [f=0000000] -> Version: 98.0
  1252. [f=0000000] -> Connection established (given id 10)
  1253. [f=0000000] Connection attempt from Amiga1200
  1254. [f=0000000] -> Version: 98.0
  1255. [f=0000000] -> Connection established (given id 21)
  1256. [f=0000000] Connection attempt from aw87
  1257. [f=0000000] -> Version: 98.0
  1258. [f=0000000] -> Connection established (given id 22)
  1259. [f=0000000] Connection attempt from tbw
  1260. [f=0000000] -> Version: 98.0
  1261. [f=0000000] -> Connection established (given id 5)
  1262. [f=0000000] Connection attempt from Kros24
  1263. [f=0000000] -> Version: 98.0
  1264. [f=0000000] -> Connection established (given id 28)
  1265. [f=0000000] Connection attempt from santtu
  1266. [f=0000000] -> Version: 98.0
  1267. [f=0000000] -> Connection established (given id 8)
  1268. [f=0000000] Connection attempt from [DoR]Dartagnan
  1269. [f=0000000] -> Version: 98.0
  1270. [f=0000000] -> Connection established (given id 7)
  1271. [f=0000000] Connection attempt from [TaG]Isaf
  1272. [f=0000000] -> Version: 98.0
  1273. [f=0000000] -> Connection established (given id 18)
  1274. [f=0000000] Connection attempt from rethurno678
  1275. [f=0000000] -> Version: 98.0
  1276. [f=0000000] -> Connection established (given id 9)
  1277. [f=0000000] > BlackHoleHost1 * Warning: in-game IP address does not match lobby IP address for user rethurno678 (spoof protection)
  1278. [f=0000000] Connection attempt from [FUEL]Tekken
  1279. [f=0000000] -> Version: 98.0
  1280. [f=0000000] -> Connection established (given id 2)
  1281. [f=0000000] Connection attempt from Bulkovsky
  1282. [f=0000000] -> Version: 98.0
  1283. [f=0000000] -> Connection established (given id 24)
  1284. [f=0000000] Connection attempt from PataNegra
  1285. [f=0000000] -> Version: 98.0
  1286. [f=0000000] -> Connection established (given id 19)
  1287. [f=0000000] Connection attempt from lvan_zzz
  1288. [f=0000000] -> Version: 98.0
  1289. [f=0000000] -> Connection established (given id 16)
  1290. [f=0000000] Kros24 added point:
  1291. [f=0000000] Kros24 added point:
  1292. [f=0000000] Kros24 added point:
  1293. [f=0000000] Spectator [TaG]Isaf left the game: normal quit
  1294. [f=0000000] Spectator Amiga1200 left the game: normal quit
  1295. [f=0000000] [Krox] poor burner XD
  1296. [f=0000000] [lvan_zzz] Allies: why?
  1297. [f=0000000] [lvan_zzz] Allies: his team is much better lol
  1298. [f=0000000] [Krox] Spectators: lets seee
  1299. [f=0000000] <Insann> RUP
  1300. [f=0000000] <Insann> !ring
  1301. [f=0000000] > BlackHoleHost1 * Ringing 12 unready players (by Insann)
  1302. [f=0000000] <Insann> !forcestart
  1303. [f=0000000] > BlackHoleHost1 * Insann called a vote for command "forcestart" [!vote y, !vote n, !vote b]
  1304. [f=0000000] > BlackHoleHost1 * 11 users allowed to vote.
  1305. [f=0000000] [lvan_zzz] Allies: they might lose because vander will tech and porc and they're too stupid to deal with porc
  1306. [f=0000000] <santtu> !y
  1307. [f=0000000] > BlackHoleHost1 * Vote in progress: "forcestart" [y:2/7, n:0/6] (40s remaining)
  1308. [f=0000000] <whitemage100> !y
  1309. [f=0000000] > BlackHoleHost1 * Vote in progress: "forcestart" [y:3/7, n:0/6] (38s remaining)
  1310. [f=0000000] <[DoR]Dartagnan> !y
  1311. [f=0000000] > BlackHoleHost1 * Vote in progress: "forcestart" [y:4/7, n:0/6] (37s remaining)
  1312. [f=0000000] Player tbw left the game: normal quit
  1313. [f=0000000] Connection attempt from tbw
  1314. [f=0000000] -> Version: 98.0
  1315. [f=0000000] -> Connection established (given id 5)
  1316. [f=0000000] [Krox] Spectators: they will lose because dratagnan will tech
  1317. [f=0000000] > BlackHoleHost1 * Vote for command "forcestart" passed (delay expired).
  1318. [f=0000000] > BlackHoleHost1 * Forcing game start by Insann
  1319. [f=0000000] <Insann> why did he left ?
  1320. [f=0000107] lvan_zzz added point: he will build 3 nanos here first
  1321. [f=0000130] Insann paused the game
  1322. [f=0000130] <Insann> is he back ?
  1323. [f=0000130] [FUEL]Afterburner unpaused the game
  1324. [f=0000963] Spectator PataNegra left the game: normal quit
  1325. [f=0003451] Connection attempt from mdjose
  1326. [f=0003451] -> Version: 98.0
  1327. [f=0003451] -> Connection established (given id 27)
  1328. [f=0003577] lvan_zzz added point: interesting lab move queue
  1329. [f=0005383] lvan_zzz added point: /jeenode
  1330. [f=0006236] [Game::ClientReadNet] added new player existenz with number 29 to team 0
  1331. [f=0006257] Connection attempt from existenz
  1332. [f=0006257] -> Version: 98.0
  1333. [f=0006257] -> Connection established (given id 29)
  1334. [f=0008082] [mdjose] Is it a normal tactic to self-d your com to harvest res?
  1335. [f=0009145] [lvan_zzz] yes
  1336. [f=0011104] Insann added point: t2 coming
  1337. [f=0011409] [DoR]Dartagnan added point: great !
  1338. [f=0011882] whitemage100 added point: 1
  1339. [f=0012607] <Insann> Allies: I gave 1 units to [DoR]Dartagnan.
  1340. [f=0014494] <vandie> Allies: I gave 1 units to santtu.
  1341. [f=0014691] vandie added point: tt2
  1342. [f=0014816] vandie added point: tt2 santu
  1343. [f=0014901] Szabi added point: s:can i buy cons?
  1344. [f=0016078] Spectator murtagon left the game: normal quit
  1345. [f=0016119] <Szabi> Allies: mistake
  1346. [f=0016529] <mEIT09> Allies: I gave 1 units to Szabi.
  1347. [f=0016951] <vandie> !gkick rethurno678
  1348. [f=0016952] > BlackHoleHost1 * vandie called a vote for command "gKick rethurno678" [!vote y, !vote n, !vote b]
  1349. [f=0016952] > BlackHoleHost1 * 28 users allowed to vote.
  1350. [f=0016961] <Insann> Allies: I sent 5871 energy to santtu
  1351. [f=0017011] <Insann> Allies: I sent 4503 energy to santtu
  1352. [f=0017242] <whitemage100> Allies: I sent 1246 energy to santtu
  1353. [f=0017512] [lvan_zzz] why should we kick him?
  1354. [f=0018277] > BlackHoleHost1 * Vote for command "gKick rethurno678" failed (delay expired).
  1355. [f=0019071] Spectator YesThisIsDog left the game: normal quit
  1356. [f=0020273] [FUEL]Afterburner added point:
  1357. [f=0020890] [FUEL]Tekken added point:
  1358. [f=0021292] [Game::ClientReadNet] added new player ColdSuit with number 30 to team 0
  1359. [f=0021349] Connection attempt from ColdSuit
  1360. [f=0021349] -> Version: 98.0
  1361. [f=0021349] -> Connection established (given id 30)
  1362. [f=0024230] Spectator lvan_zzz left the game: normal quit
  1363. [f=0024563] oXo added point: NEED HELP DUDE
  1364. [f=0024776] > <[20cm]MerryChristmas> gg re
  1365. [f=0025038] Szabi added point:
  1366. [f=0025103] <Insann> Allies: I sent 1441 metal to whitemage100
  1367. [f=0025214] whitemage100 added point:
  1368. [f=0025337] Connection attempt from [20cm]MerryChristmas
  1369. [f=0025337] -> Version: 98.0
  1370. [f=0025337] -> Connection established (given id 12)
  1371. [f=0025619] Player santtu left the game: normal quit
  1372. [f=0025763] <rethurno678> Allies: I took --- .
  1373. [f=0026193] Szabi added point:
  1374. [f=0030643] [DoR]Dartagnan added point: scout techer
  1375. [f=0030998] Insann added point: explain please
  1376. [f=0031351] Szabi added point: nneed place
  1377. [f=0031614] Insann added point: just scout ?
  1378. [f=0031864] [FUEL]Afterburner added point: sorry
  1379. [f=0032824] Szabi added point: o make anti
  1380. [f=0034054] [Game::ClientReadNet] added new player Noitcelfer with number 31 to team 0
  1381. [f=0034184] Con
Add Comment
Please, Sign In to add comment