Imported Upstream version 0.26.0
54
files/CMakeLists.txt
Normal file
|
@ -0,0 +1,54 @@
|
|||
project(resources)
|
||||
|
||||
set(WATER_FILES
|
||||
water_nm.png
|
||||
circle.png
|
||||
)
|
||||
|
||||
set(MATERIAL_FILES
|
||||
atmosphere.shader
|
||||
atmosphere.shaderset
|
||||
clouds.shader
|
||||
clouds.shaderset
|
||||
core.h
|
||||
moon.shader
|
||||
moon.shaderset
|
||||
objects.mat
|
||||
objects.shader
|
||||
objects.shaderset
|
||||
openmw.configuration
|
||||
quad.mat
|
||||
quad.shader
|
||||
quad.shaderset
|
||||
shadowcaster.mat
|
||||
shadowcaster.shader
|
||||
shadowcaster.shaderset
|
||||
shadows.h
|
||||
sky.mat
|
||||
stars.shader
|
||||
stars.shaderset
|
||||
sun.shader
|
||||
sun.shaderset
|
||||
terrain.shader
|
||||
terrain.shaderset
|
||||
underwater.h
|
||||
water.mat
|
||||
water.shader
|
||||
water.shaderset
|
||||
selection.mat
|
||||
selection.shader
|
||||
selection.shaderset
|
||||
watersim_heightmap.shader
|
||||
watersim_addimpulse.shader
|
||||
watersim_heighttonormal.shader
|
||||
watersim_common.h
|
||||
watersim.mat
|
||||
watersim.shaderset
|
||||
mygui.mat
|
||||
mygui.shader
|
||||
mygui.shaderset
|
||||
)
|
||||
|
||||
copy_all_files(${CMAKE_CURRENT_SOURCE_DIR}/water "${OpenMW_BINARY_DIR}/resources/water/" "${WATER_FILES}")
|
||||
|
||||
copy_all_files(${CMAKE_CURRENT_SOURCE_DIR}/materials "${OpenMW_BINARY_DIR}/resources/materials/" "${MATERIAL_FILES}")
|
BIN
files/launcher/icons/tango/document-new.png
Normal file
After Width: | Height: | Size: 477 B |
BIN
files/launcher/icons/tango/edit-copy.png
Normal file
After Width: | Height: | Size: 498 B |
BIN
files/launcher/icons/tango/edit-delete.png
Normal file
After Width: | Height: | Size: 793 B |
BIN
files/launcher/icons/tango/go-bottom.png
Normal file
After Width: | Height: | Size: 663 B |
BIN
files/launcher/icons/tango/go-down.png
Normal file
After Width: | Height: | Size: 683 B |
BIN
files/launcher/icons/tango/go-top.png
Normal file
After Width: | Height: | Size: 636 B |
BIN
files/launcher/icons/tango/go-up.png
Normal file
After Width: | Height: | Size: 652 B |
8
files/launcher/icons/tango/index.theme
Normal file
|
@ -0,0 +1,8 @@
|
|||
[Icon Theme]
|
||||
Name=Tango
|
||||
Comment=Tango Theme
|
||||
Inherits=default
|
||||
Directories=16x16
|
||||
|
||||
[16x16]
|
||||
Size=16
|
BIN
files/launcher/icons/tango/video-display.png
Normal file
After Width: | Height: | Size: 2.5 KiB |
BIN
files/launcher/images/clear.png
Normal file
After Width: | Height: | Size: 590 B |
BIN
files/launcher/images/down.png
Normal file
After Width: | Height: | Size: 2.8 KiB |
BIN
files/launcher/images/openmw-header.png
Normal file
After Width: | Height: | Size: 63 KiB |
BIN
files/launcher/images/openmw-plugin.png
Normal file
After Width: | Height: | Size: 6.4 KiB |
BIN
files/launcher/images/openmw.ico
Normal file
After Width: | Height: | Size: 82 KiB |
BIN
files/launcher/images/openmw.png
Normal file
After Width: | Height: | Size: 59 KiB |
BIN
files/launcher/images/playpage-background.png
Normal file
After Width: | Height: | Size: 236 KiB |
21
files/launcher/launcher.qrc
Normal file
|
@ -0,0 +1,21 @@
|
|||
<!DOCTYPE RCC><RCC version="1.0">
|
||||
<qresource prefix="images">
|
||||
<file alias="clear.png">images/clear.png</file>
|
||||
<file alias="down.png">images/down.png</file>
|
||||
<file alias="openmw.png">images/openmw.png</file>
|
||||
<file alias="openmw-plugin.png">images/openmw-plugin.png</file>
|
||||
<file alias="openmw-header.png">images/openmw-header.png</file>
|
||||
<file alias="playpage-background.png">images/playpage-background.png</file>
|
||||
</qresource>
|
||||
<qresource prefix="icons/tango">
|
||||
<file alias="index.theme">icons/tango/index.theme</file>
|
||||
<file alias="video-display.png">icons/tango/video-display.png</file>
|
||||
<file alias="16x16/document-new.png">icons/tango/document-new.png</file>
|
||||
<file alias="16x16/edit-copy.png">icons/tango/edit-copy.png</file>
|
||||
<file alias="16x16/edit-delete.png">icons/tango/edit-delete.png</file>
|
||||
<file alias="16x16/go-bottom.png">icons/tango/go-bottom.png</file>
|
||||
<file alias="16x16/go-down.png">icons/tango/go-down.png</file>
|
||||
<file alias="16x16/go-top.png">icons/tango/go-top.png</file>
|
||||
<file alias="16x16/go-up.png">icons/tango/go-up.png</file>
|
||||
</qresource>
|
||||
</RCC>
|
1
files/launcher/launcher.rc
Normal file
|
@ -0,0 +1 @@
|
|||
IDI_ICON1 ICON DISCARDABLE "images/openmw.ico"
|
30
files/mac/Info.plist
Normal file
|
@ -0,0 +1,30 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleIconFile</key>
|
||||
<string>OpenMW.icns</string>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>English</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>omwlauncher</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleLongVersionString</key>
|
||||
<string></string>
|
||||
<key>CFBundleName</key>
|
||||
<string>OpenMW</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>${OPENMW_VERSION}</string>
|
||||
<key>CSResourcesFileMapped</key>
|
||||
<true/>
|
||||
<key>LSRequiresCarbon</key>
|
||||
<true/>
|
||||
<key>NSHumanReadableCopyright</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</plist>
|
BIN
files/mac/openmw.icns
Normal file
39
files/materials/atmosphere.shader
Normal file
|
@ -0,0 +1,39 @@
|
|||
#include "core.h"
|
||||
|
||||
#ifdef SH_VERTEX_SHADER
|
||||
|
||||
SH_BEGIN_PROGRAM
|
||||
shUniform(float4x4, view) @shAutoConstant(view, view_matrix)
|
||||
shUniform(float4x4, projection) @shAutoConstant(projection, projection_matrix)
|
||||
|
||||
shOutput(float, alphaFade)
|
||||
|
||||
SH_START_PROGRAM
|
||||
{
|
||||
float4x4 viewFixed = view;
|
||||
#if !SH_GLSL
|
||||
viewFixed[0][3] = 0;
|
||||
viewFixed[1][3] = 0;
|
||||
viewFixed[2][3] = 0;
|
||||
#else
|
||||
viewFixed[3][0] = 0;
|
||||
viewFixed[3][1] = 0;
|
||||
viewFixed[3][2] = 0;
|
||||
#endif
|
||||
shOutputPosition = shMatrixMult(projection, shMatrixMult(viewFixed, shInputPosition));
|
||||
alphaFade = shInputPosition.z < 150.0 ? 0.0 : 1.0;
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
SH_BEGIN_PROGRAM
|
||||
shInput(float, alphaFade)
|
||||
shUniform(float4, atmosphereColour) @shSharedParameter(atmosphereColour)
|
||||
shUniform(float4, horizonColour) @shSharedParameter(horizonColour, horizonColour)
|
||||
|
||||
SH_START_PROGRAM
|
||||
{
|
||||
shOutputColour(0) = alphaFade * atmosphereColour + (1.f - alphaFade) * horizonColour;
|
||||
}
|
||||
|
||||
#endif
|
15
files/materials/atmosphere.shaderset
Normal file
|
@ -0,0 +1,15 @@
|
|||
shader_set atmosphere_vertex
|
||||
{
|
||||
source atmosphere.shader
|
||||
type vertex
|
||||
profiles_cg vs_2_0 arbvp1
|
||||
profiles_hlsl vs_2_0
|
||||
}
|
||||
|
||||
shader_set atmosphere_fragment
|
||||
{
|
||||
source atmosphere.shader
|
||||
type fragment
|
||||
profiles_cg ps_2_x ps_2_0 ps arbfp1
|
||||
profiles_hlsl ps_2_0
|
||||
}
|
53
files/materials/clouds.shader
Normal file
|
@ -0,0 +1,53 @@
|
|||
#include "core.h"
|
||||
|
||||
#ifdef SH_VERTEX_SHADER
|
||||
|
||||
SH_BEGIN_PROGRAM
|
||||
shUniform(float4x4, view) @shAutoConstant(view, view_matrix)
|
||||
shUniform(float4x4, projection) @shAutoConstant(projection, projection_matrix)
|
||||
shVertexInput(float2, uv0)
|
||||
shOutput(float2, UV)
|
||||
shOutput(float, alphaFade)
|
||||
|
||||
SH_START_PROGRAM
|
||||
{
|
||||
float4x4 viewFixed = view;
|
||||
#if !SH_GLSL
|
||||
viewFixed[0][3] = 0;
|
||||
viewFixed[1][3] = 0;
|
||||
viewFixed[2][3] = 0;
|
||||
#else
|
||||
viewFixed[3][0] = 0;
|
||||
viewFixed[3][1] = 0;
|
||||
viewFixed[3][2] = 0;
|
||||
#endif
|
||||
shOutputPosition = shMatrixMult(projection, shMatrixMult(viewFixed, shInputPosition));
|
||||
UV = uv0;
|
||||
alphaFade = (shInputPosition.z <= 200.f) ? ((shInputPosition.z <= 100.f) ? 0.0 : 0.25) : 1.0;
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
SH_BEGIN_PROGRAM
|
||||
shInput(float2, UV)
|
||||
shInput(float, alphaFade)
|
||||
|
||||
shSampler2D(diffuseMap1)
|
||||
shSampler2D(diffuseMap2)
|
||||
|
||||
shUniform(float, cloudBlendFactor) @shSharedParameter(cloudBlendFactor)
|
||||
shUniform(float, cloudAnimationTimer) @shSharedParameter(cloudAnimationTimer)
|
||||
shUniform(float, cloudOpacity) @shSharedParameter(cloudOpacity)
|
||||
shUniform(float3, cloudColour) @shSharedParameter(cloudColour)
|
||||
|
||||
SH_START_PROGRAM
|
||||
{
|
||||
// Scroll in y direction
|
||||
float2 scrolledUV = UV + float2(0,1) * cloudAnimationTimer * 0.003;
|
||||
|
||||
float4 albedo = shSample(diffuseMap1, scrolledUV) * (1-cloudBlendFactor) + shSample(diffuseMap2, scrolledUV) * cloudBlendFactor;
|
||||
|
||||
shOutputColour(0) = float4(cloudColour, 1) * albedo * float4(1,1,1, cloudOpacity * alphaFade);
|
||||
}
|
||||
|
||||
#endif
|
15
files/materials/clouds.shaderset
Normal file
|
@ -0,0 +1,15 @@
|
|||
shader_set clouds_vertex
|
||||
{
|
||||
source clouds.shader
|
||||
type vertex
|
||||
profiles_cg vs_2_0 arbvp1
|
||||
profiles_hlsl vs_2_0
|
||||
}
|
||||
|
||||
shader_set clouds_fragment
|
||||
{
|
||||
source clouds.shader
|
||||
type fragment
|
||||
profiles_cg ps_2_x ps_2_0 ps arbfp1
|
||||
profiles_hlsl ps_2_0
|
||||
}
|
181
files/materials/core.h
Normal file
|
@ -0,0 +1,181 @@
|
|||
#if SH_HLSL == 1 || SH_CG == 1
|
||||
|
||||
#define shTexture2D sampler2D
|
||||
#define shSample(tex, coord) tex2D(tex, coord)
|
||||
#define shCubicSample(tex, coord) texCUBE(tex, coord)
|
||||
#define shLerp(a, b, t) lerp(a, b, t)
|
||||
#define shSaturate(a) saturate(a)
|
||||
|
||||
#define shSampler2D(name) , uniform sampler2D name : register(s@shCounter(0)) @shUseSampler(name)
|
||||
|
||||
#define shSamplerCube(name) , uniform samplerCUBE name : register(s@shCounter(0)) @shUseSampler(name)
|
||||
|
||||
#define shMatrixMult(m, v) mul(m, v)
|
||||
|
||||
#define shUniform(type, name) , uniform type name
|
||||
|
||||
#define shTangentInput(type) , in type tangent : TANGENT
|
||||
#define shVertexInput(type, name) , in type name : TEXCOORD@shCounter(1)
|
||||
#define shInput(type, name) , in type name : TEXCOORD@shCounter(1)
|
||||
#define shOutput(type, name) , out type name : TEXCOORD@shCounter(2)
|
||||
|
||||
#define shNormalInput(type) , in type normal : NORMAL
|
||||
|
||||
#define shColourInput(type) , in type colour : COLOR
|
||||
|
||||
#define shFract(val) frac(val)
|
||||
|
||||
#ifdef SH_VERTEX_SHADER
|
||||
|
||||
#define shOutputPosition oPosition
|
||||
#define shInputPosition iPosition
|
||||
|
||||
|
||||
#define SH_BEGIN_PROGRAM \
|
||||
void main( \
|
||||
float4 iPosition : POSITION \
|
||||
, out float4 oPosition : POSITION
|
||||
|
||||
#define SH_START_PROGRAM \
|
||||
) \
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef SH_FRAGMENT_SHADER
|
||||
|
||||
#define shOutputColour(num) oColor##num
|
||||
|
||||
#define shDeclareMrtOutput(num) , out float4 oColor##num : COLOR##num
|
||||
|
||||
#define SH_BEGIN_PROGRAM \
|
||||
void main( \
|
||||
out float4 oColor0 : COLOR
|
||||
|
||||
#define SH_START_PROGRAM \
|
||||
) \
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
#if SH_GLSL == 1 || SH_GLSLES == 1
|
||||
|
||||
#define shFract(val) fract(val)
|
||||
|
||||
#if SH_GLSLES == 1
|
||||
@version 100
|
||||
#else
|
||||
@version 120
|
||||
#endif
|
||||
|
||||
#if SH_GLSLES == 1 && SH_FRAGMENT_SHADER
|
||||
precision mediump int;
|
||||
precision mediump float;
|
||||
#endif
|
||||
|
||||
#define float2 vec2
|
||||
#define float3 vec3
|
||||
#define float4 vec4
|
||||
#define int2 ivec2
|
||||
#define int3 ivec3
|
||||
#define int4 ivec4
|
||||
#define shTexture2D sampler2D
|
||||
#define shSample(tex, coord) texture2D(tex, coord)
|
||||
#define shCubicSample(tex, coord) textureCube(tex, coord)
|
||||
#define shLerp(a, b, t) mix(a, b, t)
|
||||
#define shSaturate(a) clamp(a, 0.0, 1.0)
|
||||
|
||||
#define shUniform(type, name) uniform type name;
|
||||
|
||||
#define shSampler2D(name) uniform sampler2D name; @shUseSampler(name)
|
||||
|
||||
#define shSamplerCube(name) uniform samplerCube name; @shUseSampler(name)
|
||||
|
||||
#define shMatrixMult(m, v) (m * v)
|
||||
|
||||
#define shOutputPosition gl_Position
|
||||
|
||||
#define float4x4 mat4
|
||||
#define float3x3 mat3
|
||||
|
||||
// GLSL 1.3
|
||||
#if 0
|
||||
|
||||
// automatically recognized by ogre when the input name equals this
|
||||
#define shInputPosition vertex
|
||||
|
||||
#define shOutputColour(num) oColor##num
|
||||
|
||||
#define shTangentInput(type) in type tangent;
|
||||
#define shVertexInput(type, name) in type name;
|
||||
#define shInput(type, name) in type name;
|
||||
#define shOutput(type, name) out type name;
|
||||
|
||||
// automatically recognized by ogre when the input name equals this
|
||||
#define shNormalInput(type) in type normal;
|
||||
#define shColourInput(type) in type colour;
|
||||
|
||||
#ifdef SH_VERTEX_SHADER
|
||||
|
||||
#define SH_BEGIN_PROGRAM \
|
||||
in float4 vertex;
|
||||
#define SH_START_PROGRAM \
|
||||
void main(void)
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef SH_FRAGMENT_SHADER
|
||||
|
||||
#define shDeclareMrtOutput(num) out vec4 oColor##num;
|
||||
|
||||
#define SH_BEGIN_PROGRAM \
|
||||
out float4 oColor0;
|
||||
#define SH_START_PROGRAM \
|
||||
void main(void)
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
// GLSL 1.2
|
||||
|
||||
#if 1
|
||||
|
||||
// automatically recognized by ogre when the input name equals this
|
||||
#define shInputPosition vertex
|
||||
|
||||
#define shOutputColour(num) gl_FragData[num]
|
||||
|
||||
#define shTangentInput(type) attribute type tangent;
|
||||
#define shVertexInput(type, name) attribute type name;
|
||||
#define shInput(type, name) varying type name;
|
||||
#define shOutput(type, name) varying type name;
|
||||
|
||||
// automatically recognized by ogre when the input name equals this
|
||||
#define shNormalInput(type) attribute type normal;
|
||||
#define shColourInput(type) attribute type colour;
|
||||
|
||||
#ifdef SH_VERTEX_SHADER
|
||||
|
||||
#define SH_BEGIN_PROGRAM \
|
||||
attribute vec4 vertex;
|
||||
#define SH_START_PROGRAM \
|
||||
void main(void)
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef SH_FRAGMENT_SHADER
|
||||
|
||||
#define shDeclareMrtOutput(num)
|
||||
|
||||
#define SH_BEGIN_PROGRAM
|
||||
|
||||
#define SH_START_PROGRAM \
|
||||
void main(void)
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
#endif
|
53
files/materials/moon.shader
Normal file
|
@ -0,0 +1,53 @@
|
|||
#include "core.h"
|
||||
|
||||
#ifdef SH_VERTEX_SHADER
|
||||
|
||||
SH_BEGIN_PROGRAM
|
||||
shUniform(float4x4, world) @shAutoConstant(world, world_matrix)
|
||||
shUniform(float4x4, view) @shAutoConstant(view, view_matrix)
|
||||
shUniform(float4x4, projection) @shAutoConstant(projection, projection_matrix)
|
||||
shVertexInput(float2, uv0)
|
||||
shOutput(float2, UV)
|
||||
|
||||
SH_START_PROGRAM
|
||||
{
|
||||
float4x4 viewFixed = view;
|
||||
#if !SH_GLSL
|
||||
viewFixed[0][3] = 0;
|
||||
viewFixed[1][3] = 0;
|
||||
viewFixed[2][3] = 0;
|
||||
#else
|
||||
viewFixed[3][0] = 0;
|
||||
viewFixed[3][1] = 0;
|
||||
viewFixed[3][2] = 0;
|
||||
#endif
|
||||
shOutputPosition = shMatrixMult(projection, shMatrixMult(viewFixed, shMatrixMult(world, shInputPosition)));
|
||||
UV = uv0;
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
SH_BEGIN_PROGRAM
|
||||
shSampler2D(diffuseMap)
|
||||
shSampler2D(alphaMap)
|
||||
shInput(float2, UV)
|
||||
shUniform(float4, materialDiffuse) @shAutoConstant(materialDiffuse, surface_diffuse_colour)
|
||||
shUniform(float4, materialEmissive) @shAutoConstant(materialEmissive, surface_emissive_colour)
|
||||
|
||||
shUniform(float4, atmosphereColour) @shSharedParameter(atmosphereColour)
|
||||
|
||||
SH_START_PROGRAM
|
||||
{
|
||||
|
||||
float4 tex = shSample(diffuseMap, UV);
|
||||
|
||||
shOutputColour(0) = float4(materialEmissive.xyz, 1) * tex;
|
||||
|
||||
shOutputColour(0).a = shSample(alphaMap, UV).a * materialDiffuse.a;
|
||||
|
||||
shOutputColour(0).rgb += (1-tex.a) * shOutputColour(0).a * atmosphereColour.rgb; //fill dark side of moon with atmosphereColour
|
||||
shOutputColour(0).rgb += (1-materialDiffuse.a) * atmosphereColour.rgb; //fade bump
|
||||
|
||||
}
|
||||
|
||||
#endif
|
15
files/materials/moon.shaderset
Normal file
|
@ -0,0 +1,15 @@
|
|||
shader_set moon_vertex
|
||||
{
|
||||
source moon.shader
|
||||
type vertex
|
||||
profiles_cg vs_2_0 arbvp1
|
||||
profiles_hlsl vs_2_0
|
||||
}
|
||||
|
||||
shader_set moon_fragment
|
||||
{
|
||||
source moon.shader
|
||||
type fragment
|
||||
profiles_cg ps_2_x ps_2_0 ps arbfp1
|
||||
profiles_hlsl ps_2_0
|
||||
}
|
25
files/materials/mygui.mat
Normal file
|
@ -0,0 +1,25 @@
|
|||
material MyGUI/NoTexture
|
||||
{
|
||||
pass
|
||||
{
|
||||
vertex_program mygui_vertex
|
||||
fragment_program mygui_fragment
|
||||
shader_properties
|
||||
{
|
||||
has_texture false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
material MyGUI/OneTexture
|
||||
{
|
||||
pass
|
||||
{
|
||||
vertex_program mygui_vertex
|
||||
fragment_program mygui_fragment
|
||||
shader_properties
|
||||
{
|
||||
has_texture true
|
||||
}
|
||||
}
|
||||
}
|
45
files/materials/mygui.shader
Normal file
|
@ -0,0 +1,45 @@
|
|||
#include "core.h"
|
||||
|
||||
#define TEXTURE @shPropertyBool(has_texture)
|
||||
|
||||
#ifdef SH_VERTEX_SHADER
|
||||
|
||||
SH_BEGIN_PROGRAM
|
||||
#if TEXTURE
|
||||
shVertexInput(float2, uv0)
|
||||
shOutput(float2, UV)
|
||||
#endif
|
||||
shColourInput(float4)
|
||||
shOutput(float4, colourPassthrough)
|
||||
|
||||
SH_START_PROGRAM
|
||||
{
|
||||
shOutputPosition = float4(shInputPosition.xyz, 1.f);
|
||||
#if TEXTURE
|
||||
UV.xy = uv0;
|
||||
#endif
|
||||
colourPassthrough = colour;
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
|
||||
SH_BEGIN_PROGRAM
|
||||
|
||||
#if TEXTURE
|
||||
shSampler2D(diffuseMap)
|
||||
shInput(float2, UV)
|
||||
#endif
|
||||
|
||||
shInput(float4, colourPassthrough)
|
||||
|
||||
SH_START_PROGRAM
|
||||
{
|
||||
#if TEXTURE
|
||||
shOutputColour(0) = shSample(diffuseMap, UV.xy) * colourPassthrough;
|
||||
#else
|
||||
shOutputColour(0) = colourPassthrough;
|
||||
#endif
|
||||
}
|
||||
|
||||
#endif
|
15
files/materials/mygui.shaderset
Normal file
|
@ -0,0 +1,15 @@
|
|||
shader_set mygui_vertex
|
||||
{
|
||||
source mygui.shader
|
||||
type vertex
|
||||
profiles_cg vs_2_0 vp40 arbvp1
|
||||
profiles_hlsl vs_3_0 vs_2_0
|
||||
}
|
||||
|
||||
shader_set mygui_fragment
|
||||
{
|
||||
source mygui.shader
|
||||
type fragment
|
||||
profiles_cg ps_3_0 ps_2_x ps_2_0 fp40 arbfp1
|
||||
profiles_hlsl ps_3_0 ps_2_0
|
||||
}
|
98
files/materials/objects.mat
Normal file
|
@ -0,0 +1,98 @@
|
|||
material openmw_objects_base
|
||||
{
|
||||
diffuse 1.0 1.0 1.0 1.0
|
||||
specular 0 0 0 0
|
||||
ambient 1.0 1.0 1.0
|
||||
emissive 0.0 0.0 0.0
|
||||
vertmode 0
|
||||
diffuseMap black.png
|
||||
normalMap
|
||||
emissiveMap
|
||||
use_emissive_map false
|
||||
use_detail_map false
|
||||
emissiveMapUVSet 0
|
||||
detailMapUVSet 0
|
||||
|
||||
scene_blend default
|
||||
depth_write default
|
||||
depth_check default
|
||||
alpha_rejection default
|
||||
transparent_sorting default
|
||||
polygon_mode default
|
||||
|
||||
pass
|
||||
{
|
||||
vertex_program openmw_objects_vertex
|
||||
fragment_program openmw_objects_fragment
|
||||
|
||||
shader_properties
|
||||
{
|
||||
vertexcolor_mode $vertmode
|
||||
normalMap $normalMap
|
||||
emissiveMapUVSet $emissiveMapUVSet
|
||||
detailMapUVSet $detailMapUVSet
|
||||
emissiveMap $emissiveMap
|
||||
detailMap $detailMap
|
||||
}
|
||||
|
||||
diffuse $diffuse
|
||||
specular $specular
|
||||
ambient $ambient
|
||||
emissive $emissive
|
||||
scene_blend $scene_blend
|
||||
alpha_rejection $alpha_rejection
|
||||
depth_write $depth_write
|
||||
depth_check $depth_check
|
||||
transparent_sorting $transparent_sorting
|
||||
polygon_mode $polygon_mode
|
||||
|
||||
texture_unit diffuseMap
|
||||
{
|
||||
direct_texture $diffuseMap
|
||||
create_in_ffp true
|
||||
tex_coord_set $emissiveMapUVSet
|
||||
}
|
||||
|
||||
texture_unit normalMap
|
||||
{
|
||||
direct_texture $normalMap
|
||||
// force automips here for now
|
||||
num_mipmaps 4
|
||||
}
|
||||
|
||||
texture_unit emissiveMap
|
||||
{
|
||||
create_in_ffp $use_emissive_map
|
||||
colour_op add
|
||||
direct_texture $emissiveMap
|
||||
tex_coord_set $emissiveMapUVSet
|
||||
}
|
||||
|
||||
texture_unit detailMap
|
||||
{
|
||||
create_in_ffp $use_detail_map
|
||||
colour_op_ex modulate_x2 src_current src_texture
|
||||
direct_texture $detailMap
|
||||
tex_coord_set $detailMapUVSet
|
||||
}
|
||||
|
||||
texture_unit shadowMap0
|
||||
{
|
||||
content_type shadow
|
||||
tex_address_mode clamp
|
||||
filtering none
|
||||
}
|
||||
texture_unit shadowMap1
|
||||
{
|
||||
content_type shadow
|
||||
tex_address_mode clamp
|
||||
filtering none
|
||||
}
|
||||
texture_unit shadowMap2
|
||||
{
|
||||
content_type shadow
|
||||
tex_address_mode clamp
|
||||
filtering none
|
||||
}
|
||||
}
|
||||
}
|
447
files/materials/objects.shader
Normal file
|
@ -0,0 +1,447 @@
|
|||
#include "core.h"
|
||||
|
||||
|
||||
#define FOG @shGlobalSettingBool(fog)
|
||||
|
||||
#define SHADOWS_PSSM @shGlobalSettingBool(shadows_pssm)
|
||||
#define SHADOWS @shGlobalSettingBool(shadows)
|
||||
|
||||
#if SHADOWS || SHADOWS_PSSM
|
||||
#include "shadows.h"
|
||||
#endif
|
||||
|
||||
#if FOG || SHADOWS_PSSM
|
||||
#define NEED_DEPTH
|
||||
#endif
|
||||
|
||||
#define NORMAL_MAP @shPropertyHasValue(normalMap)
|
||||
#define EMISSIVE_MAP @shPropertyHasValue(emissiveMap)
|
||||
#define DETAIL_MAP @shPropertyHasValue(detailMap)
|
||||
|
||||
// right now we support 2 UV sets max. implementing them is tedious, and we're probably not going to need more
|
||||
#define SECOND_UV_SET (@shPropertyString(emissiveMapUVSet) || @shPropertyString(detailMapUVSet))
|
||||
|
||||
// if normal mapping is enabled, we force pixel lighting
|
||||
#define VERTEX_LIGHTING (!@shPropertyHasValue(normalMap))
|
||||
|
||||
#define UNDERWATER @shGlobalSettingBool(render_refraction)
|
||||
|
||||
#define VERTEXCOLOR_MODE @shPropertyString(vertexcolor_mode)
|
||||
|
||||
#define VIEWPROJ_FIX @shGlobalSettingBool(viewproj_fix)
|
||||
|
||||
#ifdef SH_VERTEX_SHADER
|
||||
|
||||
// ------------------------------------- VERTEX ---------------------------------------
|
||||
|
||||
SH_BEGIN_PROGRAM
|
||||
shUniform(float4x4, wvp) @shAutoConstant(wvp, worldviewproj_matrix)
|
||||
|
||||
shUniform(float4x4, textureMatrix0) @shAutoConstant(textureMatrix0, texture_matrix, 0)
|
||||
|
||||
#if (VIEWPROJ_FIX) || (SHADOWS)
|
||||
shUniform(float4x4, worldMatrix) @shAutoConstant(worldMatrix, world_matrix)
|
||||
#endif
|
||||
|
||||
#if VIEWPROJ_FIX
|
||||
shUniform(float4, vpRow2Fix) @shSharedParameter(vpRow2Fix, vpRow2Fix)
|
||||
shUniform(float4x4, vpMatrix) @shAutoConstant(vpMatrix, viewproj_matrix)
|
||||
#endif
|
||||
|
||||
shVertexInput(float2, uv0)
|
||||
#if SECOND_UV_SET
|
||||
shVertexInput(float2, uv1)
|
||||
#endif
|
||||
shOutput(float4, UV)
|
||||
|
||||
shNormalInput(float4)
|
||||
|
||||
#if NORMAL_MAP
|
||||
shTangentInput(float4)
|
||||
shOutput(float3, tangentPassthrough)
|
||||
#endif
|
||||
|
||||
#if !VERTEX_LIGHTING
|
||||
shOutput(float3, normalPassthrough)
|
||||
#endif
|
||||
|
||||
#ifdef NEED_DEPTH
|
||||
shOutput(float, depthPassthrough)
|
||||
#endif
|
||||
|
||||
shOutput(float3, objSpacePositionPassthrough)
|
||||
|
||||
#if VERTEXCOLOR_MODE != 0
|
||||
shColourInput(float4)
|
||||
#endif
|
||||
|
||||
#if VERTEXCOLOR_MODE != 0 && !VERTEX_LIGHTING
|
||||
shOutput(float4, colourPassthrough)
|
||||
#endif
|
||||
|
||||
#if VERTEX_LIGHTING
|
||||
shUniform(float4, lightPosition[@shGlobalSettingString(num_lights)]) @shAutoConstant(lightPosition, light_position_view_space_array, @shGlobalSettingString(num_lights))
|
||||
shUniform(float4, lightDiffuse[@shGlobalSettingString(num_lights)]) @shAutoConstant(lightDiffuse, light_diffuse_colour_array, @shGlobalSettingString(num_lights))
|
||||
shUniform(float4, lightAttenuation[@shGlobalSettingString(num_lights)]) @shAutoConstant(lightAttenuation, light_attenuation_array, @shGlobalSettingString(num_lights))
|
||||
shUniform(float4, lightAmbient) @shAutoConstant(lightAmbient, ambient_light_colour)
|
||||
shUniform(float4x4, worldView) @shAutoConstant(worldView, worldview_matrix)
|
||||
#if VERTEXCOLOR_MODE != 2
|
||||
shUniform(float4, materialAmbient) @shAutoConstant(materialAmbient, surface_ambient_colour)
|
||||
#endif
|
||||
#if VERTEXCOLOR_MODE != 2
|
||||
shUniform(float4, materialDiffuse) @shAutoConstant(materialDiffuse, surface_diffuse_colour)
|
||||
#endif
|
||||
#if VERTEXCOLOR_MODE != 1
|
||||
shUniform(float4, materialEmissive) @shAutoConstant(materialEmissive, surface_emissive_colour)
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
#if SHADOWS
|
||||
shOutput(float4, lightSpacePos0)
|
||||
shUniform(float4x4, texViewProjMatrix0) @shAutoConstant(texViewProjMatrix0, texture_viewproj_matrix)
|
||||
#endif
|
||||
|
||||
#if SHADOWS_PSSM
|
||||
@shForeach(3)
|
||||
shOutput(float4, lightSpacePos@shIterator)
|
||||
shUniform(float4x4, texViewProjMatrix@shIterator) @shAutoConstant(texViewProjMatrix@shIterator, texture_viewproj_matrix, @shIterator)
|
||||
@shEndForeach
|
||||
#if !VIEWPROJ_FIX
|
||||
shUniform(float4x4, worldMatrix) @shAutoConstant(worldMatrix, world_matrix)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if VERTEX_LIGHTING
|
||||
shOutput(float4, lightResult)
|
||||
shOutput(float3, directionalResult)
|
||||
#endif
|
||||
SH_START_PROGRAM
|
||||
{
|
||||
shOutputPosition = shMatrixMult(wvp, shInputPosition);
|
||||
|
||||
UV.xy = shMatrixMult (textureMatrix0, float4(uv0,0,1)).xy;
|
||||
#if SECOND_UV_SET
|
||||
UV.zw = uv1;
|
||||
#endif
|
||||
|
||||
#if NORMAL_MAP
|
||||
tangentPassthrough = tangent.xyz;
|
||||
#endif
|
||||
#if !VERTEX_LIGHTING
|
||||
normalPassthrough = normal.xyz;
|
||||
#endif
|
||||
#if VERTEXCOLOR_MODE != 0 && !VERTEX_LIGHTING
|
||||
colourPassthrough = colour;
|
||||
#endif
|
||||
|
||||
#ifdef NEED_DEPTH
|
||||
|
||||
|
||||
#if VIEWPROJ_FIX
|
||||
float4x4 vpFixed = vpMatrix;
|
||||
#if !SH_GLSL
|
||||
vpFixed[2] = vpRow2Fix;
|
||||
#else
|
||||
vpFixed[0][2] = vpRow2Fix.x;
|
||||
vpFixed[1][2] = vpRow2Fix.y;
|
||||
vpFixed[2][2] = vpRow2Fix.z;
|
||||
vpFixed[3][2] = vpRow2Fix.w;
|
||||
#endif
|
||||
|
||||
float4x4 fixedWVP = shMatrixMult(vpFixed, worldMatrix);
|
||||
|
||||
depthPassthrough = shMatrixMult(fixedWVP, shInputPosition).z;
|
||||
#else
|
||||
depthPassthrough = shOutputPosition.z;
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
objSpacePositionPassthrough = shInputPosition.xyz;
|
||||
|
||||
#if SHADOWS
|
||||
lightSpacePos0 = shMatrixMult(texViewProjMatrix0, shMatrixMult(worldMatrix, shInputPosition));
|
||||
#endif
|
||||
#if SHADOWS_PSSM
|
||||
float4 wPos = shMatrixMult(worldMatrix, shInputPosition);
|
||||
@shForeach(3)
|
||||
lightSpacePos@shIterator = shMatrixMult(texViewProjMatrix@shIterator, wPos);
|
||||
@shEndForeach
|
||||
#endif
|
||||
|
||||
|
||||
#if VERTEX_LIGHTING
|
||||
float3 viewPos = shMatrixMult(worldView, shInputPosition).xyz;
|
||||
float3 viewNormal = normalize(shMatrixMult(worldView, float4(normal.xyz, 0)).xyz);
|
||||
|
||||
float3 lightDir;
|
||||
float d;
|
||||
lightResult = float4(0,0,0,1);
|
||||
@shForeach(@shGlobalSettingString(num_lights))
|
||||
lightDir = lightPosition[@shIterator].xyz - (viewPos * lightPosition[@shIterator].w);
|
||||
d = length(lightDir);
|
||||
lightDir = normalize(lightDir);
|
||||
|
||||
|
||||
#if VERTEXCOLOR_MODE == 2
|
||||
lightResult.xyz += colour.xyz * lightDiffuse[@shIterator].xyz
|
||||
* shSaturate(1.0 / ((lightAttenuation[@shIterator].y) + (lightAttenuation[@shIterator].z * d) + (lightAttenuation[@shIterator].w * d * d)))
|
||||
* max(dot(viewNormal.xyz, lightDir), 0);
|
||||
#else
|
||||
lightResult.xyz += materialDiffuse.xyz * lightDiffuse[@shIterator].xyz
|
||||
* shSaturate(1.0 / ((lightAttenuation[@shIterator].y) + (lightAttenuation[@shIterator].z * d) + (lightAttenuation[@shIterator].w * d * d)))
|
||||
* max(dot(viewNormal.xyz, lightDir), 0);
|
||||
#endif
|
||||
|
||||
#if @shIterator == 0
|
||||
directionalResult = lightResult.xyz;
|
||||
#endif
|
||||
|
||||
@shEndForeach
|
||||
|
||||
|
||||
#if VERTEXCOLOR_MODE == 2
|
||||
lightResult.xyz += lightAmbient.xyz * colour.xyz + materialEmissive.xyz;
|
||||
lightResult.a *= colour.a;
|
||||
#endif
|
||||
#if VERTEXCOLOR_MODE == 1
|
||||
lightResult.xyz += lightAmbient.xyz * materialAmbient.xyz + colour.xyz;
|
||||
#endif
|
||||
#if VERTEXCOLOR_MODE == 0
|
||||
lightResult.xyz += lightAmbient.xyz * materialAmbient.xyz + materialEmissive.xyz;
|
||||
#endif
|
||||
|
||||
#if VERTEXCOLOR_MODE != 2
|
||||
lightResult.a *= materialDiffuse.a;
|
||||
#endif
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
// ----------------------------------- FRAGMENT ------------------------------------------
|
||||
|
||||
#if UNDERWATER
|
||||
#include "underwater.h"
|
||||
#endif
|
||||
|
||||
SH_BEGIN_PROGRAM
|
||||
shSampler2D(diffuseMap)
|
||||
|
||||
#if NORMAL_MAP
|
||||
shSampler2D(normalMap)
|
||||
#endif
|
||||
|
||||
#if EMISSIVE_MAP
|
||||
shSampler2D(emissiveMap)
|
||||
#endif
|
||||
|
||||
#if DETAIL_MAP
|
||||
shSampler2D(detailMap)
|
||||
#endif
|
||||
|
||||
shInput(float4, UV)
|
||||
|
||||
#if NORMAL_MAP
|
||||
shInput(float3, tangentPassthrough)
|
||||
#endif
|
||||
#if !VERTEX_LIGHTING
|
||||
shInput(float3, normalPassthrough)
|
||||
#endif
|
||||
|
||||
#ifdef NEED_DEPTH
|
||||
shInput(float, depthPassthrough)
|
||||
#endif
|
||||
|
||||
shInput(float3, objSpacePositionPassthrough)
|
||||
|
||||
#if VERTEXCOLOR_MODE != 0 && !VERTEX_LIGHTING
|
||||
shInput(float4, colourPassthrough)
|
||||
#endif
|
||||
|
||||
#if FOG
|
||||
shUniform(float3, fogColour) @shAutoConstant(fogColour, fog_colour)
|
||||
shUniform(float4, fogParams) @shAutoConstant(fogParams, fog_params)
|
||||
#endif
|
||||
|
||||
#if SHADOWS
|
||||
shInput(float4, lightSpacePos0)
|
||||
shSampler2D(shadowMap0)
|
||||
shUniform(float2, invShadowmapSize0) @shAutoConstant(invShadowmapSize0, inverse_texture_size, 1)
|
||||
#endif
|
||||
#if SHADOWS_PSSM
|
||||
@shForeach(3)
|
||||
shInput(float4, lightSpacePos@shIterator)
|
||||
shSampler2D(shadowMap@shIterator)
|
||||
shUniform(float2, invShadowmapSize@shIterator) @shAutoConstant(invShadowmapSize@shIterator, inverse_texture_size, @shIterator(1))
|
||||
@shEndForeach
|
||||
shUniform(float3, pssmSplitPoints) @shSharedParameter(pssmSplitPoints)
|
||||
#endif
|
||||
|
||||
#if SHADOWS || SHADOWS_PSSM
|
||||
shUniform(float4, shadowFar_fadeStart) @shSharedParameter(shadowFar_fadeStart)
|
||||
#endif
|
||||
|
||||
#if (UNDERWATER) || (FOG)
|
||||
shUniform(float4x4, worldMatrix) @shAutoConstant(worldMatrix, world_matrix)
|
||||
shUniform(float4, cameraPos) @shAutoConstant(cameraPos, camera_position)
|
||||
#endif
|
||||
|
||||
#if UNDERWATER
|
||||
shUniform(float, waterLevel) @shSharedParameter(waterLevel)
|
||||
shUniform(float, waterEnabled) @shSharedParameter(waterEnabled)
|
||||
#endif
|
||||
|
||||
#if VERTEX_LIGHTING
|
||||
shInput(float4, lightResult)
|
||||
shInput(float3, directionalResult)
|
||||
#else
|
||||
shUniform(float, lightCount) @shAutoConstant(lightCount, light_count)
|
||||
shUniform(float4, lightPosition[@shGlobalSettingString(num_lights)]) @shAutoConstant(lightPosition, light_position_view_space_array, @shGlobalSettingString(num_lights))
|
||||
shUniform(float4, lightDiffuse[@shGlobalSettingString(num_lights)]) @shAutoConstant(lightDiffuse, light_diffuse_colour_array, @shGlobalSettingString(num_lights))
|
||||
shUniform(float4, lightAttenuation[@shGlobalSettingString(num_lights)]) @shAutoConstant(lightAttenuation, light_attenuation_array, @shGlobalSettingString(num_lights))
|
||||
shUniform(float4, lightAmbient) @shAutoConstant(lightAmbient, ambient_light_colour)
|
||||
shUniform(float4x4, worldView) @shAutoConstant(worldView, worldview_matrix)
|
||||
#if VERTEXCOLOR_MODE != 2
|
||||
shUniform(float4, materialAmbient) @shAutoConstant(materialAmbient, surface_ambient_colour)
|
||||
#endif
|
||||
#if VERTEXCOLOR_MODE != 2
|
||||
shUniform(float4, materialDiffuse) @shAutoConstant(materialDiffuse, surface_diffuse_colour)
|
||||
#endif
|
||||
#if VERTEXCOLOR_MODE != 1
|
||||
shUniform(float4, materialEmissive) @shAutoConstant(materialEmissive, surface_emissive_colour)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
SH_START_PROGRAM
|
||||
{
|
||||
shOutputColour(0) = shSample(diffuseMap, UV.xy);
|
||||
|
||||
#if DETAIL_MAP
|
||||
#if @shPropertyString(detailMapUVSet)
|
||||
shOutputColour(0) *= shSample(detailMap, UV.zw)*2;
|
||||
#else
|
||||
shOutputColour(0) *= shSample(detailMap, UV.xy)*2;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if NORMAL_MAP
|
||||
float3 normal = normalPassthrough;
|
||||
float3 binormal = cross(tangentPassthrough.xyz, normal.xyz);
|
||||
float3x3 tbn = float3x3(tangentPassthrough.xyz, binormal, normal.xyz);
|
||||
|
||||
#if SH_GLSL
|
||||
tbn = transpose(tbn);
|
||||
#endif
|
||||
|
||||
float3 TSnormal = shSample(normalMap, UV.xy).xyz * 2 - 1;
|
||||
|
||||
normal = normalize (shMatrixMult( transpose(tbn), TSnormal ));
|
||||
#endif
|
||||
|
||||
#if !VERTEX_LIGHTING
|
||||
float3 viewPos = shMatrixMult(worldView, float4(objSpacePositionPassthrough,1)).xyz;
|
||||
float3 viewNormal = normalize(shMatrixMult(worldView, float4(normal.xyz, 0)).xyz);
|
||||
|
||||
float3 lightDir;
|
||||
float d;
|
||||
float4 lightResult = float4(0,0,0,1);
|
||||
@shForeach(@shGlobalSettingString(num_lights))
|
||||
lightDir = lightPosition[@shIterator].xyz - (viewPos * lightPosition[@shIterator].w);
|
||||
d = length(lightDir);
|
||||
lightDir = normalize(lightDir);
|
||||
|
||||
#if VERTEXCOLOR_MODE == 2
|
||||
lightResult.xyz += colourPassthrough.xyz * lightDiffuse[@shIterator].xyz
|
||||
* shSaturate(1.0 / ((lightAttenuation[@shIterator].y) + (lightAttenuation[@shIterator].z * d) + (lightAttenuation[@shIterator].w * d * d)))
|
||||
* max(dot(viewNormal.xyz, lightDir), 0);
|
||||
#else
|
||||
lightResult.xyz += materialDiffuse.xyz * lightDiffuse[@shIterator].xyz
|
||||
* shSaturate(1.0 / ((lightAttenuation[@shIterator].y) + (lightAttenuation[@shIterator].z * d) + (lightAttenuation[@shIterator].w * d * d)))
|
||||
* max(dot(viewNormal.xyz, lightDir), 0);
|
||||
#endif
|
||||
|
||||
#if @shIterator == 0
|
||||
float3 directionalResult = lightResult.xyz;
|
||||
#endif
|
||||
|
||||
@shEndForeach
|
||||
|
||||
|
||||
#if VERTEXCOLOR_MODE == 2
|
||||
lightResult.xyz += lightAmbient.xyz * colourPassthrough.xyz + materialEmissive.xyz;
|
||||
lightResult.a *= colourPassthrough.a;
|
||||
#endif
|
||||
#if VERTEXCOLOR_MODE == 1
|
||||
lightResult.xyz += lightAmbient.xyz * materialAmbient.xyz + colourPassthrough.xyz;
|
||||
#endif
|
||||
#if VERTEXCOLOR_MODE == 0
|
||||
lightResult.xyz += lightAmbient.xyz * materialAmbient.xyz + materialEmissive.xyz;
|
||||
#endif
|
||||
|
||||
#if VERTEXCOLOR_MODE != 2
|
||||
lightResult.a *= materialDiffuse.a;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// shadows only for the first (directional) light
|
||||
#if SHADOWS
|
||||
float shadow = depthShadowPCF (shadowMap0, lightSpacePos0, invShadowmapSize0);
|
||||
#endif
|
||||
#if SHADOWS_PSSM
|
||||
float shadow = pssmDepthShadow (lightSpacePos0, invShadowmapSize0, shadowMap0, lightSpacePos1, invShadowmapSize1, shadowMap1, lightSpacePos2, invShadowmapSize2, shadowMap2, depthPassthrough, pssmSplitPoints);
|
||||
#endif
|
||||
|
||||
#if SHADOWS || SHADOWS_PSSM
|
||||
float fadeRange = shadowFar_fadeStart.x - shadowFar_fadeStart.y;
|
||||
float fade = 1-((depthPassthrough - shadowFar_fadeStart.y) / fadeRange);
|
||||
shadow = (depthPassthrough > shadowFar_fadeStart.x) ? 1.0 : ((depthPassthrough > shadowFar_fadeStart.y) ? 1.0-((1.0-shadow)*fade) : shadow);
|
||||
#endif
|
||||
|
||||
#if !SHADOWS && !SHADOWS_PSSM
|
||||
float shadow = 1.0;
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#if (UNDERWATER) || (FOG)
|
||||
float3 worldPos = shMatrixMult(worldMatrix, float4(objSpacePositionPassthrough,1)).xyz;
|
||||
#endif
|
||||
|
||||
#if UNDERWATER
|
||||
float3 waterEyePos = intercept(worldPos, cameraPos.xyz - worldPos, float3(0,0,1), waterLevel);
|
||||
#endif
|
||||
|
||||
#if SHADOWS || SHADOWS_PSSM
|
||||
shOutputColour(0) *= (lightResult - float4(directionalResult * (1.0-shadow),0));
|
||||
#else
|
||||
shOutputColour(0) *= lightResult;
|
||||
#endif
|
||||
|
||||
#if FOG
|
||||
float fogValue = shSaturate((depthPassthrough - fogParams.y) * fogParams.w);
|
||||
|
||||
|
||||
#if UNDERWATER
|
||||
shOutputColour(0).xyz = shLerp (shOutputColour(0).xyz, UNDERWATER_COLOUR, shSaturate(length(waterEyePos-worldPos) / VISIBILITY));
|
||||
#else
|
||||
shOutputColour(0).xyz = shLerp (shOutputColour(0).xyz, fogColour, fogValue);
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
#if EMISSIVE_MAP
|
||||
#if @shPropertyString(emissiveMapUVSet)
|
||||
shOutputColour(0).xyz += shSample(emissiveMap, UV.zw).xyz;
|
||||
#else
|
||||
shOutputColour(0).xyz += shSample(emissiveMap, UV.xy).xyz;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// prevent negative colour output (for example with negative lights)
|
||||
shOutputColour(0).xyz = max(shOutputColour(0).xyz, float3(0,0,0));
|
||||
}
|
||||
|
||||
#endif
|
15
files/materials/objects.shaderset
Normal file
|
@ -0,0 +1,15 @@
|
|||
shader_set openmw_objects_vertex
|
||||
{
|
||||
source objects.shader
|
||||
type vertex
|
||||
profiles_cg vs_2_0 vp40 arbvp1
|
||||
profiles_hlsl vs_3_0 vs_2_0
|
||||
}
|
||||
|
||||
shader_set openmw_objects_fragment
|
||||
{
|
||||
source objects.shader
|
||||
type fragment
|
||||
profiles_cg ps_3_0 ps_2_x ps_2_0 fp40 arbfp1
|
||||
profiles_hlsl ps_3_0 ps_2_0
|
||||
}
|
20
files/materials/openmw.configuration
Normal file
|
@ -0,0 +1,20 @@
|
|||
configuration water_reflection
|
||||
{
|
||||
shadows false
|
||||
shadows_pssm false
|
||||
viewproj_fix true
|
||||
}
|
||||
|
||||
configuration water_refraction
|
||||
{
|
||||
viewproj_fix true
|
||||
render_refraction true
|
||||
}
|
||||
|
||||
configuration local_map
|
||||
{
|
||||
fog false
|
||||
shadows false
|
||||
shadows_pssm false
|
||||
simple_water true
|
||||
}
|
22
files/materials/quad.mat
Normal file
|
@ -0,0 +1,22 @@
|
|||
material quad
|
||||
{
|
||||
depth_write on
|
||||
|
||||
pass
|
||||
{
|
||||
vertex_program transform_vertex
|
||||
fragment_program quad_fragment
|
||||
|
||||
depth_write $depth_write
|
||||
|
||||
texture_unit SceneBuffer
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
material quad_noDepthWrite
|
||||
{
|
||||
parent quad
|
||||
depth_write off
|
||||
}
|
25
files/materials/quad.shader
Normal file
|
@ -0,0 +1,25 @@
|
|||
#include "core.h"
|
||||
|
||||
#ifdef SH_VERTEX_SHADER
|
||||
|
||||
SH_BEGIN_PROGRAM
|
||||
shVertexInput(float2, uv0)
|
||||
shOutput(float2, UV)
|
||||
shUniform(float4x4, wvp) @shAutoConstant(wvp, worldviewproj_matrix)
|
||||
SH_START_PROGRAM
|
||||
{
|
||||
shOutputPosition = shMatrixMult(wvp, shInputPosition);
|
||||
UV = uv0;
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
SH_BEGIN_PROGRAM
|
||||
shInput(float2, UV)
|
||||
shSampler2D(SceneBuffer)
|
||||
SH_START_PROGRAM
|
||||
{
|
||||
shOutputColour(0) = shSample(SceneBuffer, UV);
|
||||
}
|
||||
|
||||
#endif
|
15
files/materials/quad.shaderset
Normal file
|
@ -0,0 +1,15 @@
|
|||
shader_set transform_vertex
|
||||
{
|
||||
source quad.shader
|
||||
type vertex
|
||||
profiles_cg vs_2_0 vp40 arbvp1
|
||||
profiles_hlsl vs_2_0
|
||||
}
|
||||
|
||||
shader_set quad_fragment
|
||||
{
|
||||
source quad.shader
|
||||
type fragment
|
||||
profiles_cg ps_2_x ps_2_0 ps fp40 arbfp1
|
||||
profiles_hlsl ps_2_0
|
||||
}
|
9
files/materials/selection.mat
Normal file
|
@ -0,0 +1,9 @@
|
|||
material SelectionColour
|
||||
{
|
||||
allow_fixed_function false
|
||||
pass
|
||||
{
|
||||
vertex_program selection_vertex
|
||||
fragment_program selection_fragment
|
||||
}
|
||||
}
|
24
files/materials/selection.shader
Normal file
|
@ -0,0 +1,24 @@
|
|||
#include "core.h"
|
||||
|
||||
#ifdef SH_VERTEX_SHADER
|
||||
|
||||
SH_BEGIN_PROGRAM
|
||||
shUniform(float4x4, wvp) @shAutoConstant(wvp, worldviewproj_matrix)
|
||||
|
||||
SH_START_PROGRAM
|
||||
{
|
||||
shOutputPosition = shMatrixMult(wvp, shInputPosition);
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
SH_BEGIN_PROGRAM
|
||||
shUniform(float4, colour) @shAutoConstant(colour, custom, 1)
|
||||
|
||||
SH_START_PROGRAM
|
||||
{
|
||||
shOutputColour(0) = colour;
|
||||
//shOutputColour(0) = float4(1,0,0,1);
|
||||
}
|
||||
|
||||
#endif
|
15
files/materials/selection.shaderset
Normal file
|
@ -0,0 +1,15 @@
|
|||
shader_set selection_vertex
|
||||
{
|
||||
source selection.shader
|
||||
type vertex
|
||||
profiles_cg vs_2_0 arbvp1
|
||||
profiles_hlsl vs_2_0
|
||||
}
|
||||
|
||||
shader_set selection_fragment
|
||||
{
|
||||
source selection.shader
|
||||
type fragment
|
||||
profiles_cg ps_2_x ps_2_0 ps arbfp1
|
||||
profiles_hlsl ps_2_0
|
||||
}
|
35
files/materials/shadowcaster.mat
Normal file
|
@ -0,0 +1,35 @@
|
|||
material openmw_shadowcaster_default
|
||||
{
|
||||
create_configuration Default
|
||||
allow_fixed_function false
|
||||
pass
|
||||
{
|
||||
fog_override true
|
||||
|
||||
vertex_program openmw_shadowcaster_vertex
|
||||
fragment_program openmw_shadowcaster_fragment
|
||||
|
||||
shader_properties
|
||||
{
|
||||
shadow_transparency true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
material openmw_shadowcaster_noalpha
|
||||
{
|
||||
create_configuration Default
|
||||
allow_fixed_function false
|
||||
pass
|
||||
{
|
||||
fog_override true
|
||||
|
||||
vertex_program openmw_shadowcaster_vertex
|
||||
fragment_program openmw_shadowcaster_fragment
|
||||
|
||||
shader_properties
|
||||
{
|
||||
shadow_transparency false
|
||||
}
|
||||
}
|
||||
}
|
55
files/materials/shadowcaster.shader
Normal file
|
@ -0,0 +1,55 @@
|
|||
#include "core.h"
|
||||
|
||||
#define ALPHA @shPropertyBool(shadow_transparency)
|
||||
|
||||
#ifdef SH_VERTEX_SHADER
|
||||
|
||||
SH_BEGIN_PROGRAM
|
||||
#if ALPHA
|
||||
shVertexInput(float2, uv0)
|
||||
shOutput(float2, UV)
|
||||
#endif
|
||||
shUniform(float4x4, wvp) @shAutoConstant(wvp, worldviewproj_matrix)
|
||||
shOutput(float2, depth)
|
||||
SH_START_PROGRAM
|
||||
{
|
||||
// this is the view space position
|
||||
shOutputPosition = shMatrixMult(wvp, shInputPosition);
|
||||
|
||||
// depth info for the fragment.
|
||||
depth.x = shOutputPosition.z;
|
||||
depth.y = shOutputPosition.w;
|
||||
|
||||
// clamp z to zero. seem to do the trick. :-/
|
||||
shOutputPosition.z = max(shOutputPosition.z, 0);
|
||||
|
||||
#if ALPHA
|
||||
UV = uv0;
|
||||
#endif
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
SH_BEGIN_PROGRAM
|
||||
#if ALPHA
|
||||
shInput(float2, UV)
|
||||
shSampler2D(texture1)
|
||||
#endif
|
||||
shInput(float2, depth)
|
||||
SH_START_PROGRAM
|
||||
{
|
||||
float finalDepth = depth.x / depth.y;
|
||||
|
||||
|
||||
#if ALPHA
|
||||
// use alpha channel of the first texture
|
||||
float alpha = shSample(texture1, UV).a;
|
||||
|
||||
if (alpha < 0.5)
|
||||
discard;
|
||||
#endif
|
||||
|
||||
shOutputColour(0) = float4(finalDepth, finalDepth, finalDepth, 1);
|
||||
}
|
||||
|
||||
#endif
|
15
files/materials/shadowcaster.shaderset
Normal file
|
@ -0,0 +1,15 @@
|
|||
shader_set openmw_shadowcaster_vertex
|
||||
{
|
||||
source shadowcaster.shader
|
||||
type vertex
|
||||
profiles_cg vs_2_0 arbvp1
|
||||
profiles_hlsl vs_2_0
|
||||
}
|
||||
|
||||
shader_set openmw_shadowcaster_fragment
|
||||
{
|
||||
source shadowcaster.shader
|
||||
type fragment
|
||||
profiles_cg ps_2_x ps_2_0 ps arbfp1
|
||||
profiles_hlsl ps_2_0
|
||||
}
|
51
files/materials/shadows.h
Normal file
|
@ -0,0 +1,51 @@
|
|||
|
||||
#define FIXED_BIAS 0.0003
|
||||
|
||||
float depthShadowPCF (shTexture2D shadowMap, float4 shadowMapPos, float2 offset)
|
||||
{
|
||||
shadowMapPos /= shadowMapPos.w;
|
||||
float3 o = float3(offset.xy, -offset.x) * 0.3;
|
||||
//float3 o = float3(0,0,0);
|
||||
float c = (shadowMapPos.z <= FIXED_BIAS + shSample(shadowMap, shadowMapPos.xy - o.xy).r) ? 1 : 0; // top left
|
||||
c += (shadowMapPos.z <= FIXED_BIAS + shSample(shadowMap, shadowMapPos.xy + o.xy).r) ? 1 : 0; // bottom right
|
||||
c += (shadowMapPos.z <= FIXED_BIAS + shSample(shadowMap, shadowMapPos.xy + o.zy).r) ? 1 : 0; // bottom left
|
||||
c += (shadowMapPos.z <= FIXED_BIAS + shSample(shadowMap, shadowMapPos.xy - o.zy).r) ? 1 : 0; // top right
|
||||
return c / 4;
|
||||
}
|
||||
|
||||
|
||||
|
||||
float pssmDepthShadow (
|
||||
|
||||
|
||||
float4 lightSpacePos0,
|
||||
float2 invShadowmapSize0,
|
||||
shTexture2D shadowMap0,
|
||||
|
||||
float4 lightSpacePos1,
|
||||
float2 invShadowmapSize1,
|
||||
shTexture2D shadowMap1,
|
||||
|
||||
float4 lightSpacePos2,
|
||||
float2 invShadowmapSize2,
|
||||
shTexture2D shadowMap2,
|
||||
|
||||
float depth,
|
||||
float3 pssmSplitPoints)
|
||||
|
||||
{
|
||||
float shadow;
|
||||
|
||||
float pcf1 = depthShadowPCF(shadowMap0, lightSpacePos0, invShadowmapSize0);
|
||||
float pcf2 = depthShadowPCF(shadowMap1, lightSpacePos1, invShadowmapSize1);
|
||||
float pcf3 = depthShadowPCF(shadowMap2, lightSpacePos2, invShadowmapSize2);
|
||||
|
||||
if (depth < pssmSplitPoints.x)
|
||||
shadow = pcf1;
|
||||
else if (depth < pssmSplitPoints.y)
|
||||
shadow = pcf2;
|
||||
else
|
||||
shadow = pcf3;
|
||||
|
||||
return shadow;
|
||||
}
|
140
files/materials/sky.mat
Normal file
|
@ -0,0 +1,140 @@
|
|||
material QueryTotalPixels
|
||||
{
|
||||
allow_fixed_function false
|
||||
pass
|
||||
{
|
||||
vertex_program sun_vertex
|
||||
fragment_program sun_fragment
|
||||
cull_hardware none
|
||||
polygon_mode_overrideable off
|
||||
depth_check off
|
||||
depth_write off
|
||||
colour_write off
|
||||
}
|
||||
}
|
||||
|
||||
material QueryVisiblePixels
|
||||
{
|
||||
allow_fixed_function false
|
||||
pass
|
||||
{
|
||||
vertex_program sun_vertex
|
||||
fragment_program sun_fragment
|
||||
cull_hardware none
|
||||
cull_software none
|
||||
polygon_mode_overrideable off
|
||||
depth_check on
|
||||
depth_write off
|
||||
colour_write off
|
||||
}
|
||||
}
|
||||
|
||||
material openmw_moon
|
||||
{
|
||||
allow_fixed_function false
|
||||
pass
|
||||
{
|
||||
vertex_program moon_vertex
|
||||
fragment_program moon_fragment
|
||||
cull_hardware none
|
||||
|
||||
polygon_mode_overrideable off
|
||||
depth_write off
|
||||
depth_check off
|
||||
scene_blend alpha_blend
|
||||
|
||||
texture_unit diffuseMap
|
||||
{
|
||||
texture_alias $texture
|
||||
}
|
||||
|
||||
texture_unit alphaMap
|
||||
{
|
||||
direct_texture textures\tx_secunda_full.dds
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
material openmw_clouds
|
||||
{
|
||||
allow_fixed_function false
|
||||
pass
|
||||
{
|
||||
vertex_program clouds_vertex
|
||||
fragment_program clouds_fragment
|
||||
|
||||
polygon_mode_overrideable off
|
||||
|
||||
scene_blend alpha_blend
|
||||
depth_write off
|
||||
|
||||
// second diffuse map is used for weather transitions
|
||||
texture_unit diffuseMap1
|
||||
{
|
||||
texture_alias cloud_texture_1
|
||||
}
|
||||
|
||||
texture_unit diffuseMap2
|
||||
{
|
||||
texture_alias cloud_texture_2
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
material openmw_atmosphere
|
||||
{
|
||||
allow_fixed_function false
|
||||
pass
|
||||
{
|
||||
vertex_program atmosphere_vertex
|
||||
fragment_program atmosphere_fragment
|
||||
|
||||
polygon_mode_overrideable off
|
||||
|
||||
depth_write off
|
||||
}
|
||||
}
|
||||
|
||||
material openmw_stars
|
||||
{
|
||||
allow_fixed_function false
|
||||
pass
|
||||
{
|
||||
vertex_program stars_vertex
|
||||
fragment_program stars_fragment
|
||||
|
||||
polygon_mode_overrideable off
|
||||
|
||||
depth_check off
|
||||
depth_write off
|
||||
scene_blend alpha_blend
|
||||
|
||||
texture_unit diffuseMap
|
||||
{
|
||||
direct_texture $texture
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// used for both sun and sun glare
|
||||
material openmw_sun
|
||||
{
|
||||
allow_fixed_function false
|
||||
pass
|
||||
{
|
||||
vertex_program sun_vertex
|
||||
fragment_program sun_fragment
|
||||
cull_hardware none
|
||||
|
||||
polygon_mode_overrideable off
|
||||
|
||||
depth_check off
|
||||
depth_write off
|
||||
scene_blend alpha_blend
|
||||
|
||||
texture_unit diffuseMap
|
||||
{
|
||||
direct_texture $texture
|
||||
}
|
||||
}
|
||||
}
|
47
files/materials/stars.shader
Normal file
|
@ -0,0 +1,47 @@
|
|||
#include "core.h"
|
||||
|
||||
#ifdef SH_VERTEX_SHADER
|
||||
|
||||
SH_BEGIN_PROGRAM
|
||||
shUniform(float4x4, view) @shAutoConstant(view, view_matrix)
|
||||
shUniform(float4x4, projection) @shAutoConstant(projection, projection_matrix)
|
||||
|
||||
shVertexInput(float2, uv0)
|
||||
shOutput(float2, UV)
|
||||
shOutput(float, fade)
|
||||
|
||||
SH_START_PROGRAM
|
||||
{
|
||||
float4x4 viewFixed = view;
|
||||
#if !SH_GLSL
|
||||
viewFixed[0][3] = 0;
|
||||
viewFixed[1][3] = 0;
|
||||
viewFixed[2][3] = 0;
|
||||
#else
|
||||
viewFixed[3][0] = 0;
|
||||
viewFixed[3][1] = 0;
|
||||
viewFixed[3][2] = 0;
|
||||
#endif
|
||||
shOutputPosition = shMatrixMult(projection, shMatrixMult(viewFixed, shInputPosition));
|
||||
UV = uv0;
|
||||
|
||||
fade = (shInputPosition.z > 50) ? 1 : 0;
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
SH_BEGIN_PROGRAM
|
||||
|
||||
shInput(float2, UV)
|
||||
shInput(float, fade)
|
||||
|
||||
shSampler2D(diffuseMap)
|
||||
shUniform(float, nightFade) @shSharedParameter(nightFade)
|
||||
|
||||
|
||||
SH_START_PROGRAM
|
||||
{
|
||||
shOutputColour(0) = shSample(diffuseMap, UV) * float4(1,1,1, nightFade * fade);
|
||||
}
|
||||
|
||||
#endif
|
15
files/materials/stars.shaderset
Normal file
|
@ -0,0 +1,15 @@
|
|||
shader_set stars_vertex
|
||||
{
|
||||
source stars.shader
|
||||
type vertex
|
||||
profiles_cg vs_2_0 arbvp1
|
||||
profiles_hlsl vs_2_0
|
||||
}
|
||||
|
||||
shader_set stars_fragment
|
||||
{
|
||||
source stars.shader
|
||||
type fragment
|
||||
profiles_cg ps_2_x ps_2_0 ps arbfp1
|
||||
profiles_hlsl ps_2_0
|
||||
}
|
41
files/materials/sun.shader
Normal file
|
@ -0,0 +1,41 @@
|
|||
#include "core.h"
|
||||
|
||||
#ifdef SH_VERTEX_SHADER
|
||||
|
||||
SH_BEGIN_PROGRAM
|
||||
shUniform(float4x4, world) @shAutoConstant(world, world_matrix)
|
||||
shUniform(float4x4, view) @shAutoConstant(view, view_matrix)
|
||||
shUniform(float4x4, projection) @shAutoConstant(projection, projection_matrix)
|
||||
shVertexInput(float2, uv0)
|
||||
shOutput(float2, UV)
|
||||
|
||||
SH_START_PROGRAM
|
||||
{
|
||||
float4x4 viewFixed = view;
|
||||
#if !SH_GLSL
|
||||
viewFixed[0][3] = 0;
|
||||
viewFixed[1][3] = 0;
|
||||
viewFixed[2][3] = 0;
|
||||
#else
|
||||
viewFixed[3][0] = 0;
|
||||
viewFixed[3][1] = 0;
|
||||
viewFixed[3][2] = 0;
|
||||
#endif
|
||||
shOutputPosition = shMatrixMult(projection, shMatrixMult(viewFixed, shMatrixMult(world, shInputPosition)));
|
||||
UV = uv0;
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
SH_BEGIN_PROGRAM
|
||||
shSampler2D(diffuseMap)
|
||||
shInput(float2, UV)
|
||||
shUniform(float4, materialDiffuse) @shAutoConstant(materialDiffuse, surface_diffuse_colour)
|
||||
//shUniform(float4, materialEmissive) @shAutoConstant(materialEmissive, surface_emissive_colour)
|
||||
|
||||
SH_START_PROGRAM
|
||||
{
|
||||
shOutputColour(0) = float4(1,1,1,materialDiffuse.a) * shSample(diffuseMap, UV);
|
||||
}
|
||||
|
||||
#endif
|
15
files/materials/sun.shaderset
Normal file
|
@ -0,0 +1,15 @@
|
|||
shader_set sun_vertex
|
||||
{
|
||||
source sun.shader
|
||||
type vertex
|
||||
profiles_cg vs_2_0 arbvp1
|
||||
profiles_hlsl vs_2_0
|
||||
}
|
||||
|
||||
shader_set sun_fragment
|
||||
{
|
||||
source sun.shader
|
||||
type fragment
|
||||
profiles_cg ps_2_x ps_2_0 ps arbfp1
|
||||
profiles_hlsl ps_2_0
|
||||
}
|
348
files/materials/terrain.shader
Normal file
|
@ -0,0 +1,348 @@
|
|||
#include "core.h"
|
||||
|
||||
#define IS_FIRST_PASS (@shPropertyString(pass_index) == 0)
|
||||
|
||||
#define FOG (@shGlobalSettingBool(fog) && !@shPropertyBool(render_composite_map))
|
||||
|
||||
#define SHADOWS_PSSM @shGlobalSettingBool(shadows_pssm)
|
||||
#define SHADOWS @shGlobalSettingBool(shadows)
|
||||
|
||||
#if SHADOWS || SHADOWS_PSSM
|
||||
#include "shadows.h"
|
||||
#endif
|
||||
|
||||
#define NUM_LAYERS @shPropertyString(num_layers)
|
||||
|
||||
#if FOG || SHADOWS_PSSM
|
||||
#define NEED_DEPTH 1
|
||||
#endif
|
||||
|
||||
#define UNDERWATER @shGlobalSettingBool(render_refraction)
|
||||
|
||||
#define VIEWPROJ_FIX @shGlobalSettingBool(viewproj_fix)
|
||||
|
||||
#define RENDERCMP @shPropertyBool(render_composite_map)
|
||||
|
||||
#define LIGHTING !RENDERCMP
|
||||
|
||||
#define COMPOSITE_MAP @shPropertyBool(display_composite_map)
|
||||
|
||||
|
||||
#if NEED_DEPTH
|
||||
@shAllocatePassthrough(1, depth)
|
||||
#endif
|
||||
|
||||
@shAllocatePassthrough(2, UV)
|
||||
|
||||
@shAllocatePassthrough(3, worldPos)
|
||||
|
||||
#if LIGHTING
|
||||
@shAllocatePassthrough(3, lightResult)
|
||||
@shAllocatePassthrough(3, directionalResult)
|
||||
|
||||
#if SHADOWS
|
||||
@shAllocatePassthrough(4, lightSpacePos0)
|
||||
#endif
|
||||
#if SHADOWS_PSSM
|
||||
@shForeach(3)
|
||||
@shAllocatePassthrough(4, lightSpacePos@shIterator)
|
||||
@shEndForeach
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef SH_VERTEX_SHADER
|
||||
|
||||
// ------------------------------------- VERTEX ---------------------------------------
|
||||
|
||||
SH_BEGIN_PROGRAM
|
||||
shUniform(float4x4, worldMatrix) @shAutoConstant(worldMatrix, world_matrix)
|
||||
shUniform(float4x4, viewProjMatrix) @shAutoConstant(viewProjMatrix, viewproj_matrix)
|
||||
|
||||
#if VIEWPROJ_FIX
|
||||
shUniform(float4, vpRow2Fix) @shSharedParameter(vpRow2Fix, vpRow2Fix)
|
||||
#endif
|
||||
|
||||
shVertexInput(float2, uv0)
|
||||
shVertexInput(float2, uv1) // lodDelta, lodThreshold
|
||||
|
||||
#if LIGHTING
|
||||
shNormalInput(float4)
|
||||
shColourInput(float4)
|
||||
|
||||
shUniform(float, lightCount) @shAutoConstant(lightCount, light_count)
|
||||
shUniform(float4, lightPosition[@shGlobalSettingString(num_lights)]) @shAutoConstant(lightPosition, light_position_object_space_array, @shGlobalSettingString(num_lights))
|
||||
shUniform(float4, lightDiffuse[@shGlobalSettingString(num_lights)]) @shAutoConstant(lightDiffuse, light_diffuse_colour_array, @shGlobalSettingString(num_lights))
|
||||
shUniform(float4, lightAttenuation[@shGlobalSettingString(num_lights)]) @shAutoConstant(lightAttenuation, light_attenuation_array, @shGlobalSettingString(num_lights))
|
||||
shUniform(float4, lightAmbient) @shAutoConstant(lightAmbient, ambient_light_colour)
|
||||
|
||||
#if SHADOWS
|
||||
shUniform(float4x4, texViewProjMatrix0) @shAutoConstant(texViewProjMatrix0, texture_viewproj_matrix)
|
||||
#endif
|
||||
|
||||
#if SHADOWS_PSSM
|
||||
@shForeach(3)
|
||||
shUniform(float4x4, texViewProjMatrix@shIterator) @shAutoConstant(texViewProjMatrix@shIterator, texture_viewproj_matrix, @shIterator)
|
||||
@shEndForeach
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@shPassthroughVertexOutputs
|
||||
|
||||
SH_START_PROGRAM
|
||||
{
|
||||
float4 worldPos = shMatrixMult(worldMatrix, shInputPosition);
|
||||
|
||||
shOutputPosition = shMatrixMult(viewProjMatrix, worldPos);
|
||||
|
||||
#if NEED_DEPTH
|
||||
#if VIEWPROJ_FIX
|
||||
float4x4 vpFixed = viewProjMatrix;
|
||||
#if !SH_GLSL
|
||||
vpFixed[2] = vpRow2Fix;
|
||||
#else
|
||||
vpFixed[0][2] = vpRow2Fix.x;
|
||||
vpFixed[1][2] = vpRow2Fix.y;
|
||||
vpFixed[2][2] = vpRow2Fix.z;
|
||||
vpFixed[3][2] = vpRow2Fix.w;
|
||||
#endif
|
||||
|
||||
float4x4 fixedWVP = shMatrixMult(vpFixed, worldMatrix);
|
||||
|
||||
float depth = shMatrixMult(fixedWVP, shInputPosition).z;
|
||||
@shPassthroughAssign(depth, depth);
|
||||
#else
|
||||
@shPassthroughAssign(depth, shOutputPosition.z);
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
@shPassthroughAssign(UV, uv0);
|
||||
|
||||
@shPassthroughAssign(worldPos, worldPos.xyz);
|
||||
|
||||
#if LIGHTING
|
||||
|
||||
#if SHADOWS
|
||||
float4 lightSpacePos = shMatrixMult(texViewProjMatrix0, shMatrixMult(worldMatrix, shInputPosition));
|
||||
@shPassthroughAssign(lightSpacePos0, lightSpacePos);
|
||||
#endif
|
||||
#if SHADOWS_PSSM
|
||||
float4 wPos = shMatrixMult(worldMatrix, shInputPosition);
|
||||
|
||||
float4 lightSpacePos;
|
||||
@shForeach(3)
|
||||
lightSpacePos = shMatrixMult(texViewProjMatrix@shIterator, wPos);
|
||||
@shPassthroughAssign(lightSpacePos@shIterator, lightSpacePos);
|
||||
@shEndForeach
|
||||
#endif
|
||||
|
||||
|
||||
// Lighting
|
||||
float3 lightDir;
|
||||
float d;
|
||||
float3 lightResult = float3(0,0,0);
|
||||
float3 directionalResult = float3(0,0,0);
|
||||
@shForeach(@shGlobalSettingString(num_lights))
|
||||
lightDir = lightPosition[@shIterator].xyz - (shInputPosition.xyz * lightPosition[@shIterator].w);
|
||||
d = length(lightDir);
|
||||
lightDir = normalize(lightDir);
|
||||
|
||||
|
||||
lightResult.xyz += lightDiffuse[@shIterator].xyz
|
||||
* shSaturate(1.0 / ((lightAttenuation[@shIterator].y) + (lightAttenuation[@shIterator].z * d) + (lightAttenuation[@shIterator].w * d * d)))
|
||||
* max(dot(normal.xyz, lightDir), 0);
|
||||
|
||||
#if @shIterator == 0
|
||||
directionalResult = lightResult.xyz;
|
||||
#endif
|
||||
@shEndForeach
|
||||
lightResult.xyz += lightAmbient.xyz;
|
||||
lightResult.xyz *= colour.xyz;
|
||||
directionalResult.xyz *= colour.xyz;
|
||||
|
||||
@shPassthroughAssign(lightResult, lightResult);
|
||||
@shPassthroughAssign(directionalResult, directionalResult);
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
// ----------------------------------- FRAGMENT ------------------------------------------
|
||||
|
||||
#if UNDERWATER
|
||||
#include "underwater.h"
|
||||
#endif
|
||||
|
||||
SH_BEGIN_PROGRAM
|
||||
|
||||
|
||||
#if COMPOSITE_MAP
|
||||
shSampler2D(compositeMap)
|
||||
#else
|
||||
|
||||
@shForeach(@shPropertyString(num_blendmaps))
|
||||
shSampler2D(blendMap@shIterator)
|
||||
@shEndForeach
|
||||
|
||||
@shForeach(@shPropertyString(num_layers))
|
||||
shSampler2D(diffuseMap@shIterator)
|
||||
@shEndForeach
|
||||
|
||||
#endif
|
||||
|
||||
#if FOG
|
||||
shUniform(float3, fogColour) @shAutoConstant(fogColour, fog_colour)
|
||||
shUniform(float4, fogParams) @shAutoConstant(fogParams, fog_params)
|
||||
#endif
|
||||
|
||||
@shPassthroughFragmentInputs
|
||||
|
||||
#if LIGHTING
|
||||
#if SHADOWS
|
||||
shSampler2D(shadowMap0)
|
||||
shUniform(float2, invShadowmapSize0) @shAutoConstant(invShadowmapSize0, inverse_texture_size, @shPropertyString(shadowtexture_offset))
|
||||
#endif
|
||||
#if SHADOWS_PSSM
|
||||
@shForeach(3)
|
||||
shSampler2D(shadowMap@shIterator)
|
||||
shUniform(float2, invShadowmapSize@shIterator) @shAutoConstant(invShadowmapSize@shIterator, inverse_texture_size, @shIterator(@shPropertyString(shadowtexture_offset)))
|
||||
@shEndForeach
|
||||
shUniform(float3, pssmSplitPoints) @shSharedParameter(pssmSplitPoints)
|
||||
#endif
|
||||
|
||||
#if SHADOWS || SHADOWS_PSSM
|
||||
shUniform(float4, shadowFar_fadeStart) @shSharedParameter(shadowFar_fadeStart)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if (UNDERWATER) || (FOG)
|
||||
shUniform(float4x4, worldMatrix) @shAutoConstant(worldMatrix, world_matrix)
|
||||
shUniform(float4, cameraPos) @shAutoConstant(cameraPos, camera_position)
|
||||
#endif
|
||||
|
||||
#if UNDERWATER
|
||||
shUniform(float, waterLevel) @shSharedParameter(waterLevel)
|
||||
#endif
|
||||
|
||||
SH_START_PROGRAM
|
||||
{
|
||||
|
||||
#if NEED_DEPTH
|
||||
float depth = @shPassthroughReceive(depth);
|
||||
#endif
|
||||
|
||||
float2 UV = @shPassthroughReceive(UV);
|
||||
|
||||
float3 worldPos = @shPassthroughReceive(worldPos);
|
||||
|
||||
|
||||
#if UNDERWATER
|
||||
float3 waterEyePos = intercept(worldPos, cameraPos.xyz - worldPos, float3(0,0,1), waterLevel);
|
||||
#endif
|
||||
|
||||
|
||||
#if !IS_FIRST_PASS
|
||||
// Opacity the previous passes should have, i.e. 1 - (opacity of this pass)
|
||||
float previousAlpha = 1.f;
|
||||
#endif
|
||||
|
||||
|
||||
shOutputColour(0) = float4(1,1,1,1);
|
||||
|
||||
#if COMPOSITE_MAP
|
||||
shOutputColour(0).xyz = shSample(compositeMap, UV).xyz;
|
||||
#else
|
||||
|
||||
// Layer calculations
|
||||
// rescale UV to directly map edge vertices to texel centers - this is
|
||||
// important to get correct blending at cell transitions
|
||||
// TODO: parameterize texel size
|
||||
float2 blendUV = (UV - 0.5) * (16.0 / (16.0+1.0)) + 0.5;
|
||||
@shForeach(@shPropertyString(num_blendmaps))
|
||||
float4 blendValues@shIterator = shSaturate(shSample(blendMap@shIterator, blendUV));
|
||||
@shEndForeach
|
||||
|
||||
|
||||
float3 albedo = float3(0,0,0);
|
||||
|
||||
float2 layerUV = UV * 16;
|
||||
|
||||
@shForeach(@shPropertyString(num_layers))
|
||||
|
||||
|
||||
#if IS_FIRST_PASS
|
||||
#if @shIterator == 0
|
||||
// first layer of first pass is the base layer and doesn't need a blend map
|
||||
albedo = shSample(diffuseMap0, layerUV).rgb;
|
||||
#else
|
||||
albedo = shLerp(albedo, shSample(diffuseMap@shIterator, layerUV).rgb, blendValues@shPropertyString(blendmap_component_@shIterator));
|
||||
#endif
|
||||
#else
|
||||
#if @shIterator == 0
|
||||
albedo = shSample(diffuseMap@shIterator, layerUV).rgb, blendValues@shPropertyString(blendmap_component_@shIterator);
|
||||
#else
|
||||
albedo = shLerp(albedo, shSample(diffuseMap@shIterator, layerUV).rgb, blendValues@shPropertyString(blendmap_component_@shIterator));
|
||||
#endif
|
||||
previousAlpha *= 1.f-blendValues@shPropertyString(blendmap_component_@shIterator);
|
||||
#endif
|
||||
@shEndForeach
|
||||
|
||||
shOutputColour(0).rgb *= albedo;
|
||||
|
||||
#endif
|
||||
|
||||
#if LIGHTING
|
||||
// Lighting
|
||||
float3 lightResult = @shPassthroughReceive(lightResult);
|
||||
float3 directionalResult = @shPassthroughReceive(directionalResult);
|
||||
|
||||
// shadows only for the first (directional) light
|
||||
#if SHADOWS
|
||||
float4 lightSpacePos0 = @shPassthroughReceive(lightSpacePos0);
|
||||
float shadow = depthShadowPCF (shadowMap0, lightSpacePos0, invShadowmapSize0);
|
||||
#endif
|
||||
#if SHADOWS_PSSM
|
||||
@shForeach(3)
|
||||
float4 lightSpacePos@shIterator = @shPassthroughReceive(lightSpacePos@shIterator);
|
||||
@shEndForeach
|
||||
|
||||
float shadow = pssmDepthShadow (lightSpacePos0, invShadowmapSize0, shadowMap0, lightSpacePos1, invShadowmapSize1, shadowMap1, lightSpacePos2, invShadowmapSize2, shadowMap2, depth, pssmSplitPoints);
|
||||
#endif
|
||||
|
||||
#if SHADOWS || SHADOWS_PSSM
|
||||
float fadeRange = shadowFar_fadeStart.x - shadowFar_fadeStart.y;
|
||||
float fade = 1-((depth - shadowFar_fadeStart.y) / fadeRange);
|
||||
shadow = (depth > shadowFar_fadeStart.x) ? 1.0 : ((depth > shadowFar_fadeStart.y) ? 1.0-((1.0-shadow)*fade) : shadow);
|
||||
#endif
|
||||
|
||||
#if !SHADOWS && !SHADOWS_PSSM
|
||||
float shadow = 1.0;
|
||||
#endif
|
||||
|
||||
shOutputColour(0).xyz *= (lightResult - directionalResult * (1.0-shadow));
|
||||
#endif
|
||||
|
||||
#if FOG
|
||||
float fogValue = shSaturate((depth - fogParams.y) * fogParams.w);
|
||||
|
||||
#if UNDERWATER
|
||||
shOutputColour(0).xyz = shLerp (shOutputColour(0).xyz, UNDERWATER_COLOUR, shSaturate(length(waterEyePos-worldPos) / VISIBILITY));
|
||||
#else
|
||||
shOutputColour(0).xyz = shLerp (shOutputColour(0).xyz, fogColour, fogValue);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// prevent negative colour output (for example with negative lights)
|
||||
shOutputColour(0).xyz = max(shOutputColour(0).xyz, float3(0,0,0));
|
||||
|
||||
#if IS_FIRST_PASS
|
||||
shOutputColour(0).a = 1;
|
||||
#else
|
||||
shOutputColour(0).a = 1.f-previousAlpha;
|
||||
#endif
|
||||
}
|
||||
|
||||
#endif
|
15
files/materials/terrain.shaderset
Normal file
|
@ -0,0 +1,15 @@
|
|||
shader_set terrain_vertex
|
||||
{
|
||||
source terrain.shader
|
||||
type vertex
|
||||
profiles_cg vs_2_0 vp40 arbvp1
|
||||
profiles_hlsl vs_3_0 vs_2_0
|
||||
}
|
||||
|
||||
shader_set terrain_fragment
|
||||
{
|
||||
source terrain.shader
|
||||
type fragment
|
||||
profiles_cg ps_3_0 ps_2_x ps_2_0 fp40 arbfp1
|
||||
profiles_hlsl ps_3_0 ps_2_0
|
||||
}
|
121
files/materials/underwater.h
Normal file
|
@ -0,0 +1,121 @@
|
|||
#define UNDERWATER_COLOUR float3(0.18039, 0.23137, 0.25490)
|
||||
|
||||
#define VISIBILITY 1000.0 // how far you can look through water
|
||||
|
||||
#define BIG_WAVES_X 0.3 // strength of big waves
|
||||
#define BIG_WAVES_Y 0.3
|
||||
|
||||
#define MID_WAVES_X 0.3 // strength of middle sized waves
|
||||
#define MID_WAVES_Y 0.15
|
||||
|
||||
#define SMALL_WAVES_X 0.15 // strength of small waves
|
||||
#define SMALL_WAVES_Y 0.1
|
||||
|
||||
#define WAVE_CHOPPYNESS 0.15 // wave choppyness
|
||||
#define WAVE_SCALE 0.01 // overall wave scale
|
||||
|
||||
#define ABBERATION 0.001 // chromatic abberation amount
|
||||
|
||||
#define SUN_EXT float3(0.45, 0.55, 0.68) //sunlight extinction
|
||||
|
||||
float3 intercept(float3 lineP,
|
||||
float3 lineN,
|
||||
float3 planeN,
|
||||
float planeD)
|
||||
{
|
||||
|
||||
float distance = (planeD - dot(planeN, lineP)) / dot(lineN, planeN);
|
||||
return lineP + lineN * distance;
|
||||
}
|
||||
|
||||
float3 perturb1(shTexture2D tex, float2 coords, float bend, float2 windDir, float windSpeed, float timer)
|
||||
{
|
||||
float2 nCoord = float2(0,0);
|
||||
bend *= WAVE_CHOPPYNESS;
|
||||
nCoord = coords * (WAVE_SCALE * 0.05) + windDir * timer * (windSpeed*0.04);
|
||||
float3 normal0 = 2.0 * shSample(tex, nCoord + float2(-timer*0.015,-timer*0.05)).rgb - 1.0;
|
||||
nCoord = coords * (WAVE_SCALE * 0.1) + windDir * timer * (windSpeed*0.08)-normal0.xy*bend;
|
||||
float3 normal1 = 2.0 * shSample(tex, nCoord + float2(+timer*0.020,+timer*0.015)).rgb - 1.0;
|
||||
|
||||
nCoord = coords * (WAVE_SCALE * 0.25) + windDir * timer * (windSpeed*0.07)-normal1.xy*bend;
|
||||
float3 normal2 = 2.0 * shSample(tex, nCoord + float2(-timer*0.04,-timer*0.03)).rgb - 1.0;
|
||||
nCoord = coords * (WAVE_SCALE * 0.5) + windDir * timer * (windSpeed*0.09)-normal2.xy*bend;
|
||||
float3 normal3 = 2.0 * shSample(tex, nCoord + float2(+timer*0.03,+timer*0.04)).rgb - 1.0;
|
||||
|
||||
nCoord = coords * (WAVE_SCALE* 1.0) + windDir * timer * (windSpeed*0.4)-normal3.xy*bend;
|
||||
float3 normal4 = 2.0 * shSample(tex, nCoord + float2(-timer*0.2,+timer*0.1)).rgb - 1.0;
|
||||
nCoord = coords * (WAVE_SCALE * 2.0) + windDir * timer * (windSpeed*0.7)-normal4.xy*bend;
|
||||
float3 normal5 = 2.0 * shSample(tex, nCoord + float2(+timer*0.1,-timer*0.06)).rgb - 1.0;
|
||||
|
||||
|
||||
float3 normal = normalize(normal0 * BIG_WAVES_X + normal1 * BIG_WAVES_Y +
|
||||
normal2 * MID_WAVES_X + normal3 * MID_WAVES_Y +
|
||||
normal4 * SMALL_WAVES_X + normal5 * SMALL_WAVES_Y);
|
||||
return normal;
|
||||
}
|
||||
|
||||
float3 perturb(shTexture2D tex, float2 coords, float bend, float2 windDir, float windSpeed, float timer)
|
||||
{
|
||||
bend *= WAVE_CHOPPYNESS;
|
||||
float3 col = float3(0,0,0);
|
||||
float2 nCoord = float2(0,0); //normal coords
|
||||
|
||||
nCoord = coords * (WAVE_SCALE * 0.025) + windDir * timer * (windSpeed*0.03);
|
||||
col += shSample(tex,nCoord + float2(-timer*0.005,-timer*0.01)).rgb*0.20;
|
||||
nCoord = coords * (WAVE_SCALE * 0.1) + windDir * timer * (windSpeed*0.05)-(col.xy/col.zz)*bend;
|
||||
col += shSample(tex,nCoord + float2(+timer*0.01,+timer*0.005)).rgb*0.20;
|
||||
|
||||
nCoord = coords * (WAVE_SCALE * 0.2) + windDir * timer * (windSpeed*0.1)-(col.xy/col.zz)*bend;
|
||||
col += shSample(tex,nCoord + float2(-timer*0.02,-timer*0.03)).rgb*0.20;
|
||||
nCoord = coords * (WAVE_SCALE * 0.5) + windDir * timer * (windSpeed*0.2)-(col.xy/col.zz)*bend;
|
||||
col += shSample(tex,nCoord + float2(+timer*0.03,+timer*0.02)).rgb*0.15;
|
||||
|
||||
nCoord = coords * (WAVE_SCALE* 0.8) + windDir * timer * (windSpeed*1.0)-(col.xy/col.zz)*bend;
|
||||
col += shSample(tex, nCoord + float2(-timer*0.06,+timer*0.08)).rgb*0.15;
|
||||
nCoord = coords * (WAVE_SCALE * 1.0) + windDir * timer * (windSpeed*1.3)-(col.xy/col.zz)*bend;
|
||||
col += shSample(tex,nCoord + float2(+timer*0.08,-timer*0.06)).rgb*0.10;
|
||||
|
||||
return col;
|
||||
}
|
||||
|
||||
|
||||
float3 getCaustics (shTexture2D causticMap, float3 worldPos, float3 waterEyePos, float3 worldNormal, float3 lightDirectionWS0, float waterLevel, float waterTimer, float3 windDir_windSpeed)
|
||||
{
|
||||
float waterDepth = shSaturate((waterEyePos.z - worldPos.z) / 50.0);
|
||||
|
||||
float3 causticPos = intercept(worldPos.xyz, lightDirectionWS0.xyz, float3(0,0,1), waterLevel);
|
||||
|
||||
///\ todo clean this up
|
||||
float causticdepth = length(causticPos-worldPos.xyz);
|
||||
causticdepth = 1.0-shSaturate(causticdepth / VISIBILITY);
|
||||
causticdepth = shSaturate(causticdepth);
|
||||
|
||||
// NOTE: the original shader calculated a tangent space basis here,
|
||||
// but using only the world normal is cheaper and i couldn't see a visual difference
|
||||
// also, if this effect gets moved to screen-space some day, it's unlikely to have tangent information
|
||||
float3 causticNorm = worldNormal.xyz * perturb(causticMap, causticPos.xy, causticdepth, windDir_windSpeed.xy, windDir_windSpeed.z, waterTimer).xyz * 2 - 1;
|
||||
causticNorm = float3(causticNorm.x, causticNorm.y, -causticNorm.z);
|
||||
|
||||
//float fresnel = pow(clamp(dot(LV,causticnorm),0.0,1.0),2.0);
|
||||
|
||||
float NdotL = max(dot(worldNormal.xyz, lightDirectionWS0.xyz),0.0);
|
||||
|
||||
float causticR = 1.0-perturb(causticMap, causticPos.xy, causticdepth, windDir_windSpeed.xy, windDir_windSpeed.z, waterTimer).z;
|
||||
|
||||
/// \todo sunFade
|
||||
|
||||
// float3 caustics = clamp(pow(float3(causticR)*5.5,float3(5.5*causticdepth)),0.0,1.0)*NdotL*sunFade*causticdepth;
|
||||
float3 caustics = clamp(pow(float3(causticR,causticR,causticR)*5.5,float3(5.5*causticdepth,5.5*causticdepth,5.5*causticdepth)),0.0,1.0)*NdotL*causticdepth;
|
||||
float causticG = 1.0-perturb(causticMap,causticPos.xy+(1.0-causticdepth)*ABBERATION, causticdepth, windDir_windSpeed.xy, windDir_windSpeed.z, waterTimer).z;
|
||||
float causticB = 1.0-perturb(causticMap,causticPos.xy+(1.0-causticdepth)*ABBERATION*2.0, causticdepth, windDir_windSpeed.xy, windDir_windSpeed.z, waterTimer).z;
|
||||
//caustics = shSaturate(pow(float3(causticR,causticG,causticB)*5.5,float3(5.5*causticdepth)))*NdotL*sunFade*causticdepth;
|
||||
caustics = shSaturate(pow(float3(causticR,causticG,causticB)*5.5,float3(5.5*causticdepth,5.5*causticdepth,5.5*causticdepth)))*NdotL*causticdepth;
|
||||
|
||||
caustics *= 3;
|
||||
|
||||
// shore transition
|
||||
caustics = shLerp (float3(1,1,1), caustics, waterDepth);
|
||||
|
||||
return caustics;
|
||||
}
|
||||
|
77
files/materials/water.mat
Normal file
|
@ -0,0 +1,77 @@
|
|||
material Water
|
||||
{
|
||||
allow_fixed_function false
|
||||
|
||||
pass
|
||||
{
|
||||
emissive 1.0 1.0 1.0
|
||||
ambient 0 0 0
|
||||
diffuse 0 0 0 1
|
||||
specular 0 0 0 32
|
||||
|
||||
vertex_program water_vertex
|
||||
fragment_program water_fragment
|
||||
|
||||
cull_hardware none
|
||||
|
||||
scene_blend alpha_blend
|
||||
depth_write off
|
||||
|
||||
texture_unit reflectionMap
|
||||
{
|
||||
texture_alias WaterReflection
|
||||
tex_address_mode clamp
|
||||
}
|
||||
|
||||
texture_unit refractionMap
|
||||
{
|
||||
direct_texture WaterRefraction
|
||||
tex_address_mode clamp
|
||||
}
|
||||
|
||||
texture_unit depthMap
|
||||
{
|
||||
texture_alias SceneDepth
|
||||
tex_address_mode clamp
|
||||
}
|
||||
|
||||
texture_unit normalMap
|
||||
{
|
||||
texture water_nm.png 5
|
||||
}
|
||||
|
||||
texture_unit rippleNormalMap
|
||||
{
|
||||
direct_texture RippleNormal
|
||||
tex_address_mode border
|
||||
tex_border_colour 0.5 0.5 1.0
|
||||
}
|
||||
|
||||
// for simple_water
|
||||
texture_unit animatedTexture
|
||||
{
|
||||
create_in_ffp true
|
||||
scale 0.1 0.1
|
||||
alpha_op_ex source1 src_manual src_current 0.7
|
||||
}
|
||||
|
||||
texture_unit shadowMap0
|
||||
{
|
||||
content_type shadow
|
||||
tex_address_mode clamp
|
||||
filtering none
|
||||
}
|
||||
texture_unit shadowMap1
|
||||
{
|
||||
content_type shadow
|
||||
tex_address_mode clamp
|
||||
filtering none
|
||||
}
|
||||
texture_unit shadowMap2
|
||||
{
|
||||
content_type shadow
|
||||
tex_address_mode clamp
|
||||
filtering none
|
||||
}
|
||||
}
|
||||
}
|
370
files/materials/water.shader
Normal file
|
@ -0,0 +1,370 @@
|
|||
#include "core.h"
|
||||
|
||||
|
||||
#define SIMPLE_WATER @shGlobalSettingBool(simple_water)
|
||||
|
||||
#if SIMPLE_WATER
|
||||
// --------------------------------------- SIMPLE WATER ---------------------------------------------------
|
||||
|
||||
#define FOG @shGlobalSettingBool(fog)
|
||||
|
||||
#ifdef SH_VERTEX_SHADER
|
||||
|
||||
SH_BEGIN_PROGRAM
|
||||
shUniform(float4x4, wvp) @shAutoConstant(wvp, worldviewproj_matrix)
|
||||
shVertexInput(float2, uv0)
|
||||
shOutput(float2, UV)
|
||||
|
||||
#if FOG
|
||||
shOutput(float, depth)
|
||||
#endif
|
||||
SH_START_PROGRAM
|
||||
{
|
||||
shOutputPosition = shMatrixMult(wvp, shInputPosition);
|
||||
UV = uv0;
|
||||
#if FOG
|
||||
depth = shOutputPosition.z;
|
||||
#endif
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
SH_BEGIN_PROGRAM
|
||||
shSampler2D(animatedTexture)
|
||||
shInput(float2, UV)
|
||||
shInput(float, depth)
|
||||
|
||||
shUniform(float3, fogColor) @shAutoConstant(fogColor, fog_colour)
|
||||
shUniform(float4, fogParams) @shAutoConstant(fogParams, fog_params)
|
||||
|
||||
|
||||
SH_START_PROGRAM
|
||||
{
|
||||
shOutputColour(0).xyz = shSample(animatedTexture, UV * 15).xyz * float3(1.0, 1.0, 1.0);
|
||||
shOutputColour(0).w = 0.7;
|
||||
|
||||
#if FOG
|
||||
float fogValue = shSaturate((depth - fogParams.y) * fogParams.w);
|
||||
shOutputColour(0).xyz = shLerp (shOutputColour(0).xyz, fogColor, fogValue);
|
||||
#endif
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#else
|
||||
|
||||
|
||||
|
||||
// Inspired by Blender GLSL Water by martinsh ( http://devlog-martinsh.blogspot.de/2012/07/waterundewater-shader-wip.html )
|
||||
|
||||
#define SHADOWS_PSSM @shGlobalSettingBool(shadows_pssm)
|
||||
#define SHADOWS @shGlobalSettingBool(shadows)
|
||||
|
||||
#if SHADOWS || SHADOWS_PSSM
|
||||
#include "shadows.h"
|
||||
#endif
|
||||
|
||||
#define RIPPLES 1
|
||||
#define REFRACTION @shGlobalSettingBool(refraction)
|
||||
|
||||
#ifdef SH_VERTEX_SHADER
|
||||
|
||||
SH_BEGIN_PROGRAM
|
||||
shUniform(float4x4, wvp) @shAutoConstant(wvp, worldviewproj_matrix)
|
||||
shVertexInput(float2, uv0)
|
||||
shOutput(float2, UV)
|
||||
|
||||
shOutput(float3, screenCoordsPassthrough)
|
||||
shOutput(float4, position)
|
||||
shOutput(float, depthPassthrough)
|
||||
|
||||
|
||||
#if SHADOWS
|
||||
shOutput(float4, lightSpacePos0)
|
||||
shUniform(float4x4, texViewProjMatrix0) @shAutoConstant(texViewProjMatrix0, texture_viewproj_matrix)
|
||||
#endif
|
||||
|
||||
#if SHADOWS_PSSM
|
||||
@shForeach(3)
|
||||
shOutput(float4, lightSpacePos@shIterator)
|
||||
shUniform(float4x4, texViewProjMatrix@shIterator) @shAutoConstant(texViewProjMatrix@shIterator, texture_viewproj_matrix, @shIterator)
|
||||
@shEndForeach
|
||||
#endif
|
||||
|
||||
#if SHADOWS || SHADOWS_PSSM
|
||||
shUniform(float4x4, worldMatrix) @shAutoConstant(worldMatrix, world_matrix)
|
||||
#endif
|
||||
|
||||
SH_START_PROGRAM
|
||||
{
|
||||
shOutputPosition = shMatrixMult(wvp, shInputPosition);
|
||||
UV = uv0;
|
||||
|
||||
|
||||
#if !SH_GLSL
|
||||
float4x4 scalemat = float4x4( 0.5, 0, 0, 0.5,
|
||||
0, -0.5, 0, 0.5,
|
||||
0, 0, 0.5, 0.5,
|
||||
0, 0, 0, 1 );
|
||||
#else
|
||||
mat4 scalemat = mat4(0.5, 0.0, 0.0, 0.0,
|
||||
0.0, -0.5, 0.0, 0.0,
|
||||
0.0, 0.0, 0.5, 0.0,
|
||||
0.5, 0.5, 0.5, 1.0);
|
||||
#endif
|
||||
|
||||
float4 texcoordProj = shMatrixMult(scalemat, shOutputPosition);
|
||||
screenCoordsPassthrough = float3(texcoordProj.x, texcoordProj.y, texcoordProj.w);
|
||||
|
||||
position = shInputPosition;
|
||||
|
||||
depthPassthrough = shOutputPosition.z;
|
||||
|
||||
|
||||
#if SHADOWS
|
||||
lightSpacePos0 = shMatrixMult(texViewProjMatrix0, shMatrixMult(worldMatrix, shInputPosition));
|
||||
#endif
|
||||
#if SHADOWS_PSSM
|
||||
float4 wPos = shMatrixMult(worldMatrix, shInputPosition);
|
||||
@shForeach(3)
|
||||
lightSpacePos@shIterator = shMatrixMult(texViewProjMatrix@shIterator, wPos);
|
||||
@shEndForeach
|
||||
#endif
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
// tweakables ----------------------------------------------------
|
||||
|
||||
#define VISIBILITY 1500.0 // how far you can look through water
|
||||
|
||||
#define BIG_WAVES_X 0.3 // strength of big waves
|
||||
#define BIG_WAVES_Y 0.3
|
||||
|
||||
#define MID_WAVES_X 0.3 // strength of middle sized waves
|
||||
#define MID_WAVES_Y 0.15
|
||||
|
||||
#define SMALL_WAVES_X 0.15 // strength of small waves
|
||||
#define SMALL_WAVES_Y 0.1
|
||||
|
||||
#define WAVE_CHOPPYNESS 0.15 // wave choppyness
|
||||
#define WAVE_SCALE 75 // overall wave scale
|
||||
|
||||
#define BUMP 1.5 // overall water surface bumpiness
|
||||
#define REFL_BUMP 0.08 // reflection distortion amount
|
||||
#define REFR_BUMP 0.06 // refraction distortion amount
|
||||
|
||||
#define SCATTER_AMOUNT 0.3 // amount of sunlight scattering
|
||||
#define SCATTER_COLOUR float3(0.0,1.0,0.95) // colour of sunlight scattering
|
||||
|
||||
#define SUN_EXT float3(0.45, 0.55, 0.68) //sunlight extinction
|
||||
|
||||
#define SPEC_HARDNESS 256 // specular highlights hardness
|
||||
|
||||
|
||||
// ---------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
float fresnel_dielectric(float3 Incoming, float3 Normal, float eta)
|
||||
{
|
||||
/* compute fresnel reflectance without explicitly computing
|
||||
the refracted direction */
|
||||
float c = abs(dot(Incoming, Normal));
|
||||
float g = eta * eta - 1.0 + c * c;
|
||||
float result;
|
||||
|
||||
if(g > 0.0) {
|
||||
g = sqrt(g);
|
||||
float A =(g - c)/(g + c);
|
||||
float B =(c *(g + c)- 1.0)/(c *(g - c)+ 1.0);
|
||||
result = 0.5 * A * A *(1.0 + B * B);
|
||||
}
|
||||
else
|
||||
result = 1.0; /* TIR (no refracted component) */
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
SH_BEGIN_PROGRAM
|
||||
shInput(float2, UV)
|
||||
shInput(float3, screenCoordsPassthrough)
|
||||
shInput(float4, position)
|
||||
shInput(float, depthPassthrough)
|
||||
|
||||
#if RIPPLES
|
||||
shUniform(float3, rippleCenter) @shSharedParameter(rippleCenter, rippleCenter)
|
||||
shUniform(float, rippleAreaLength) @shSharedParameter(rippleAreaLength, rippleAreaLength)
|
||||
#endif
|
||||
|
||||
shUniform(float, far) @shAutoConstant(far, far_clip_distance)
|
||||
|
||||
shSampler2D(reflectionMap)
|
||||
#if REFRACTION
|
||||
shSampler2D(refractionMap)
|
||||
#endif
|
||||
shSampler2D(depthMap)
|
||||
shSampler2D(normalMap)
|
||||
|
||||
#if RIPPLES
|
||||
shSampler2D(rippleNormalMap)
|
||||
shUniform(float4x4, wMat) @shAutoConstant(wMat, world_matrix)
|
||||
#endif
|
||||
|
||||
shUniform(float3, windDir_windSpeed) @shSharedParameter(windDir_windSpeed)
|
||||
#define WIND_SPEED windDir_windSpeed.z
|
||||
#define WIND_DIR windDir_windSpeed.xy
|
||||
|
||||
shUniform(float, waterTimer) @shSharedParameter(waterTimer)
|
||||
shUniform(float2, waterSunFade_sunHeight) @shSharedParameter(waterSunFade_sunHeight)
|
||||
|
||||
shUniform(float4, sunPosition) @shAutoConstant(sunPosition, light_position, 0)
|
||||
shUniform(float4, sunSpecular) @shAutoConstant(sunSpecular, light_specular_colour, 0)
|
||||
|
||||
shUniform(float, renderTargetFlipping) @shAutoConstant(renderTargetFlipping, render_target_flipping)
|
||||
|
||||
|
||||
shUniform(float3, fogColor) @shAutoConstant(fogColor, fog_colour)
|
||||
shUniform(float4, fogParams) @shAutoConstant(fogParams, fog_params)
|
||||
|
||||
shUniform(float4, cameraPos) @shAutoConstant(cameraPos, camera_position_object_space)
|
||||
|
||||
|
||||
#if SHADOWS
|
||||
shInput(float4, lightSpacePos0)
|
||||
shSampler2D(shadowMap0)
|
||||
shUniform(float2, invShadowmapSize0) @shAutoConstant(invShadowmapSize0, inverse_texture_size, 1)
|
||||
#endif
|
||||
#if SHADOWS_PSSM
|
||||
@shForeach(3)
|
||||
shInput(float4, lightSpacePos@shIterator)
|
||||
shSampler2D(shadowMap@shIterator)
|
||||
shUniform(float2, invShadowmapSize@shIterator) @shAutoConstant(invShadowmapSize@shIterator, inverse_texture_size, @shIterator(1))
|
||||
@shEndForeach
|
||||
shUniform(float3, pssmSplitPoints) @shSharedParameter(pssmSplitPoints)
|
||||
#endif
|
||||
|
||||
#if SHADOWS || SHADOWS_PSSM
|
||||
shUniform(float4, shadowFar_fadeStart) @shSharedParameter(shadowFar_fadeStart)
|
||||
#endif
|
||||
|
||||
|
||||
SH_START_PROGRAM
|
||||
{
|
||||
#if SHADOWS
|
||||
float shadow = depthShadowPCF (shadowMap0, lightSpacePos0, invShadowmapSize0);
|
||||
#endif
|
||||
#if SHADOWS_PSSM
|
||||
float shadow = pssmDepthShadow (lightSpacePos0, invShadowmapSize0, shadowMap0, lightSpacePos1, invShadowmapSize1, shadowMap1, lightSpacePos2, invShadowmapSize2, shadowMap2, depthPassthrough, pssmSplitPoints);
|
||||
#endif
|
||||
|
||||
#if SHADOWS || SHADOWS_PSSM
|
||||
float fadeRange = shadowFar_fadeStart.x - shadowFar_fadeStart.y;
|
||||
float fade = 1-((depthPassthrough - shadowFar_fadeStart.y) / fadeRange);
|
||||
shadow = (depthPassthrough > shadowFar_fadeStart.x) ? 1.0 : ((depthPassthrough > shadowFar_fadeStart.y) ? 1.0-((1.0-shadow)*fade) : shadow);
|
||||
#endif
|
||||
|
||||
#if !SHADOWS && !SHADOWS_PSSM
|
||||
float shadow = 1.0;
|
||||
#endif
|
||||
|
||||
|
||||
float2 screenCoords = screenCoordsPassthrough.xy / screenCoordsPassthrough.z;
|
||||
screenCoords.y = (1-shSaturate(renderTargetFlipping))+renderTargetFlipping*screenCoords.y;
|
||||
|
||||
float2 nCoord = float2(0,0);
|
||||
|
||||
nCoord = UV * (WAVE_SCALE * 0.05) + WIND_DIR * waterTimer * (WIND_SPEED*0.04);
|
||||
float3 normal0 = 2.0 * shSample(normalMap, nCoord + float2(-waterTimer*0.015,-waterTimer*0.005)).rgb - 1.0;
|
||||
nCoord = UV * (WAVE_SCALE * 0.1) + WIND_DIR * waterTimer * (WIND_SPEED*0.08)-(normal0.xy/normal0.zz)*WAVE_CHOPPYNESS;
|
||||
float3 normal1 = 2.0 * shSample(normalMap, nCoord + float2(+waterTimer*0.020,+waterTimer*0.015)).rgb - 1.0;
|
||||
|
||||
nCoord = UV * (WAVE_SCALE * 0.25) + WIND_DIR * waterTimer * (WIND_SPEED*0.07)-(normal1.xy/normal1.zz)*WAVE_CHOPPYNESS;
|
||||
float3 normal2 = 2.0 * shSample(normalMap, nCoord + float2(-waterTimer*0.04,-waterTimer*0.03)).rgb - 1.0;
|
||||
nCoord = UV * (WAVE_SCALE * 0.5) + WIND_DIR * waterTimer * (WIND_SPEED*0.09)-(normal2.xy/normal2.z)*WAVE_CHOPPYNESS;
|
||||
float3 normal3 = 2.0 * shSample(normalMap, nCoord + float2(+waterTimer*0.03,+waterTimer*0.04)).rgb - 1.0;
|
||||
|
||||
nCoord = UV * (WAVE_SCALE* 1.0) + WIND_DIR * waterTimer * (WIND_SPEED*0.4)-(normal3.xy/normal3.zz)*WAVE_CHOPPYNESS;
|
||||
float3 normal4 = 2.0 * shSample(normalMap, nCoord + float2(-waterTimer*0.02,+waterTimer*0.1)).rgb - 1.0;
|
||||
nCoord = UV * (WAVE_SCALE * 2.0) + WIND_DIR * waterTimer * (WIND_SPEED*0.7)-(normal4.xy/normal4.zz)*WAVE_CHOPPYNESS;
|
||||
float3 normal5 = 2.0 * shSample(normalMap, nCoord + float2(+waterTimer*0.1,-waterTimer*0.06)).rgb - 1.0;
|
||||
|
||||
|
||||
|
||||
float3 normal = (normal0 * BIG_WAVES_X + normal1 * BIG_WAVES_Y +
|
||||
normal2 * MID_WAVES_X + normal3 * MID_WAVES_Y +
|
||||
normal4 * SMALL_WAVES_X + normal5 * SMALL_WAVES_Y);
|
||||
|
||||
float4 worldPosition = shMatrixMult(wMat, float4(position.xyz, 1));
|
||||
float2 relPos = (worldPosition.xy - rippleCenter.xy) / rippleAreaLength + 0.5;
|
||||
float3 normal_ripple = normalize(shSample(rippleNormalMap, relPos.xy).xyz * 2 - 1);
|
||||
|
||||
//normal = normalize(normal + normal_ripple);
|
||||
normal = normalize(float3(normal.x * BUMP + normal_ripple.x, normal.y * BUMP + normal_ripple.y, normal.z));
|
||||
normal = float3(normal.x, normal.y, -normal.z);
|
||||
|
||||
// normal for sunlight scattering
|
||||
float3 lNormal = (normal0 * BIG_WAVES_X*0.5 + normal1 * BIG_WAVES_Y*0.5 +
|
||||
normal2 * MID_WAVES_X*0.2 + normal3 * MID_WAVES_Y*0.2 +
|
||||
normal4 * SMALL_WAVES_X*0.1 + normal5 * SMALL_WAVES_Y*0.1).xyz;
|
||||
lNormal = normalize(float3(lNormal.x * BUMP, lNormal.y * BUMP, lNormal.z));
|
||||
lNormal = float3(lNormal.x, lNormal.y, -lNormal.z);
|
||||
|
||||
|
||||
float3 lVec = normalize(sunPosition.xyz);
|
||||
float3 vVec = normalize(position.xyz - cameraPos.xyz);
|
||||
|
||||
|
||||
float isUnderwater = (cameraPos.z > 0) ? 0.0 : 1.0;
|
||||
|
||||
// sunlight scattering
|
||||
float3 pNormal = float3(0,0,1);
|
||||
float3 lR = reflect(lVec, lNormal);
|
||||
float3 llR = reflect(lVec, pNormal);
|
||||
|
||||
float s = shSaturate(dot(lR, vVec)*2.0-1.2);
|
||||
float lightScatter = shadow * shSaturate(dot(-lVec,lNormal)*0.7+0.3) * s * SCATTER_AMOUNT * waterSunFade_sunHeight.x * shSaturate(1.0-exp(-waterSunFade_sunHeight.y));
|
||||
float3 scatterColour = shLerp(float3(SCATTER_COLOUR)*float3(1.0,0.4,0.0), SCATTER_COLOUR, shSaturate(1.0-exp(-waterSunFade_sunHeight.y*SUN_EXT)));
|
||||
|
||||
// fresnel
|
||||
float ior = (cameraPos.z>0)?(1.333/1.0):(1.0/1.333); //air to water; water to air
|
||||
float fresnel = fresnel_dielectric(-vVec, normal, ior);
|
||||
|
||||
fresnel = shSaturate(fresnel);
|
||||
|
||||
// reflection
|
||||
float3 reflection = shSample(reflectionMap, screenCoords+(normal.xy*REFL_BUMP)).rgb;
|
||||
|
||||
// refraction
|
||||
float3 R = reflect(vVec, normal);
|
||||
|
||||
#if REFRACTION
|
||||
float3 refraction = shSample(refractionMap, (screenCoords-(normal.xy*REFR_BUMP))*1.0).rgb;
|
||||
|
||||
// brighten up the refraction underwater
|
||||
refraction = (cameraPos.z < 0) ? shSaturate(refraction * 1.5) : refraction;
|
||||
#endif
|
||||
|
||||
// specular
|
||||
float specular = pow(max(dot(R, lVec), 0.0),SPEC_HARDNESS) * shadow;
|
||||
|
||||
#if REFRACTION
|
||||
shOutputColour(0).xyz = shLerp( shLerp(refraction, scatterColour, lightScatter), reflection, fresnel) + specular * sunSpecular.xyz;
|
||||
#else
|
||||
shOutputColour(0).xyz = shLerp(reflection, float3(0.18039, 0.23137, 0.25490), (1.0-fresnel)*0.5) + specular * sunSpecular.xyz;
|
||||
#endif
|
||||
// fog
|
||||
float fogValue = shSaturate((depthPassthrough - fogParams.y) * fogParams.w);
|
||||
shOutputColour(0).xyz = shLerp (shOutputColour(0).xyz, fogColor, fogValue);
|
||||
|
||||
#if REFRACTION
|
||||
shOutputColour(0).w = 1;
|
||||
#else
|
||||
shOutputColour(0).w = shSaturate(fresnel*2 + specular);
|
||||
#endif
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
#endif
|
15
files/materials/water.shaderset
Normal file
|
@ -0,0 +1,15 @@
|
|||
shader_set water_vertex
|
||||
{
|
||||
source water.shader
|
||||
type vertex
|
||||
profiles_cg vs_2_0 vp40 arbvp1
|
||||
profiles_hlsl vs_3_0 vs_2_0
|
||||
}
|
||||
|
||||
shader_set water_fragment
|
||||
{
|
||||
source water.shader
|
||||
type fragment
|
||||
profiles_cg ps_2_x ps_2_0 ps fp40 arbfp1
|
||||
profiles_hlsl ps_3_0 ps_2_0
|
||||
}
|
59
files/materials/watersim.mat
Normal file
|
@ -0,0 +1,59 @@
|
|||
material HeightmapSimulation
|
||||
{
|
||||
allow_fixed_function false
|
||||
pass
|
||||
{
|
||||
depth_check off
|
||||
depth_write off
|
||||
vertex_program transform_vertex
|
||||
fragment_program watersim_fragment
|
||||
|
||||
texture_unit heightPrevSampler
|
||||
{
|
||||
tex_address_mode border
|
||||
tex_border_colour 0 0 0
|
||||
texture_alias Heightmap0
|
||||
}
|
||||
texture_unit heightCurrentSampler
|
||||
{
|
||||
tex_address_mode border
|
||||
tex_border_colour 0 0 0
|
||||
texture_alias Heightmap1
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
material HeightToNormalMap
|
||||
{
|
||||
allow_fixed_function false
|
||||
pass
|
||||
{
|
||||
depth_check off
|
||||
depth_write off
|
||||
vertex_program transform_vertex
|
||||
fragment_program height_to_normal_fragment
|
||||
|
||||
texture_unit heightCurrentSampler
|
||||
{
|
||||
texture_alias Heightmap2
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
material AddImpulse
|
||||
{
|
||||
allow_fixed_function false
|
||||
pass
|
||||
{
|
||||
depth_check off
|
||||
depth_write off
|
||||
scene_blend alpha_blend
|
||||
vertex_program transform_vertex
|
||||
fragment_program add_impulse_fragment
|
||||
|
||||
texture_unit alphaMap
|
||||
{
|
||||
texture circle.png
|
||||
}
|
||||
}
|
||||
}
|
31
files/materials/watersim.shaderset
Normal file
|
@ -0,0 +1,31 @@
|
|||
shader_set transform_vertex
|
||||
{
|
||||
source quad.shader
|
||||
type vertex
|
||||
profiles_cg vs_2_0 vp40 arbvp1
|
||||
profiles_hlsl vs_2_0
|
||||
}
|
||||
|
||||
shader_set watersim_fragment
|
||||
{
|
||||
source watersim_heightmap.shader
|
||||
type fragment
|
||||
profiles_cg ps_3_0 ps_2_x ps_2_0 fp40 arbfp1
|
||||
profiles_hlsl ps_3_0 ps_2_0
|
||||
}
|
||||
|
||||
shader_set height_to_normal_fragment
|
||||
{
|
||||
source watersim_heighttonormal.shader
|
||||
type fragment
|
||||
profiles_cg ps_3_0 ps_2_x ps_2_0 fp40 arbfp1
|
||||
profiles_hlsl ps_3_0 ps_2_0
|
||||
}
|
||||
|
||||
shader_set add_impulse_fragment
|
||||
{
|
||||
source watersim_addimpulse.shader
|
||||
type fragment
|
||||
profiles_cg ps_3_0 ps_2_x ps_2_0 fp40 arbfp1
|
||||
profiles_hlsl ps_3_0 ps_2_0
|
||||
}
|
12
files/materials/watersim_addimpulse.shader
Normal file
|
@ -0,0 +1,12 @@
|
|||
#include "core.h"
|
||||
#include "watersim_common.h"
|
||||
|
||||
SH_BEGIN_PROGRAM
|
||||
shInput(float2, UV)
|
||||
shSampler2D(alphaMap)
|
||||
|
||||
SH_START_PROGRAM
|
||||
{
|
||||
shOutputColour(0) = EncodeHeightmap(1.0);
|
||||
shOutputColour(0).a = shSample (alphaMap, UV.xy).a;
|
||||
}
|
25
files/materials/watersim_common.h
Normal file
|
@ -0,0 +1,25 @@
|
|||
float DecodeHeightmap(float4 heightmap)
|
||||
{
|
||||
float4 table = float4(1.0, -1.0, 0.0, 0.0);
|
||||
return dot(heightmap, table);
|
||||
}
|
||||
|
||||
float DecodeHeightmap(shTexture2D HeightmapSampler, float2 texcoord)
|
||||
{
|
||||
float4 heightmap = shSample(HeightmapSampler, texcoord);
|
||||
return DecodeHeightmap(heightmap);
|
||||
}
|
||||
|
||||
float4 EncodeHeightmap(float fHeight)
|
||||
{
|
||||
float h = fHeight;
|
||||
float positive = fHeight > 0.0 ? fHeight : 0.0;
|
||||
float negative = fHeight < 0.0 ? -fHeight : 0.0;
|
||||
|
||||
float4 color = float4(0,0,0,0);
|
||||
|
||||
color.r = positive;
|
||||
color.g = negative;
|
||||
|
||||
return color;
|
||||
}
|
51
files/materials/watersim_heightmap.shader
Normal file
|
@ -0,0 +1,51 @@
|
|||
#include "core.h"
|
||||
|
||||
#define DAMPING 0.95
|
||||
|
||||
#include "watersim_common.h"
|
||||
|
||||
SH_BEGIN_PROGRAM
|
||||
shInput(float2, UV)
|
||||
shSampler2D(heightPrevSampler)
|
||||
shSampler2D(heightCurrentSampler)
|
||||
shUniform(float3, previousFrameOffset) @shSharedParameter(previousFrameOffset, previousFrameOffset)
|
||||
shUniform(float3, currentFrameOffset) @shSharedParameter(currentFrameOffset, currentFrameOffset)
|
||||
shUniform(float4, rippleTextureSize) @shSharedParameter(rippleTextureSize, rippleTextureSize)
|
||||
|
||||
SH_START_PROGRAM
|
||||
{
|
||||
#if !SH_HLSL
|
||||
const float3 offset[4] = float3[4](
|
||||
float3(-1.0, 0.0, 0.25),
|
||||
float3( 1.0, 0.0, 0.25),
|
||||
float3( 0.0,-1.0, 0.25),
|
||||
float3( 0.0, 1.0, 0.25)
|
||||
);
|
||||
#else
|
||||
const float3 offset[4] = {
|
||||
float3(-1.0, 0.0, 0.25),
|
||||
float3( 1.0, 0.0, 0.25),
|
||||
float3( 0.0,-1.0, 0.25),
|
||||
float3( 0.0, 1.0, 0.25)
|
||||
};
|
||||
#endif
|
||||
|
||||
float fHeightPrev = DecodeHeightmap(heightPrevSampler, UV.xy + previousFrameOffset.xy + currentFrameOffset.xy);
|
||||
|
||||
float fNeighCurrent = 0;
|
||||
for ( int i=0; i<4; i++ )
|
||||
{
|
||||
float2 vTexcoord = UV + currentFrameOffset.xy + offset[i].xy * rippleTextureSize.xy;
|
||||
fNeighCurrent += (DecodeHeightmap(heightCurrentSampler, vTexcoord) * offset[i].z);
|
||||
}
|
||||
|
||||
float fHeight = fNeighCurrent * 2.0 - fHeightPrev;
|
||||
|
||||
fHeight *= DAMPING;
|
||||
|
||||
shOutputColour(0) = EncodeHeightmap(fHeight);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
36
files/materials/watersim_heighttonormal.shader
Normal file
|
@ -0,0 +1,36 @@
|
|||
#include "core.h"
|
||||
#include "watersim_common.h"
|
||||
|
||||
SH_BEGIN_PROGRAM
|
||||
shInput(float2, UV)
|
||||
shSampler2D(heightCurrentSampler)
|
||||
shUniform(float4, rippleTextureSize) @shSharedParameter(rippleTextureSize, rippleTextureSize)
|
||||
|
||||
SH_START_PROGRAM
|
||||
{
|
||||
#if !SH_HLSL
|
||||
float2 offset[4] = float2[4] (
|
||||
float2(-1.0, 0.0),
|
||||
float2( 1.0, 0.0),
|
||||
float2( 0.0,-1.0),
|
||||
float2( 0.0, 1.0)
|
||||
);
|
||||
#else
|
||||
float2 offset[4] = {
|
||||
float2(-1.0, 0.0),
|
||||
float2( 1.0, 0.0),
|
||||
float2( 0.0,-1.0),
|
||||
float2( 0.0, 1.0)
|
||||
};
|
||||
#endif
|
||||
|
||||
float fHeightL = DecodeHeightmap(heightCurrentSampler, UV.xy + offset[0]*rippleTextureSize.xy);
|
||||
float fHeightR = DecodeHeightmap(heightCurrentSampler, UV.xy + offset[1]*rippleTextureSize.xy);
|
||||
float fHeightT = DecodeHeightmap(heightCurrentSampler, UV.xy + offset[2]*rippleTextureSize.xy);
|
||||
float fHeightB = DecodeHeightmap(heightCurrentSampler, UV.xy + offset[3]*rippleTextureSize.xy);
|
||||
|
||||
float3 n = float3(fHeightB - fHeightT, fHeightR - fHeightL, 1.0);
|
||||
float3 normal = (n + 1.0) * 0.5;
|
||||
|
||||
shOutputColour(0) = float4(normal.rgb, 1.0);
|
||||
}
|
91
files/mygui/CMakeLists.txt
Normal file
|
@ -0,0 +1,91 @@
|
|||
|
||||
# Copy resource files into the build directory
|
||||
set(SDIR ${CMAKE_CURRENT_SOURCE_DIR})
|
||||
set(DDIR ${OpenMW_BINARY_DIR}/resources/mygui)
|
||||
|
||||
set(MYGUI_FILES
|
||||
bigbars.png
|
||||
black.png
|
||||
core.skin
|
||||
core.xml
|
||||
EBGaramond-Regular.ttf
|
||||
Obliviontt.zip
|
||||
openmw_alchemy_window.layout
|
||||
openmw_book.layout
|
||||
openmw_box.skin.xml
|
||||
openmw_button.skin.xml
|
||||
openmw_chargen_birth.layout
|
||||
openmw_chargen_class_description.layout
|
||||
openmw_chargen_class.layout
|
||||
openmw_chargen_create_class.layout
|
||||
openmw_chargen_generate_class_result.layout
|
||||
openmw_chargen_race.layout
|
||||
openmw_chargen_review.layout
|
||||
openmw_chargen_select_attribute.layout
|
||||
openmw_chargen_select_skill.layout
|
||||
openmw_chargen_select_specialization.layout
|
||||
openmw_confirmation_dialog.layout
|
||||
openmw_console.layout
|
||||
openmw_console.skin.xml
|
||||
openmw_container_window.layout
|
||||
openmw_count_window.layout
|
||||
openmw_dialogue_window.layout
|
||||
openmw_dialogue_window_skin.xml
|
||||
openmw_edit.skin.xml
|
||||
openmw_font.xml
|
||||
openmw_hud_box.skin.xml
|
||||
openmw_hud_energybar.skin.xml
|
||||
openmw_hud.layout
|
||||
openmw_infobox.layout
|
||||
openmw_interactive_messagebox.layout
|
||||
openmw_inventory_window.layout
|
||||
openmw_journal.layout
|
||||
openmw_journal_skin.xml
|
||||
openmw_layers.xml
|
||||
openmw_list.skin.xml
|
||||
openmw_mainmenu.layout
|
||||
openmw_mainmenu_skin.xml
|
||||
openmw_map_window.layout
|
||||
openmw_map_window_skin.xml
|
||||
openmw_messagebox.layout
|
||||
openmw_pointer.xml
|
||||
openmw_progress.skin.xml
|
||||
openmw_resources.xml
|
||||
openmw_scroll.layout
|
||||
openmw_scroll_skin.xml
|
||||
openmw_settings_window.layout
|
||||
openmw_settings.xml
|
||||
openmw_spell_window.layout
|
||||
openmw_stats_window.layout
|
||||
openmw_text_input.layout
|
||||
openmw_text.skin.xml
|
||||
openmw_tooltips.layout
|
||||
openmw_trade_window.layout
|
||||
openmw_spell_buying_window.layout
|
||||
openmw_windows.skin.xml
|
||||
openmw_quickkeys_menu.layout
|
||||
openmw_quickkeys_menu_assign.layout
|
||||
openmw_itemselection_dialog.layout
|
||||
openmw_magicselection_dialog.layout
|
||||
openmw_spell_buying_window.layout
|
||||
openmw_loading_screen.layout
|
||||
openmw_levelup_dialog.layout
|
||||
openmw_wait_dialog.layout
|
||||
openmw_wait_dialog_progressbar.layout
|
||||
openmw_spellcreation_dialog.layout
|
||||
openmw_edit_effect.layout
|
||||
openmw_enchanting_dialog.layout
|
||||
openmw_trainingwindow.layout
|
||||
openmw_travel_window.layout
|
||||
openmw_persuasion_dialog.layout
|
||||
openmw_merchantrepair.layout
|
||||
openmw_repair.layout
|
||||
openmw_companion_window.layout
|
||||
smallbars.png
|
||||
DejaVuLGCSansMono.ttf
|
||||
markers.png
|
||||
../launcher/images/openmw.png
|
||||
)
|
||||
|
||||
|
||||
copy_all_files(${CMAKE_CURRENT_SOURCE_DIR} ${DDIR} "${MYGUI_FILES}")
|
BIN
files/mygui/DejaVuLGCSansMono.ttf
Normal file
BIN
files/mygui/EBGaramond-Regular.ttf
Normal file
BIN
files/mygui/Obliviontt.zip
Normal file
BIN
files/mygui/bigbars.png
Normal file
After Width: | Height: | Size: 387 B |
BIN
files/mygui/black.png
Normal file
After Width: | Height: | Size: 103 B |
19
files/mygui/core.skin
Normal file
|
@ -0,0 +1,19 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<MyGUI type="Skin">
|
||||
<Skin name = "TextBox" size = "16 16">
|
||||
<Property key="FontHeight" value = "16" />
|
||||
<Property key="TextAlign" value = "ALIGN_DEFAULT" />
|
||||
<Property key="TextColour" value = "0.7 0.7 0.7" />
|
||||
|
||||
<BasisSkin type="SimpleText" offset = "0 0 16 16" align = "ALIGN_STRETCH"/>
|
||||
</Skin>
|
||||
|
||||
<Skin name = "ImageBox" size = "16 16">
|
||||
<BasisSkin type="MainSkin" offset = "0 0 16 16"/>
|
||||
</Skin>
|
||||
|
||||
<Skin name = "RotatingSkin" size = "16 16">
|
||||
<BasisSkin type="RotatingSkin" offset="0 0 16 16" align="Stretch"/>
|
||||
</Skin>
|
||||
</MyGUI>
|
27
files/mygui/core.xml
Normal file
|
@ -0,0 +1,27 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<MyGUI>
|
||||
<MyGUI type="List">
|
||||
<List file="core.skin" />
|
||||
<List file="openmw_resources.xml" />
|
||||
<List file="openmw_layers.xml" />
|
||||
<List file="openmw_pointer.xml" />
|
||||
<List file="openmw_font.xml" />
|
||||
<List file="openmw_text.skin.xml" />
|
||||
<List file="openmw_windows.skin.xml" />
|
||||
<List file="openmw_button.skin.xml" />
|
||||
<List file="openmw_list.skin.xml" />
|
||||
<List file="openmw_edit.skin.xml" />
|
||||
<List file="openmw_box.skin.xml" />
|
||||
<List file="openmw_progress.skin.xml" />
|
||||
<List file="openmw_hud_energybar.skin.xml" />
|
||||
<List file="openmw_hud_box.skin.xml" />
|
||||
<List file="openmw_mainmenu_skin.xml" />
|
||||
<List file="openmw_console.skin.xml" />
|
||||
<List file="openmw_journal_skin.xml" />
|
||||
<List file="openmw_map_window_skin.xml" />
|
||||
<List file="openmw_dialogue_window_skin.xml" />
|
||||
<List file="openmw_scroll_skin.xml" />
|
||||
<List file="openmw_settings.xml" />
|
||||
</MyGUI>
|
||||
</MyGUI>
|
||||
|
25
files/mygui/core_layouteditor.xml
Normal file
|
@ -0,0 +1,25 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<MyGUI>
|
||||
<MyGUI type="List">
|
||||
<List file="core.skin"/>
|
||||
<List file="openmw_resources.xml"/>
|
||||
<List file="openmw_font.xml"/>
|
||||
<List file="openmw_text.skin.xml"/>
|
||||
<List file="openmw_windows.skin.xml"/>
|
||||
<List file="openmw_button.skin.xml"/>
|
||||
<List file="openmw_list.skin.xml"/>
|
||||
<List file="openmw_edit.skin.xml"/>
|
||||
<List file="openmw_box.skin.xml"/>
|
||||
<List file="openmw_progress.skin.xml"/>
|
||||
<List file="openmw_hud_energybar.skin.xml"/>
|
||||
<List file="openmw_hud_box.skin.xml"/>
|
||||
<List file="openmw_mainmenu_skin.xml"/>
|
||||
<List file="openmw_console.skin.xml"/>
|
||||
<List file="openmw_journal_skin.xml"/>
|
||||
<List file="openmw_map_window_skin.xml"/>
|
||||
<List file="openmw_dialogue_window_skin.xml"/>
|
||||
<List file="openmw_scroll_skin.xml"/>
|
||||
<List file="openmw_settings.xml"/>
|
||||
</MyGUI>
|
||||
</MyGUI>
|
||||
|
BIN
files/mygui/markers.png
Normal file
After Width: | Height: | Size: 245 B |
109
files/mygui/openmw_alchemy_window.layout
Normal file
|
@ -0,0 +1,109 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<MyGUI type="Layout">
|
||||
<Widget type="Window" skin="MW_Window_NoCaption" layer="Windows" position="0 0 588 444" name="_Main">
|
||||
<Property key="MinSize" value="425 360"/>
|
||||
|
||||
<!-- Name -->
|
||||
|
||||
<Widget type="TextBox" skin="SandText" position="10 10 65 24">
|
||||
<Property key="Caption" value="#{sName}"/>
|
||||
<Property key="TextAlign" value="Left"/>
|
||||
</Widget>
|
||||
|
||||
<Widget type="EditBox" skin="MW_TextEdit" position="70 10 492 24" align="Top Left HStretch" name="NameEdit"/>
|
||||
|
||||
|
||||
<!-- Apparatus -->
|
||||
|
||||
<Widget type="TextBox" skin="SandText" position="10 40 260 24">
|
||||
<Property key="Caption" value="#{sApparatus}"/>
|
||||
<Property key="TextAlign" value="Left"/>
|
||||
</Widget>
|
||||
|
||||
<Widget type="Widget" skin="" position="10 66 260 50">
|
||||
|
||||
<Widget type="Widget" skin="MW_Box" position="0 0 50 50">
|
||||
<Widget type="ImageBox" skin="ImageBox" position="9 9 32 32" name="Apparatus1"/>
|
||||
</Widget>
|
||||
|
||||
<Widget type="Widget" skin="MW_Box" position="60 0 50 50">
|
||||
<Widget type="ImageBox" skin="ImageBox" position="9 9 32 32" name="Apparatus2"/>
|
||||
</Widget>
|
||||
|
||||
<Widget type="Widget" skin="MW_Box" position="120 0 50 50">
|
||||
<Widget type="ImageBox" skin="ImageBox" position="9 9 32 32" name="Apparatus3"/>
|
||||
</Widget>
|
||||
|
||||
<Widget type="Widget" skin="MW_Box" position="180 0 50 50">
|
||||
<Widget type="ImageBox" skin="ImageBox" position="9 9 32 32" name="Apparatus4"/>
|
||||
</Widget>
|
||||
|
||||
</Widget>
|
||||
|
||||
|
||||
<!-- Used Ingredients -->
|
||||
|
||||
<Widget type="TextBox" skin="SandText" position="10 120 260 24">
|
||||
<Property key="Caption" value="#{sIngredients}"/>
|
||||
<Property key="TextAlign" value="Left"/>
|
||||
</Widget>
|
||||
|
||||
<Widget type="Widget" skin="" position="10 146 260 50">
|
||||
|
||||
<Widget type="Widget" skin="MW_Box" position="0 0 50 50">
|
||||
<Widget type="ImageBox" skin="ImageBox" position="9 9 32 32" name="Ingredient1"/>
|
||||
</Widget>
|
||||
|
||||
<Widget type="Widget" skin="MW_Box" position="60 0 50 50">
|
||||
<Widget type="ImageBox" skin="ImageBox" position="9 9 32 32" name="Ingredient2"/>
|
||||
</Widget>
|
||||
|
||||
<Widget type="Widget" skin="MW_Box" position="120 0 50 50">
|
||||
<Widget type="ImageBox" skin="ImageBox" position="9 9 32 32" name="Ingredient3"/>
|
||||
</Widget>
|
||||
|
||||
<Widget type="Widget" skin="MW_Box" position="180 0 50 50">
|
||||
<Widget type="ImageBox" skin="ImageBox" position="9 9 32 32" name="Ingredient4"/>
|
||||
</Widget>
|
||||
|
||||
</Widget>
|
||||
|
||||
|
||||
<!-- Available Ingredients -->
|
||||
|
||||
<Widget type="ItemView" skin="MW_ItemView" position="10 206 552 158" name="ItemView" align="Left Top Stretch"/>
|
||||
|
||||
|
||||
<!-- Created Effects -->
|
||||
|
||||
<Widget type="TextBox" skin="SandText" position="250 40 320 24">
|
||||
<Property key="Caption" value="#{sCreatedEffects}"/>
|
||||
<Property key="TextAlign" value="Left"/>
|
||||
</Widget>
|
||||
|
||||
<Widget type="Widget" skin="MW_Box" position="250 66 312 130" align="Top Left HStretch">
|
||||
<Widget type="Widget" skin="" position="4 4 316 122" name="CreatedEffects" align="HStretch"/>
|
||||
</Widget>
|
||||
|
||||
|
||||
<!-- Buttons -->
|
||||
|
||||
<Widget type="HBox" skin="" position="110 374 452 24" align="Bottom Right">
|
||||
|
||||
<Widget type="Widget">
|
||||
<UserString key="HStretch" value="true"/>
|
||||
</Widget>
|
||||
|
||||
<Widget type="AutoSizedButton" skin="MW_Button" name="CreateButton">
|
||||
<Property key="Caption" value="#{sCreate}"/>
|
||||
</Widget>
|
||||
|
||||
<Widget type="AutoSizedButton" skin="MW_Button" name="CancelButton">
|
||||
<Property key="Caption" value="#{sCancel}"/>
|
||||
</Widget>
|
||||
|
||||
</Widget>
|
||||
|
||||
</Widget>
|
||||
</MyGUI>
|
50
files/mygui/openmw_book.layout
Normal file
|
@ -0,0 +1,50 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<MyGUI type="Layout">
|
||||
|
||||
<Widget type="Window" skin="" layer="Windows" align="Left|Top" position="0 0 565 390" name="_Main">
|
||||
|
||||
<Widget type="ImageBox" skin="ImageBox" position="-70 0 705 390" align="Top|Right" name="JImage">
|
||||
<Property key="ImageTexture" value="textures\tx_menubook.dds"/>
|
||||
<Widget type="Widget" position="70 0 565 390" align="Top|Right">
|
||||
|
||||
<Widget type="Widget" position="0 0 282 390">
|
||||
<Widget type="ImageButton" skin="ImageBox" position="205 350 48 32" name="PrevPageBTN">
|
||||
<Property key="ImageHighlighted" value="textures\tx_menubook_prev_over.dds"/>
|
||||
<Property key="ImageNormal" value="textures\tx_menubook_prev_idle.dds"/>
|
||||
<Property key="ImagePushed" value="textures\tx_menubook_prev_pressed.dds"/>
|
||||
</Widget>
|
||||
</Widget>
|
||||
<Widget type="Widget" position="282 0 282 390">
|
||||
<Widget type="ImageButton" skin="ImageBox" position="18 350 48 32" name="NextPageBTN">
|
||||
<Property key="ImageHighlighted" value="textures\tx_menubook_next_over.dds"/>
|
||||
<Property key="ImageNormal" value="textures\tx_menubook_next_idle.dds"/>
|
||||
<Property key="ImagePushed" value="textures\tx_menubook_next_pressed.dds"/>
|
||||
</Widget>
|
||||
</Widget>
|
||||
|
||||
<Widget type="ImageButton" skin="ImageBox" position="40 350 64 32" name="TakeButton">
|
||||
<Property key="ImageHighlighted" value="textures\tx_menubook_take_over.dds"/>
|
||||
<Property key="ImageNormal" value="textures\tx_menubook_take_idle.dds"/>
|
||||
<Property key="ImagePushed" value="textures\tx_menubook_take_pressed.dds"/>
|
||||
</Widget>
|
||||
<Widget type="ImageButton" skin="ImageBox" position="460 350 48 32" name="CloseButton">
|
||||
<Property key="ImageHighlighted" value="textures\tx_menubook_close_over.dds"/>
|
||||
<Property key="ImageNormal" value="textures\tx_menubook_close_idle.dds"/>
|
||||
<Property key="ImagePushed" value="textures\tx_menubook_close_pressed.dds"/>
|
||||
</Widget>
|
||||
|
||||
<Widget type="TextBox" skin="NormalText" position="150 350 32 16" name="LeftPageNumber">
|
||||
<Property key="TextColour" value="0 0 0"/>
|
||||
</Widget>
|
||||
<Widget type="TextBox" skin="NormalText" position="410 350 32 16" name="RightPageNumber">
|
||||
<Property key="TextColour" value="0 0 0"/>
|
||||
</Widget>
|
||||
|
||||
<Widget type="Widget" skin="" position="30 22 240 300" name="LeftPage"/>
|
||||
<Widget type="Widget" skin="" position="300 22 240 300" name="RightPage"/>
|
||||
</Widget>
|
||||
</Widget>
|
||||
</Widget>
|
||||
|
||||
</MyGUI>
|
76
files/mygui/openmw_box.skin.xml
Normal file
|
@ -0,0 +1,76 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<!-- This file defines the box you see around many GUI elements, such
|
||||
as around the sections of the stats window, or around popup info windows -->
|
||||
|
||||
<MyGUI type="Skin">
|
||||
<!-- Box borders -->
|
||||
<Skin name="IB_T" size="512 2" texture="textures\menu_thin_border_top.dds">
|
||||
<BasisSkin type="TileRect" offset="0 0 512 2" align="HStretch">
|
||||
<State name="normal" offset="0 0 512 2">
|
||||
<Property key="TileSize" value="512 2"/>
|
||||
<Property key="TileH" value="true"/>
|
||||
<Property key="TileV" value="true"/>
|
||||
</State>
|
||||
</BasisSkin>
|
||||
</Skin>
|
||||
<Skin name="IB_B" size="512 2" texture="textures\menu_thin_border_bottom.dds">
|
||||
<BasisSkin type="TileRect" offset="0 0 512 2" align="HStretch">
|
||||
<State name="normal" offset="0 0 512 2">
|
||||
<Property key="TileSize" value="512 2"/>
|
||||
<Property key="TileH" value="true"/>
|
||||
<Property key="TileV" value="true"/>
|
||||
</State>
|
||||
</BasisSkin>
|
||||
</Skin>
|
||||
<Skin name="IB_L" size="2 512" texture="textures\menu_thin_border_left.dds">
|
||||
<BasisSkin type="TileRect" offset="0 0 2 512" align="VStretch">
|
||||
<State name="normal" offset="0 0 2 512">
|
||||
<Property key="TileSize" value="2 512"/>
|
||||
<Property key="TileH" value="true"/>
|
||||
<Property key="TileV" value="true"/>
|
||||
</State>
|
||||
</BasisSkin>
|
||||
</Skin>
|
||||
<Skin name="IB_R" size="2 512" texture="textures\menu_thin_border_right.dds">
|
||||
<BasisSkin type="TileRect" offset="0 0 2 512" align="VStretch">
|
||||
<State name="normal" offset="0 0 2 512">
|
||||
<Property key="TileSize" value="2 512"/>
|
||||
<Property key="TileH" value="true"/>
|
||||
<Property key="TileV" value="true"/>
|
||||
</State>
|
||||
</BasisSkin>
|
||||
</Skin>
|
||||
<Skin name="IB_TL" size="2 2" texture="textures\menu_thin_border_top_left_corner.dds">
|
||||
<BasisSkin type="MainSkin" offset="0 0 2 2">
|
||||
<State name="normal" offset="0 0 2 2"/>
|
||||
</BasisSkin>
|
||||
</Skin>
|
||||
<Skin name="IB_TR" size="2 2" texture="textures\menu_thin_border_top_right_corner.dds">
|
||||
<BasisSkin type="MainSkin" offset="0 0 2 2">
|
||||
<State name="normal" offset="0 0 2 2"/>
|
||||
</BasisSkin>
|
||||
</Skin>
|
||||
<Skin name="IB_BL" size="2 2" texture="textures\menu_thin_border_bottom_left_corner.dds">
|
||||
<BasisSkin type="MainSkin" offset="0 0 2 2">
|
||||
<State name="normal" offset="0 0 2 2"/>
|
||||
</BasisSkin>
|
||||
</Skin>
|
||||
<Skin name="IB_BR" size="2 2" texture="textures\menu_thin_border_bottom_right_corner.dds">
|
||||
<BasisSkin type="MainSkin" offset="0 0 2 2">
|
||||
<State name="normal" offset="0 0 2 2"/>
|
||||
</BasisSkin>
|
||||
</Skin>
|
||||
|
||||
<!-- Main box definition -->
|
||||
<Skin name="MW_Box" size="516 516">
|
||||
<Child type="Widget" skin="IB_T" offset="2 0 512 2" align="Top HStretch"/>
|
||||
<Child type="Widget" skin="IB_B" offset="2 514 512 2" align="Bottom HStretch"/>
|
||||
<Child type="Widget" skin="IB_L" offset="0 2 2 512" align="Left VStretch"/>
|
||||
<Child type="Widget" skin="IB_R" offset="514 2 2 512" align="Right VStretch"/>
|
||||
<Child type="Widget" skin="IB_TL" offset="0 0 2 2" align="Top Left"/>
|
||||
<Child type="Widget" skin="IB_TR" offset="514 0 2 2" align="Top Right"/>
|
||||
<Child type="Widget" skin="IB_BL" offset="0 514 2 2" align="Bottom Left"/>
|
||||
<Child type="Widget" skin="IB_BR" offset="514 514 2 2" align="Bottom Right"/>
|
||||
</Skin>
|
||||
</MyGUI>
|
87
files/mygui/openmw_button.skin.xml
Normal file
|
@ -0,0 +1,87 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<MyGUI type="Skin">
|
||||
<!-- Button graphics -->
|
||||
<Skin name="BTN_Top" size="128 4" texture="textures\menu_button_frame_top.dds">
|
||||
<BasisSkin type="TileRect" offset="0 0 128 4" align="HStretch">
|
||||
<State name="normal" offset="0 0 128 4">
|
||||
<Property key="TileSize" value="128 4"/>
|
||||
<Property key="TileH" value="true"/>
|
||||
<Property key="TileV" value="true"/>
|
||||
</State>
|
||||
</BasisSkin>
|
||||
</Skin>
|
||||
<Skin name="BTN_Bottom" size="128 4" texture="textures\menu_button_frame_bottom.dds">
|
||||
<BasisSkin type="TileRect" offset="0 0 128 4" align="HStretch">
|
||||
<State name="normal" offset="0 0 128 4">
|
||||
<Property key="TileSize" value="128 4"/>
|
||||
<Property key="TileH" value="true"/>
|
||||
<Property key="TileV" value="true"/>
|
||||
</State>
|
||||
</BasisSkin>
|
||||
</Skin>
|
||||
<Skin name="BTN_Left" size="4 16" texture="textures\menu_button_frame_left.dds">
|
||||
<BasisSkin type="TileRect" offset="0 0 4 16" align="VStretch">
|
||||
<State name="normal" offset="0 0 4 16">
|
||||
<Property key="TileSize" value="4 16"/>
|
||||
<Property key="TileH" value="true"/>
|
||||
<Property key="TileV" value="true"/>
|
||||
</State>
|
||||
</BasisSkin>
|
||||
</Skin>
|
||||
<Skin name="BTN_Right" size="4 16" texture="textures\menu_button_frame_right.dds">
|
||||
<BasisSkin type="TileRect" offset="0 0 4 16" align="VStretch">
|
||||
<State name="normal" offset="0 0 4 16">
|
||||
<Property key="TileSize" value="4 16"/>
|
||||
<Property key="TileH" value="true"/>
|
||||
<Property key="TileV" value="true"/>
|
||||
</State>
|
||||
</BasisSkin>
|
||||
</Skin>
|
||||
<Skin name="BTN_TopLeft" size="4 4" texture="textures\menu_button_frame_top_left_corner.dds">
|
||||
<BasisSkin type="MainSkin" offset="0 0 4 4">
|
||||
<State name="normal" offset="0 0 4 4"/>
|
||||
</BasisSkin>
|
||||
</Skin>
|
||||
<Skin name="BTN_TopRight" size="4 4" texture="textures\menu_button_frame_top_right_corner.dds">
|
||||
<BasisSkin type="MainSkin" offset="0 0 4 4">
|
||||
<State name="normal" offset="0 0 4 4"/>
|
||||
</BasisSkin>
|
||||
</Skin>
|
||||
<Skin name="BTN_BottomLeft" size="4 4" texture="textures\menu_button_frame_bottom_left_corner.dds">
|
||||
<BasisSkin type="MainSkin" offset="0 0 4 4">
|
||||
<State name="normal" offset="0 0 4 4"/>
|
||||
</BasisSkin>
|
||||
</Skin>
|
||||
<Skin name="BTN_BottomRight" size="4 4" texture="textures\menu_button_frame_bottom_right_corner.dds">
|
||||
<BasisSkin type="MainSkin" offset="0 0 4 4">
|
||||
<State name="normal" offset="0 0 4 4"/>
|
||||
</BasisSkin>
|
||||
</Skin>
|
||||
|
||||
<!-- Button widget -->
|
||||
<Skin name="MW_Button" size="136 24">
|
||||
<Property key="FontName" value="Default"/>
|
||||
<Property key="TextAlign" value="Center"/>
|
||||
|
||||
<Child type="Widget" skin="BTN_Left" offset="0 4 4 16" align="VStretch Left"/>
|
||||
<Child type="Widget" skin="BTN_Right" offset="132 4 4 16" align="VStretch Right"/>
|
||||
<Child type="Widget" skin="BTN_Top" offset="4 0 128 4" align="HStretch Top"/>
|
||||
<Child type="Widget" skin="BTN_Bottom" offset="4 20 128 4" align="HStretch Bottom"/>
|
||||
<Child type="Widget" skin="BTN_TopLeft" offset="0 0 4 4" align="Top Left"/>
|
||||
<Child type="Widget" skin="BTN_TopRight" offset="132 0 4 4" align="Top Right"/>
|
||||
<Child type="Widget" skin="BTN_BottomLeft" offset="0 20 4 4" align="Bottom Left"/>
|
||||
<Child type="Widget" skin="BTN_BottomRight" offset="132 20 4 4" align="Bottom Right"/>
|
||||
|
||||
<BasisSkin type="SimpleText" offset="4 4 128 16" align="Stretch">
|
||||
<State name="disabled" colour="0.6 0.56 0.45" shift="0"/>
|
||||
<State name="normal" colour="0.75 0.6 0.35" shift="0"/>
|
||||
<State name="highlighted" colour="0.85 0.76 0.60" shift="0"/>
|
||||
<State name="pushed" colour="1 1 1" shift="0"/>
|
||||
<State name="disabled_checked" colour="0.33 0.38 0.67" shift="0"/>
|
||||
<State name="normal_checked" colour="0.33 0.38 0.67" shift="0"/>
|
||||
<State name="highlighted_checked" colour="0.33 0.38 0.67" shift="0"/>
|
||||
<State name="pushed_checked" colour="0.33 0.38 0.67" shift="0"/>
|
||||
</BasisSkin>
|
||||
</Skin>
|
||||
</MyGUI>
|
30
files/mygui/openmw_chargen_birth.layout
Normal file
|
@ -0,0 +1,30 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<MyGUI type="Layout">
|
||||
<Widget type="Window" skin="MW_Dialog" layer="Windows" position="0 0 491 378" name="_Main">
|
||||
|
||||
<!-- Birthsign list -->
|
||||
<Widget type="ListBox" skin="MW_List" position="8 8 196 137" name="BirthsignList"/>
|
||||
|
||||
<!-- Birthsign image -->
|
||||
<Widget type="Widget" skin="MW_Box" position="212 8 263 137" align="Left Top">
|
||||
<Widget type="ImageBox" skin="ImageBox" position="2 2 259 133" name="BirthsignImage" align="Left Top"/>
|
||||
</Widget>
|
||||
|
||||
<!-- Spell list -->
|
||||
<Widget type="Widget" skin="" position="8 160 465 178" align="Left Top" name="SpellArea"/>
|
||||
|
||||
<!-- Dialog buttons -->
|
||||
<Widget type="HBox" position="0 338 475 24">
|
||||
<Widget type="Widget">
|
||||
<UserString key="HStretch" value="true"/>
|
||||
</Widget>
|
||||
<Widget type="AutoSizedButton" skin="MW_Button" name="BackButton">
|
||||
<Property key="Caption" value="#{sBack}"/>
|
||||
</Widget>
|
||||
<Widget type="AutoSizedButton" skin="MW_Button" name="OKButton">
|
||||
<Property key="Caption" value="OK"/>
|
||||
</Widget>
|
||||
</Widget>
|
||||
|
||||
</Widget>
|
||||
</MyGUI>
|
81
files/mygui/openmw_chargen_class.layout
Normal file
|
@ -0,0 +1,81 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<MyGUI type="Layout">
|
||||
<Widget type="Window" skin="MW_Dialog" layer="Windows" position="0 0 478 316" name="_Main">
|
||||
|
||||
<!-- Class list -->
|
||||
<Widget type="ListBox" skin="MW_List" position="8 8 181 138" name="ClassList"/>
|
||||
|
||||
<!-- Class image -->
|
||||
<Widget type="Widget" skin="MW_Box" position="197 8 265 138" align="Left Top">
|
||||
<Widget type="ImageBox" skin="ImageBox" position="2 2 261 134" name="ClassImage" align="Left Top"/>
|
||||
</Widget>
|
||||
|
||||
<!-- Specialization -->
|
||||
<Widget type="Widget" skin="" position="15 156 484 178" align="Left Top">
|
||||
|
||||
<Widget type="TextBox" skin="HeaderText" position="0 0 162 18" name="SpecializationT" align="Left Top">
|
||||
<Property key="Caption" value="#{sChooseClassMenu1}"/>
|
||||
<Property key="TextAlign" value="Left Top"/>
|
||||
<UserString key="ToolTipType" value="Layout"/>
|
||||
<UserString key="ToolTipLayout" value="TextToolTip"/>
|
||||
<UserString key="Caption_Text" value="#{sCreateClassMenuHelp1}"/>
|
||||
</Widget>
|
||||
|
||||
<Widget type="TextBox" skin="SandText" position="0 18 162 18" name="SpecializationName" align="Left Top">
|
||||
<Property key="TextAlign" value="Left Top"/>
|
||||
</Widget>
|
||||
|
||||
<!-- Favorite Attributes -->
|
||||
<Widget type="TextBox" skin="HeaderText" position="0 41 162 18" name="FavoriteAttributesT" align="Left Top">
|
||||
<Property key="Caption" value="#{sChooseClassMenu2}"/>
|
||||
<Property key="TextAlign" value="Left Top"/>
|
||||
<UserString key="ToolTipType" value="Layout"/>
|
||||
<UserString key="ToolTipLayout" value="TextToolTip"/>
|
||||
<UserString key="Caption_Text" value="#{sCreateClassMenuHelp2}"/>
|
||||
</Widget>
|
||||
|
||||
<Widget type="MWAttribute" skin="MW_StatName" position="0 59 162 18" name="FavoriteAttribute0" align="Left Top"/>
|
||||
<Widget type="MWAttribute" skin="MW_StatName" position="0 77 162 18" name="FavoriteAttribute1" align="Left Top"/>
|
||||
|
||||
<!-- Major Skills -->
|
||||
<Widget type="TextBox" skin="HeaderText" position="162 0 162 18" name="MajorSkillT" align="Left Top">
|
||||
<Property key="TextAlign" value="Left Top"/>
|
||||
<Property key="Caption" value="#{sChooseClassMenu3}"/>
|
||||
</Widget>
|
||||
|
||||
<Widget type="MWSkill" skin="MW_StatName" position="162 18 162 18" name="MajorSkill0" align="Left Top"/>
|
||||
<Widget type="MWSkill" skin="MW_StatName" position="162 36 162 18" name="MajorSkill1" align="Left Top"/>
|
||||
<Widget type="MWSkill" skin="MW_StatName" position="162 54 162 18" name="MajorSkill2" align="Left Top"/>
|
||||
<Widget type="MWSkill" skin="MW_StatName" position="162 72 162 18" name="MajorSkill3" align="Left Top"/>
|
||||
<Widget type="MWSkill" skin="MW_StatName" position="162 90 162 18" name="MajorSkill4" align="Left Top"/>
|
||||
|
||||
<!-- Minor Skills -->
|
||||
<Widget type="TextBox" skin="HeaderText" position="325 0 162 18" name="MinorSkillT" align="Left Top">
|
||||
<Property key="Caption" value="#{sChooseClassMenu4}"/>
|
||||
<Property key="TextAlign" value="Left Top"/>
|
||||
</Widget>
|
||||
|
||||
<Widget type="MWSkill" skin="MW_StatName" position="325 18 162 18" name="MinorSkill0" align="Left Top"/>
|
||||
<Widget type="MWSkill" skin="MW_StatName" position="325 36 162 18" name="MinorSkill1" align="Left Top"/>
|
||||
<Widget type="MWSkill" skin="MW_StatName" position="325 54 162 18" name="MinorSkill2" align="Left Top"/>
|
||||
<Widget type="MWSkill" skin="MW_StatName" position="325 72 162 18" name="MinorSkill3" align="Left Top"/>
|
||||
<Widget type="MWSkill" skin="MW_StatName" position="325 90 162 18" name="MinorSkill4" align="Left Top"/>
|
||||
|
||||
</Widget>
|
||||
|
||||
<!-- Dialog buttons -->
|
||||
<Widget type="HBox" position="0 276 462 24">
|
||||
<Widget type="Widget">
|
||||
<UserString key="HStretch" value="true"/>
|
||||
</Widget>
|
||||
<Widget type="AutoSizedButton" skin="MW_Button" name="BackButton">
|
||||
<Property key="Caption" value="#{sBack}"/>
|
||||
</Widget>
|
||||
<Widget type="AutoSizedButton" skin="MW_Button" name="OKButton">
|
||||
<Property key="Caption" value="#{sOK}"/>
|
||||
</Widget>
|
||||
</Widget>
|
||||
|
||||
</Widget>
|
||||
</MyGUI>
|
22
files/mygui/openmw_chargen_class_description.layout
Normal file
|
@ -0,0 +1,22 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<MyGUI type="Layout">
|
||||
<Widget type="Window" skin="MW_Dialog" layer="Windows" position="0 0 244 248" name="_Main">
|
||||
|
||||
<!-- Edit box -->
|
||||
<Widget type="Widget" skin="MW_Box" position="8 8 220 192" align="Stretch" name="Client"/>
|
||||
|
||||
<Widget type="EditBox" skin="MW_TextBoxEdit" position="10 10 218 190" name="TextEdit" align="Left Top Stretch">
|
||||
<Property key="MultiLine" value="true"/>
|
||||
<Property key="VisibleVScroll" value="true"/>
|
||||
<Property key="WordWrap" value="true"/>
|
||||
</Widget>
|
||||
|
||||
<!-- Dialog buttons -->
|
||||
<Widget type="AutoSizedButton" skin="MW_Button" position="171 208 57 24" name="OKButton">
|
||||
<Property key="ExpandDirection" value="Left"/>
|
||||
<Property key="Caption" value="Enter"/>
|
||||
</Widget>
|
||||
|
||||
</Widget>
|
||||
</MyGUI>
|
84
files/mygui/openmw_chargen_create_class.layout
Normal file
|
@ -0,0 +1,84 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<MyGUI type="Layout">
|
||||
<Widget type="Window" skin="MW_Dialog" layer="Windows" position="0 0 450 198" name="_Main">
|
||||
|
||||
<!-- Class name -->
|
||||
<Widget type="TextBox" skin="ProgressText" position="8 8 48 23" name="LabelT" align="Left Top">
|
||||
<Property key="Caption" value="#{sName}"/>
|
||||
<Property key="TextAlign" value="Left VCenter"/>
|
||||
</Widget>
|
||||
<Widget type="EditBox" skin="MW_TextEdit" position="72 8 362 23" name="EditName" align="HStretch Top">
|
||||
<Property key="Caption" value="#{sCustomClassName}"/>
|
||||
</Widget>
|
||||
|
||||
<Widget type="Widget" skin="" position="8 38 480 110" align="Stretch">
|
||||
|
||||
<!-- Specialization -->
|
||||
<Widget type="TextBox" skin="HeaderText" position="0 0 156 18" name="SpecializationT" align="Left Top">
|
||||
<Property key="Caption" value="#{sChooseClassMenu1}"/>
|
||||
<Property key="TextAlign" value="Left Top"/>
|
||||
<UserString key="ToolTipType" value="Layout"/>
|
||||
<UserString key="ToolTipLayout" value="TextToolTip"/>
|
||||
<UserString key="Caption_Text" value="#{sCreateClassMenuHelp1}"/>
|
||||
</Widget>
|
||||
|
||||
<Widget type="Button" skin="SandTextButton" position="0 18 156 18" name="SpecializationName" align="Left Top">
|
||||
<Property key="TextAlign" value="Left Top"/>
|
||||
</Widget>
|
||||
|
||||
<!-- Favorite Attributes -->
|
||||
<Widget type="TextBox" skin="HeaderText" position="0 41 156 18" name="FavoriteAttributesT" align="Left Top">
|
||||
<Property key="Caption" value="#{sChooseClassMenu2}"/>
|
||||
<Property key="TextAlign" value="Left Top"/>
|
||||
<UserString key="ToolTipType" value="Layout"/>
|
||||
<UserString key="ToolTipLayout" value="TextToolTip"/>
|
||||
<UserString key="Caption_Text" value="#{sCreateClassMenuHelp2}"/>
|
||||
</Widget>
|
||||
|
||||
<Widget type="MWAttribute" skin="MW_StatNameButton" position="0 59 156 18" name="FavoriteAttribute0" align="Left Top"/>
|
||||
<Widget type="MWAttribute" skin="MW_StatNameButton" position="0 77 156 18" name="FavoriteAttribute1" align="Left Top"/>
|
||||
|
||||
<!-- Major Skills -->
|
||||
<Widget type="TextBox" skin="HeaderText" position="156 0 158 18" name="MajorSkillT" align="Left Top">
|
||||
<Property key="Caption" value="Major Skills:"/>
|
||||
<Property key="TextAlign" value="Left Top"/>
|
||||
</Widget>
|
||||
|
||||
<Widget type="MWSkill" skin="MW_StatNameButton" position="156 18 158 18" name="MajorSkill0" align="Left Top"/>
|
||||
<Widget type="MWSkill" skin="MW_StatNameButton" position="156 36 158 18" name="MajorSkill1" align="Left Top"/>
|
||||
<Widget type="MWSkill" skin="MW_StatNameButton" position="156 54 158 18" name="MajorSkill2" align="Left Top"/>
|
||||
<Widget type="MWSkill" skin="MW_StatNameButton" position="156 72 158 18" name="MajorSkill3" align="Left Top"/>
|
||||
<Widget type="MWSkill" skin="MW_StatNameButton" position="156 90 158 18" name="MajorSkill4" align="Left Top"/>
|
||||
|
||||
<!-- Minor Skills -->
|
||||
<Widget type="TextBox" skin="HeaderText" position="314 0 140 18" name="MinorSkillT" align="Left Top">
|
||||
<Property key="Caption" value="Minor Skills:"/>
|
||||
<Property key="TextAlign" value="Left Top"/>
|
||||
</Widget>
|
||||
|
||||
<Widget type="MWSkill" skin="MW_StatNameButton" position="314 18 140 18" name="MinorSkill0" align="Left Top"/>
|
||||
<Widget type="MWSkill" skin="MW_StatNameButton" position="314 36 140 18" name="MinorSkill1" align="Left Top"/>
|
||||
<Widget type="MWSkill" skin="MW_StatNameButton" position="314 54 140 18" name="MinorSkill2" align="Left Top"/>
|
||||
<Widget type="MWSkill" skin="MW_StatNameButton" position="314 72 140 18" name="MinorSkill3" align="Left Top"/>
|
||||
<Widget type="MWSkill" skin="MW_StatNameButton" position="314 90 140 18" name="MinorSkill4" align="Left Top"/>
|
||||
|
||||
</Widget>
|
||||
|
||||
<!-- Dialog buttons -->
|
||||
<Widget type="HBox" position="0 158 434 24">
|
||||
<Widget type="Widget">
|
||||
<UserString key="HStretch" value="true"/>
|
||||
</Widget>
|
||||
<Widget type="AutoSizedButton" skin="MW_Button" name="DescriptionButton">
|
||||
<Property key="Caption" value="#{sCreateClassMenu1}"/>
|
||||
</Widget>
|
||||
<Widget type="AutoSizedButton" skin="MW_Button" name="BackButton">
|
||||
<Property key="Caption" value="#{sBack}"/>
|
||||
</Widget>
|
||||
<Widget type="AutoSizedButton" skin="MW_Button" name="OKButton">
|
||||
<Property key="Caption" value="#{sOK}"/>
|
||||
</Widget>
|
||||
</Widget>
|
||||
|
||||
</Widget>
|
||||
</MyGUI>
|
35
files/mygui/openmw_chargen_generate_class_result.layout
Normal file
|
@ -0,0 +1,35 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<MyGUI type="Layout">
|
||||
<Widget type="Window" skin="MW_Dialog" layer="Windows" position="0 0 289 256" name="_Main">
|
||||
<!-- Class image -->
|
||||
<Widget type="Widget" skin="MW_Box" position="8 8 265 138" align="Left Top">
|
||||
<Widget type="ImageBox" skin="ImageBox" position="2 2 261 134" name="ClassImage" align="Left Top"/>
|
||||
</Widget>
|
||||
|
||||
<!-- Class text -->
|
||||
<Widget type="EditBox" skin="SandText" position="8 152 265 40" name="ReflectT" align="Left Top">
|
||||
<Property key="TextAlign" value="Top HCenter"/>
|
||||
<Property key="MultiLine" value="true"/>
|
||||
<Property key="WordWrap" value="true"/>
|
||||
<Property key="Static" value="true"/>
|
||||
</Widget>
|
||||
<Widget type="TextBox" skin="SandText" position="8 183 265 23" name="ClassName" align="Left Top">
|
||||
<Property key="Caption" value="[Class]"/>
|
||||
<Property key="TextAlign" value="Top HCenter"/>
|
||||
</Widget>
|
||||
|
||||
<!-- Dialog buttons -->
|
||||
<Widget type="HBox" position="0 216 273 24">
|
||||
<Widget type="Widget">
|
||||
<UserString key="HStretch" value="true"/>
|
||||
</Widget>
|
||||
<Widget type="AutoSizedButton" skin="MW_Button" name="BackButton">
|
||||
<Property key="Caption" value="#{sBack}"/>
|
||||
</Widget>
|
||||
<Widget type="AutoSizedButton" skin="MW_Button" name="OKButton">
|
||||
<Property key="Caption" value="#{sOK}"/>
|
||||
</Widget>
|
||||
</Widget>
|
||||
</Widget>
|
||||
</MyGUI>
|
91
files/mygui/openmw_chargen_race.layout
Normal file
|
@ -0,0 +1,91 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<MyGUI type="Layout">
|
||||
<Widget type="Window" skin="MW_Dialog" layer="Windows" position="0 0 588 433" name="_Main">
|
||||
|
||||
<!-- Appearance -->
|
||||
<Widget type="TextBox" skin="HeaderText" position="8 16 241 18" name="AppearanceT" align="Left Top">
|
||||
<Property key="Caption" value="Appearance"/>
|
||||
<Property key="TextAlign" value="Left Top"/>
|
||||
</Widget>
|
||||
<Widget type="Widget" skin="MW_Box" position="8 39 241 220">
|
||||
<Widget type="ImageBox" skin="ImageBox" position="2 2 237 216" align="Stretch" name="PreviewImage"/>
|
||||
</Widget>
|
||||
|
||||
<!-- Sliders -->
|
||||
<!-- Rotation of head -->
|
||||
<Widget type="MWScrollBar" skin="MW_HScroll" position="8 270 241 14" name="HeadRotate"/>
|
||||
|
||||
<!-- Gender choice -->
|
||||
|
||||
<Widget type="Widget" skin="MW_Box" position="8 298 15 14">
|
||||
<Widget type="Button" skin="MW_ArrowLeft" position="3 2 10 10" align="Left VStretch" name="PrevGenderButton"/>
|
||||
</Widget>
|
||||
|
||||
<Widget type="TextBox" skin="HeaderText" position="25 294 205 18" name="GenderChoiceT"/>
|
||||
|
||||
<Widget type="Widget" skin="MW_Box" position="234 298 15 14">
|
||||
<Widget type="Button" skin="MW_ArrowRight" position="1 2 10 10" align="Right VStretch" name="NextGenderButton"/>
|
||||
</Widget>
|
||||
|
||||
<!-- Face choice -->
|
||||
|
||||
<Widget type="Widget" skin="MW_Box" position="8 320 15 14">
|
||||
<Widget type="Button" skin="MW_ArrowLeft" position="3 2 10 10" align="Left VStretch" name="PrevFaceButton"/>
|
||||
</Widget>
|
||||
|
||||
<Widget type="TextBox" skin="HeaderText" position="25 316 205 18" name="FaceChoiceT"/>
|
||||
|
||||
<Widget type="Widget" skin="MW_Box" position="234 320 15 14">
|
||||
<Widget type="Button" skin="MW_ArrowRight" position="1 2 10 10" align="Right VStretch" name="NextFaceButton"/>
|
||||
</Widget>
|
||||
|
||||
<!-- Hair choice -->
|
||||
|
||||
<Widget type="Widget" skin="MW_Box" position="8 342 15 14">
|
||||
<Widget type="Button" skin="MW_ArrowLeft" position="3 2 10 10" align="Left VStretch" name="PrevHairButton"/>
|
||||
</Widget>
|
||||
|
||||
<Widget type="TextBox" skin="HeaderText" position="25 338 205 18" name="HairChoiceT"/>
|
||||
|
||||
<Widget type="Widget" skin="MW_Box" position="234 342 15 14">
|
||||
<Widget type="Button" skin="MW_ArrowRight" position="1 2 10 10" align="Right VStretch" name="NextHairButton"/>
|
||||
</Widget>
|
||||
|
||||
<!-- Race -->
|
||||
|
||||
<Widget type="TextBox" skin="HeaderText" position="261 16 132 18" name="RaceT" align="Left Top">
|
||||
<Property key="TextAlign" value="Left Top"/>
|
||||
</Widget>
|
||||
<Widget type="ListBox" skin="MW_List" position="264 39 132 161" name="RaceList">
|
||||
</Widget>
|
||||
|
||||
<!-- Spell powers -->
|
||||
<Widget type="TextBox" skin="HeaderText" position="261 210 132 18" name="SpellPowerT" align="Left Top">
|
||||
<Property key="TextAlign" value="Left Top"/>
|
||||
</Widget>
|
||||
<!-- Spell power sub-widgets will be placed here, no skin to make it invisible -->
|
||||
<Widget type="Widget" skin="" position="261 230 250 140" name="SpellPowerList"/>
|
||||
|
||||
<!-- Skill bonus -->
|
||||
<Widget type="TextBox" skin="HeaderText" position="403 39 159 18" name="SkillsT" align="Left Top">
|
||||
<Property key="TextAlign" value="Left Top"/>
|
||||
</Widget>
|
||||
<!-- Skill bonus sub-widgets will be placed here, no skin to make it invisible -->
|
||||
<Widget type="Widget" skin="" position="403 59 159 360" name="SkillList"/>
|
||||
|
||||
<!-- Dialog buttons -->
|
||||
<Widget type="HBox" position="0 393 572 24">
|
||||
<Widget type="Widget">
|
||||
<UserString key="HStretch" value="true"/>
|
||||
</Widget>
|
||||
|
||||
<Widget type="AutoSizedButton" skin="MW_Button" position="471 397 53 23" name="BackButton">
|
||||
<Property key="Caption" value="#{sBack}"/>
|
||||
</Widget>
|
||||
<Widget type="AutoSizedButton" skin="MW_Button" position="532 397 42 23" name="OKButton">
|
||||
<Property key="Caption" value="#{sOK]"/>
|
||||
</Widget>
|
||||
</Widget>
|
||||
</Widget>
|
||||
</MyGUI>
|
126
files/mygui/openmw_chargen_review.layout
Normal file
|
@ -0,0 +1,126 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<MyGUI type="Layout">
|
||||
<Widget type="Window" skin="MW_Dialog" layer="Windows" position="0 0 520 428" name="_Main">
|
||||
|
||||
<!-- Player Name, Race, Class and Birthsign -->
|
||||
<Widget type="Widget" skin="MW_Box" position="8 8 244 126">
|
||||
<Widget type="Button" skin="MW_Button" position="8 8 64 23" name="NameButton">
|
||||
<Property key="Caption" value="#{sName}"/>
|
||||
</Widget>
|
||||
<Widget type="Button" skin="MW_Button" position="8 37 56 23" name="RaceButton">
|
||||
<Property key="Caption" value="#{sRace}"/>
|
||||
</Widget>
|
||||
<Widget type="Button" skin="MW_Button" position="8 66 56 23" name="ClassButton">
|
||||
<Property key="Caption" value="#{sClass}"/>
|
||||
</Widget>
|
||||
<Widget type="Button" skin="MW_Button" position="8 95 54 23" name="SignButton">
|
||||
<Property key="Caption" value="#{sBirthSign}"/>
|
||||
</Widget>
|
||||
<Widget type="TextBox" skin="SandTextRight" position="97 10 140 18" name="NameText"/>
|
||||
<Widget type="TextBox" skin="SandTextRight" position="97 39 140 18" name="RaceText"/>
|
||||
<Widget type="TextBox" skin="SandTextRight" position="97 68 140 18" name="ClassText"/>
|
||||
<Widget type="TextBox" skin="SandTextRight" position="97 97 140 18" name="SignText"/>
|
||||
</Widget>
|
||||
|
||||
<!-- Player Health, Magicka and Fatigue -->
|
||||
<Widget type="Widget" skin="MW_Box" position="8 144 244 72">
|
||||
<Widget type="MWDynamicStat" skin="MW_DynamicStat_Red" position="8 8 228 18" name="Health">
|
||||
<UserString key="ToolTipType" value="Layout"/>
|
||||
<UserString key="ToolTipLayout" value="HealthToolTip"/>
|
||||
<UserString key="ImageTexture_HealthImage" value="icons\k\health.dds"/>
|
||||
<Property key="Caption" value="#{sHealth}"/>
|
||||
</Widget>
|
||||
<Widget type="MWDynamicStat" skin="MW_DynamicStat_Blue" position="8 27 228 18" name="Magicka">
|
||||
<UserString key="ToolTipType" value="Layout"/>
|
||||
<UserString key="ToolTipLayout" value="HealthToolTip"/>
|
||||
<UserString key="ImageTexture_HealthImage" value="icons\k\magicka.dds"/>
|
||||
<Property key="Caption" value="#{sMagic}"/>
|
||||
</Widget>
|
||||
<Widget type="MWDynamicStat" skin="MW_DynamicStat_Green" position="8 46 228 18" name="Fatigue">
|
||||
<UserString key="ToolTipType" value="Layout"/>
|
||||
<UserString key="ToolTipLayout" value="HealthToolTip"/>
|
||||
<UserString key="ImageTexture_HealthImage" value="icons\k\fatigue.dds"/>
|
||||
<Property key="Caption" value="#{sFatigue}"/>
|
||||
</Widget>
|
||||
</Widget>
|
||||
|
||||
<!-- Player attributes -->
|
||||
<Widget type="Widget" skin="MW_Box" position="8 224 244 156">
|
||||
<Widget type="MWAttribute" skin="MW_StatNameValue" position="8 4 229 18" name="Attribute0">
|
||||
<UserString key="ToolTipType" value="Layout"/>
|
||||
<UserString key="ToolTipLayout" value="AttributeToolTip"/>
|
||||
<UserString key="Caption_AttributeName" value="#{sAttributeStrength}"/>
|
||||
<UserString key="Caption_AttributeDescription" value="#{sStrDesc}"/>
|
||||
<UserString key="ImageTexture_AttributeImage" value="icons\k\attribute_strength.dds"/>
|
||||
</Widget>
|
||||
<Widget type="MWAttribute" skin="MW_StatNameValue" position="8 22 229 18" name="Attribute1">
|
||||
<UserString key="ToolTipType" value="Layout"/>
|
||||
<UserString key="ToolTipLayout" value="AttributeToolTip"/>
|
||||
<UserString key="Caption_AttributeName" value="#{sAttributeIntelligence}"/>
|
||||
<UserString key="Caption_AttributeDescription" value="#{sIntDesc}"/>
|
||||
<UserString key="ImageTexture_AttributeImage" value="icons\k\attribute_int.dds"/>
|
||||
</Widget>
|
||||
<Widget type="MWAttribute" skin="MW_StatNameValue" position="8 40 229 18" name="Attribute2">
|
||||
<UserString key="ToolTipType" value="Layout"/>
|
||||
<UserString key="ToolTipLayout" value="AttributeToolTip"/>
|
||||
<UserString key="Caption_AttributeName" value="#{sAttributeWillpower}"/>
|
||||
<UserString key="Caption_AttributeDescription" value="#{sWilDesc}"/>
|
||||
<UserString key="ImageTexture_AttributeImage" value="icons\k\attribute_wilpower.dds"/>
|
||||
</Widget>
|
||||
<Widget type="MWAttribute" skin="MW_StatNameValue" position="8 58 229 18" name="Attribute3">
|
||||
<UserString key="ToolTipType" value="Layout"/>
|
||||
<UserString key="ToolTipLayout" value="AttributeToolTip"/>
|
||||
<UserString key="Caption_AttributeName" value="#{sAttributeAgility}"/>
|
||||
<UserString key="Caption_AttributeDescription" value="#{sAgiDesc}"/>
|
||||
<UserString key="ImageTexture_AttributeImage" value="icons\k\attribute_agility.dds"/>
|
||||
</Widget>
|
||||
<Widget type="MWAttribute" skin="MW_StatNameValue" position="8 76 229 18" name="Attribute4">
|
||||
<UserString key="ToolTipType" value="Layout"/>
|
||||
<UserString key="ToolTipLayout" value="AttributeToolTip"/>
|
||||
<UserString key="Caption_AttributeName" value="#{sAttributeSpeed}"/>
|
||||
<UserString key="Caption_AttributeDescription" value="#{sSpdDesc}"/>
|
||||
<UserString key="ImageTexture_AttributeImage" value="icons\k\attribute_speed.dds"/>
|
||||
</Widget>
|
||||
<Widget type="MWAttribute" skin="MW_StatNameValue" position="8 94 229 18" name="Attribute5">
|
||||
<UserString key="ToolTipType" value="Layout"/>
|
||||
<UserString key="ToolTipLayout" value="AttributeToolTip"/>
|
||||
<UserString key="Caption_AttributeName" value="#{sAttributeEndurance}"/>
|
||||
<UserString key="Caption_AttributeDescription" value="#{sEndDesc}"/>
|
||||
<UserString key="ImageTexture_AttributeImage" value="icons\k\attribute_endurance.dds"/>
|
||||
</Widget>
|
||||
<Widget type="MWAttribute" skin="MW_StatNameValue" position="8 112 229 18" name="Attribute6">
|
||||
<UserString key="ToolTipType" value="Layout"/>
|
||||
<UserString key="ToolTipLayout" value="AttributeToolTip"/>
|
||||
<UserString key="Caption_AttributeName" value="#{sAttributePersonality}"/>
|
||||
<UserString key="Caption_AttributeDescription" value="#{sPerDesc}"/>
|
||||
<UserString key="ImageTexture_AttributeImage" value="icons\k\attribute_personality.dds"/>
|
||||
</Widget>
|
||||
<Widget type="MWAttribute" skin="MW_StatNameValue" position="8 130 229 18" name="Attribute7">
|
||||
<UserString key="ToolTipType" value="Layout"/>
|
||||
<UserString key="ToolTipLayout" value="AttributeToolTip"/>
|
||||
<UserString key="Caption_AttributeName" value="#{sAttributeLuck}"/>
|
||||
<UserString key="Caption_AttributeDescription" value="#{sLucDesc}"/>
|
||||
<UserString key="ImageTexture_AttributeImage" value="icons\k\attribute_luck.dds"/>
|
||||
</Widget>
|
||||
</Widget>
|
||||
|
||||
<!-- Player Skills -->
|
||||
<Widget type="Widget" skin="MW_Box" position="260 7 244 372" align="Left VStretch" name="Skills">
|
||||
<Widget type="ScrollView" skin="MW_ScrollView" position="8 6 232 362" align="Stretch" name="SkillView"/>
|
||||
</Widget>
|
||||
|
||||
<!-- Dialogue Buttons -->
|
||||
<Widget type="HBox" position="0 388 504 24">
|
||||
<Widget type="Widget">
|
||||
<UserString key="HStretch" value="true"/>
|
||||
</Widget>
|
||||
<Widget type="AutoSizedButton" skin="MW_Button" name="BackButton">
|
||||
<Property key="Caption" value="#{sBack}"/>
|
||||
</Widget>
|
||||
<Widget type="AutoSizedButton" skin="MW_Button" name="OKButton">
|
||||
<Property key="Caption" value="#{sOK}"/>
|
||||
</Widget>
|
||||
</Widget>
|
||||
</Widget>
|
||||
</MyGUI>
|
30
files/mygui/openmw_chargen_select_attribute.layout
Normal file
|
@ -0,0 +1,30 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<MyGUI type="Layout">
|
||||
<Widget type="Window" skin="MW_Dialog" layer="Windows" position="0 0 217 234" name="_Main">
|
||||
<Widget type="Widget" skin="" position="14 14 186 203" align="Stretch">
|
||||
|
||||
<!-- Label -->
|
||||
<Widget type="TextBox" skin="HeaderText" position="0 0 186 18" name="LabelT" align="Left Top">
|
||||
<Property key="Caption" value="Choose a Specialization"/>
|
||||
<Property key="TextAlign" value="Left Top"/>
|
||||
</Widget>
|
||||
|
||||
<!-- Attribute list -->
|
||||
<Widget type="MWAttribute" skin="MW_StatNameButtonC" position="0 28 186 18" name="Attribute0" align="Left Top"/>
|
||||
<Widget type="MWAttribute" skin="MW_StatNameButtonC" position="0 46 186 18" name="Attribute1" align="Left Top"/>
|
||||
<Widget type="MWAttribute" skin="MW_StatNameButtonC" position="0 64 186 18" name="Attribute2" align="Left Top"/>
|
||||
<Widget type="MWAttribute" skin="MW_StatNameButtonC" position="0 82 186 18" name="Attribute3" align="Left Top"/>
|
||||
<Widget type="MWAttribute" skin="MW_StatNameButtonC" position="0 100 186 18" name="Attribute4" align="Left Top"/>
|
||||
<Widget type="MWAttribute" skin="MW_StatNameButtonC" position="0 118 186 18" name="Attribute5" align="Left Top"/>
|
||||
<Widget type="MWAttribute" skin="MW_StatNameButtonC" position="0 136 186 18" name="Attribute6" align="Left Top"/>
|
||||
<Widget type="MWAttribute" skin="MW_StatNameButtonC" position="0 154 186 18" name="Attribute7" align="Left Top"/>
|
||||
|
||||
<!-- Dialog buttons -->
|
||||
<Widget type="AutoSizedButton" skin="MW_Button" position="120 180 66 21" name="CancelButton">
|
||||
<Property key="ExpandDirection" value="Left"/>
|
||||
<Property key="Caption" value="Cancel"/>
|
||||
</Widget>
|
||||
|
||||
</Widget>
|
||||
</Widget>
|
||||
</MyGUI>
|
65
files/mygui/openmw_chargen_select_skill.layout
Normal file
|
@ -0,0 +1,65 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<MyGUI type="Layout">
|
||||
<Widget type="Window" skin="MW_Dialog" layer="Windows" position="0 0 477 270" name="_Main">
|
||||
<Widget type="Widget" skin="" position="17 14 447 239" align="Stretch">
|
||||
|
||||
<!-- Label -->
|
||||
<Widget type="TextBox" skin="HeaderText" position="0 0 447 18" name="LabelT" align="HCenter Top">
|
||||
<Property key="Caption" value="Choose a Skill"/>
|
||||
<Property key="TextAlign" value="HCenter Top"/>
|
||||
</Widget>
|
||||
|
||||
<!-- Combat list -->
|
||||
<Widget type="TextBox" skin="HeaderText" position="0 32 154 18" name="CombatLabelT" align="Left Top">
|
||||
<Property key="Caption" value="Combat"/>
|
||||
<Property key="TextAlign" value="Left Top"/>
|
||||
</Widget>
|
||||
<Widget type="MWSkill" skin="MW_StatNameButton" position="0 50 154 18" name="CombatSkill0" align="Left Top"/>
|
||||
<Widget type="MWSkill" skin="MW_StatNameButton" position="0 68 154 18" name="CombatSkill1" align="Left Top"/>
|
||||
<Widget type="MWSkill" skin="MW_StatNameButton" position="0 86 154 18" name="CombatSkill2" align="Left Top"/>
|
||||
<Widget type="MWSkill" skin="MW_StatNameButton" position="0 104 154 18" name="CombatSkill3" align="Left Top"/>
|
||||
<Widget type="MWSkill" skin="MW_StatNameButton" position="0 122 154 18" name="CombatSkill4" align="Left Top"/>
|
||||
<Widget type="MWSkill" skin="MW_StatNameButton" position="0 140 154 18" name="CombatSkill5" align="Left Top"/>
|
||||
<Widget type="MWSkill" skin="MW_StatNameButton" position="0 158 154 18" name="CombatSkill6" align="Left Top"/>
|
||||
<Widget type="MWSkill" skin="MW_StatNameButton" position="0 176 154 18" name="CombatSkill7" align="Left Top"/>
|
||||
<Widget type="MWSkill" skin="MW_StatNameButton" position="0 194 154 18" name="CombatSkill8" align="Left Top"/>
|
||||
|
||||
<!-- Magic list -->
|
||||
<Widget type="TextBox" skin="HeaderText" position="158 32 154 18" name="MagicLabelT" align="Left Top">
|
||||
<Property key="Caption" value="Magic"/>
|
||||
<Property key="TextAlign" value="Left Top"/>
|
||||
</Widget>
|
||||
<Widget type="MWSkill" skin="MW_StatNameButton" position="158 50 154 18" name="MagicSkill0" align="Left Top"/>
|
||||
<Widget type="MWSkill" skin="MW_StatNameButton" position="158 68 154 18" name="MagicSkill1" align="Left Top"/>
|
||||
<Widget type="MWSkill" skin="MW_StatNameButton" position="158 86 154 18" name="MagicSkill2" align="Left Top"/>
|
||||
<Widget type="MWSkill" skin="MW_StatNameButton" position="158 104 154 18" name="MagicSkill3" align="Left Top"/>
|
||||
<Widget type="MWSkill" skin="MW_StatNameButton" position="158 122 154 18" name="MagicSkill4" align="Left Top"/>
|
||||
<Widget type="MWSkill" skin="MW_StatNameButton" position="158 140 154 18" name="MagicSkill5" align="Left Top"/>
|
||||
<Widget type="MWSkill" skin="MW_StatNameButton" position="158 158 154 18" name="MagicSkill6" align="Left Top"/>
|
||||
<Widget type="MWSkill" skin="MW_StatNameButton" position="158 176 154 18" name="MagicSkill7" align="Left Top"/>
|
||||
<Widget type="MWSkill" skin="MW_StatNameButton" position="158 194 154 18" name="MagicSkill8" align="Left Top"/>
|
||||
|
||||
<!-- Stealth list -->
|
||||
<Widget type="TextBox" skin="HeaderText" position="316 32 131 18" name="StealthLabelT" align="Left Top">
|
||||
<Property key="Caption" value="Stealth"/>
|
||||
<Property key="TextAlign" value="Left Top"/>
|
||||
</Widget>
|
||||
<Widget type="MWSkill" skin="MW_StatNameButton" position="316 50 131 18" name="StealthSkill0" align="Left Top"/>
|
||||
<Widget type="MWSkill" skin="MW_StatNameButton" position="316 68 131 18" name="StealthSkill1" align="Left Top"/>
|
||||
<Widget type="MWSkill" skin="MW_StatNameButton" position="316 86 131 18" name="StealthSkill2" align="Left Top"/>
|
||||
<Widget type="MWSkill" skin="MW_StatNameButton" position="316 104 131 18" name="StealthSkill3" align="Left Top"/>
|
||||
<Widget type="MWSkill" skin="MW_StatNameButton" position="316 122 131 18" name="StealthSkill4" align="Left Top"/>
|
||||
<Widget type="MWSkill" skin="MW_StatNameButton" position="316 140 131 18" name="StealthSkill5" align="Left Top"/>
|
||||
<Widget type="MWSkill" skin="MW_StatNameButton" position="316 158 131 18" name="StealthSkill6" align="Left Top"/>
|
||||
<Widget type="MWSkill" skin="MW_StatNameButton" position="316 176 131 18" name="StealthSkill7" align="Left Top"/>
|
||||
<Widget type="MWSkill" skin="MW_StatNameButton" position="316 194 131 18" name="StealthSkill8" align="Left Top"/>
|
||||
|
||||
<!-- Dialog buttons -->
|
||||
<Widget type="AutoSizedButton" skin="MW_Button" position="381 218 66 21" name="CancelButton">
|
||||
<Property key="ExpandDirection" value="Left"/>
|
||||
<Property key="Caption" value="Cancel"/>
|
||||
</Widget>
|
||||
|
||||
</Widget>
|
||||
</Widget>
|
||||
</MyGUI>
|
32
files/mygui/openmw_chargen_select_specialization.layout
Normal file
|
@ -0,0 +1,32 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<MyGUI type="Layout">
|
||||
<!-- correct size is 247 144, adjust when skin is changed to a dialog -->
|
||||
<Widget type="Window" skin="MW_Dialog" layer="Windows" position="0 0 247 144" name="_Main">
|
||||
<Widget type="Widget" skin="" position="14 14 216 113" align="Stretch">
|
||||
|
||||
<!-- Label -->
|
||||
<Widget type="TextBox" skin="HeaderText" position="0 0 216 18" name="LabelT" align="Left Top">
|
||||
<Property key="Caption" value="Choose a Specialization"/>
|
||||
<Property key="TextAlign" value="Left Top"/>
|
||||
</Widget>
|
||||
|
||||
<!-- Specialization list -->
|
||||
<Widget type="Button" skin="SandTextButton" position="0 28 216 18" name="Specialization0" align="Left Top">
|
||||
<Property key="TextAlign" value="Top HCenter"/>
|
||||
</Widget>
|
||||
<Widget type="Button" skin="SandTextButton" position="0 46 216 18" name="Specialization1" align="Left Top">
|
||||
<Property key="TextAlign" value="Top HCenter"/>
|
||||
</Widget>
|
||||
<Widget type="Button" skin="SandTextButton" position="0 64 216 18" name="Specialization2" align="Left Top">
|
||||
<Property key="TextAlign" value="Top HCenter"/>
|
||||
</Widget>
|
||||
|
||||
<!-- Dialog buttons -->
|
||||
<Widget type="AutoSizedButton" skin="MW_Button" position="150 90 66 21" name="CancelButton">
|
||||
<Property key="ExpandDirection" value="Left"/>
|
||||
<Property key="Caption" value="Cancel"/>
|
||||
</Widget>
|
||||
|
||||
</Widget>
|
||||
</Widget>
|
||||
</MyGUI>
|
23
files/mygui/openmw_companion_window.layout
Normal file
|
@ -0,0 +1,23 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<MyGUI type="Layout">
|
||||
<Widget type="Window" skin="MW_Window" layer="Windows" position="0 0 600 300" name="_Main">
|
||||
<Property key="MinSize" value="245 145"/>
|
||||
|
||||
<!-- Items -->
|
||||
<Widget type="ItemView" skin="MW_ItemView" position="5 5 575 225" name="ItemView" align="Left Top Stretch">
|
||||
</Widget>
|
||||
|
||||
<Widget type="HBox" position="5 235 575 24" align="Bottom HStretch">
|
||||
<Widget type="MWDynamicStat" skin="MW_ChargeBar_Blue" position="8 8 212 24" name="EncumbranceBar" align="Left Top HStretch">
|
||||
<UserString key="HStretch" value="true"/>
|
||||
</Widget>
|
||||
<Widget type="AutoSizedTextBox" skin="SandText" name="ProfitLabel">
|
||||
</Widget>
|
||||
<Widget type="AutoSizedButton" skin="MW_Button" name="CloseButton">
|
||||
<Property key="Caption" value="#{sClose}"/>
|
||||
</Widget>
|
||||
</Widget>
|
||||
|
||||
</Widget>
|
||||
</MyGUI>
|
30
files/mygui/openmw_confirmation_dialog.layout
Normal file
|
@ -0,0 +1,30 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<MyGUI type="Layout">
|
||||
<Widget type="Window" skin="MW_Dialog" layer="Windows" position="0 0 300 130" name="_Main">
|
||||
<Property key="Visible" value="false"/>
|
||||
|
||||
<Widget type="EditBox" skin="MW_TextEditClient" position="8 8 284 400" name="Message" align="Left Top Stretch">
|
||||
<Property key="FontName" value="Default"/>
|
||||
<Property key="TextAlign" value="Top HCenter"/>
|
||||
<Property key="TextColour" value="0.75 0.6 0.35"/>
|
||||
<Property key="Static" value="true"/>
|
||||
<Property key="WordWrap" value="true"/>
|
||||
<Property key="MultiLine" value="true"/>
|
||||
</Widget>
|
||||
|
||||
<Widget type="HBox" position="0 89 272 24" align="Right Bottom">
|
||||
<Widget type="Widget">
|
||||
<UserString key="HStretch" value="true"/>
|
||||
</Widget>
|
||||
<Widget type="AutoSizedButton" skin="MW_Button" name="CancelButton" align="Right Bottom">
|
||||
<Property key="Caption" value="#{sCancel}"/>
|
||||
</Widget>
|
||||
<Widget type="AutoSizedButton" skin="MW_Button" name="OkButton" align="Right Bottom">
|
||||
<Property key="Caption" value="#{sOk}"/>
|
||||
</Widget>
|
||||
</Widget>
|
||||
|
||||
</Widget>
|
||||
</MyGUI>
|
||||
|
18
files/mygui/openmw_console.layout
Normal file
|
@ -0,0 +1,18 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<MyGUI type="Layout">
|
||||
<Widget type="Window" skin="MW_Window" position="0 0 400 400" layer="Console" name="_Main">
|
||||
<Property key="Caption" value="#{sConsoleTitle}"/>
|
||||
<Property key="MinSize" value="400 245"/>
|
||||
<Property key="MaxSize" value="2000 2000"/>
|
||||
<Property key="Visible" value="false"/>
|
||||
|
||||
<!-- Log window -->
|
||||
<Widget type="EditBox" skin="MW_ConsoleLog" position="5 5 380 328" align="Stretch" name="list_History">
|
||||
<Property key="MultiLine" value="1"/>
|
||||
</Widget>
|
||||
|
||||
<!-- Command line -->
|
||||
<Widget type="EditBox" skin="MW_ConsoleCommand" position="0 338 384 28" align="HStretch Bottom" name="edit_Command"/>
|
||||
|
||||
</Widget>
|
||||
</MyGUI>
|
33
files/mygui/openmw_console.skin.xml
Normal file
|
@ -0,0 +1,33 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<MyGUI type="Skin">
|
||||
|
||||
<!-- Console Output -->
|
||||
|
||||
<Skin name="MW_LogClient" size="10 10">
|
||||
<Property key="FontName" value="MonoFont"/>
|
||||
<Property key="TextAlign" value="Left Top"/>
|
||||
<Property key="TextColour" value="1 1 1"/>
|
||||
<BasisSkin type="EditText" offset="0 0 10 10" align="Stretch"/>
|
||||
</Skin>
|
||||
|
||||
<Skin name="MW_ConsoleLog" size="0 0 50 50">
|
||||
<Property key="WordWrap" value="true"/>
|
||||
<Child type="TextBox" skin="MW_LogClient" offset="0 0 35 10" align="Stretch" name="Client"/>
|
||||
</Skin>
|
||||
|
||||
<!-- Console Input -->
|
||||
|
||||
<Skin name="MW_EditClient" size="10 10">
|
||||
<Property key="FontName" value="MonoFont"/>
|
||||
<Property key="TextAlign" value="Left VCenter"/>
|
||||
<Property key="TextColour" value="1 1 1"/>
|
||||
<BasisSkin type="EditText" offset="0 0 10 10" align="Stretch"/>
|
||||
</Skin>
|
||||
|
||||
<Skin name="MW_ConsoleCommand" size="29 28">
|
||||
<Child type="TextBox" skin="MW_EditClient" offset="4 2 19 22" align="Bottom Stretch" name="Client"/>
|
||||
<Child type="Widget" skin="MW_Box" offset="0 0 29 26" align="Bottom Stretch"/>
|
||||
</Skin>
|
||||
|
||||
</MyGUI>
|
28
files/mygui/openmw_container_window.layout
Normal file
|
@ -0,0 +1,28 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<MyGUI type="Layout">
|
||||
<Widget type="Window" skin="MW_Window" layer="Windows" position="0 0 600 300" name="_Main">
|
||||
<Property key="MinSize" value="245 145"/>
|
||||
|
||||
<!-- Items -->
|
||||
<Widget type="ItemView" skin="MW_ItemView" position="5 5 575 225" name="ItemView" align="Left Top Stretch">
|
||||
</Widget>
|
||||
|
||||
<Widget type="HBox" position="0 235 580 24" align="Right Bottom">
|
||||
<Widget type="Widget">
|
||||
<UserString key="HStretch" value="true"/>
|
||||
</Widget>
|
||||
<Widget type="AutoSizedButton" skin="MW_Button" name="DisposeCorpseButton" align="Right Bottom">
|
||||
<Property key="Caption" value="#{sDisposeofCorpse}"/>
|
||||
<Property key="Visible" value="false"/>
|
||||
</Widget>
|
||||
<Widget type="AutoSizedButton" skin="MW_Button" name="TakeButton" align="Right Bottom">
|
||||
<Property key="Caption" value="#{sTakeAll}"/>
|
||||
</Widget>
|
||||
<Widget type="AutoSizedButton" skin="MW_Button" name="CloseButton" align="Right Bottom">
|
||||
<Property key="Caption" value="#{sClose}"/>
|
||||
</Widget>
|
||||
</Widget>
|
||||
|
||||
</Widget>
|
||||
</MyGUI>
|
37
files/mygui/openmw_count_window.layout
Normal file
|
@ -0,0 +1,37 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<MyGUI type="Layout">
|
||||
<Widget type="Window" skin="MW_Dialog" layer="Windows" position="0 0 600 125" name="_Main">
|
||||
<Property key="Visible" value="false"/>
|
||||
|
||||
<Widget type="TextBox" skin="SandText" position="4 0 592 24" name="LabelText" align="Left Top HStretch">
|
||||
<Property key="TextAlign" value="Center"/>
|
||||
</Widget>
|
||||
|
||||
<Widget type="TextBox" skin="SandText" position="4 30 532 24" name="ItemText" align="Left Top HStretch">
|
||||
<Property key="TextAlign" value="Right"/>
|
||||
</Widget>
|
||||
|
||||
<Widget type="EditBox" skin="MW_TextEdit" position="540 30 32 24" name="ItemEdit" align="Right Top">
|
||||
<Property key="TextAlign" value="Center"/>
|
||||
</Widget>
|
||||
|
||||
<Widget type="MWScrollBar" skin="MW_HScroll" position="28 60 544 18" name="CountSlider" align="Left Top HStretch">
|
||||
<Property key="MoveToClick" value="true"/>
|
||||
</Widget>
|
||||
|
||||
|
||||
<Widget type="HBox" position="0 90 572 24" align="Right Bottom">
|
||||
<Widget type="Widget">
|
||||
<UserString key="HStretch" value="true"/>
|
||||
</Widget>
|
||||
<Widget type="AutoSizedButton" skin="MW_Button" position="417 90 60 24" name="CancelButton" align="Right Top">
|
||||
<Property key="Caption" value="#{sCancel}"/>
|
||||
</Widget>
|
||||
<Widget type="AutoSizedButton" skin="MW_Button" position="512 90 60 24" name="OkButton" align="Right Top">
|
||||
<Property key="Caption" value="#{sOk}"/>
|
||||
</Widget>
|
||||
</Widget>
|
||||
|
||||
</Widget>
|
||||
</MyGUI>
|
32
files/mygui/openmw_dialogue_window.layout
Normal file
|
@ -0,0 +1,32 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<MyGUI type="Layout">
|
||||
<Widget type="Window" skin="MW_Window" layer="Windows" position="0 0 588 433" name="_Main">
|
||||
<Property key="MinSize" value="380 230"/>
|
||||
|
||||
<Widget type="Widget" skin="MW_Box" position="8 8 415 381" align="Stretch" name="Client"/>
|
||||
|
||||
<Widget type="Widget" position="13 13 391 371" align="Left Top Stretch">
|
||||
<Widget type="BookPage" skin="MW_BookPage" position="0 0 391 371" name="History" align="Left Top Stretch">
|
||||
</Widget>
|
||||
</Widget>
|
||||
|
||||
<Widget type="MWScrollBar" skin="MW_VScroll" position="404 13 14 371" align="Right VStretch" name="VScroll">
|
||||
<Property key="Visible" value="false"/>
|
||||
</Widget>
|
||||
|
||||
<!-- The disposition bar-->
|
||||
<Widget type="ProgressBar" skin="MW_EnergyBar_Blue" position="432 8 132 18"
|
||||
align="Right Top" name="Disposition">
|
||||
<Widget type="EditBox" skin="MW_DispositionEdit" position_real="0 0 1 1" align="Stretch" name="DispositionText"/>
|
||||
</Widget>
|
||||
<!-- The list of topics -->
|
||||
<Widget type="MWList" skin="MW_SimpleList" position="432 31 132 328" name="TopicsList" align="Right VStretch">
|
||||
</Widget>
|
||||
|
||||
<!-- The Goodbye button -->
|
||||
<Widget type="Button" skin="MW_Button" position="432 366 132 23" name="ByeButton" align="Right Bottom">
|
||||
<Property key="Caption" value="#{sGoodbye}"/>
|
||||
</Widget>
|
||||
</Widget>
|
||||
</MyGUI>
|
19
files/mygui/openmw_dialogue_window_skin.xml
Normal file
|
@ -0,0 +1,19 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<MyGUI type="Skin">
|
||||
|
||||
<Skin name="MW_DispEdit" size="10 10">
|
||||
<!--Property key="Pointer" value="beam" /-->
|
||||
<BasisSkin type="EditText" offset="0 0 10 10" align="Stretch"/>
|
||||
</Skin>
|
||||
|
||||
<Skin name="MW_DispositionEdit" size="0 0 50 50">
|
||||
<Property key="FontName" value="Default"/>
|
||||
<Property key="TextAlign" value="Center"/>
|
||||
<Property key="Colour" value="0000FF"/>
|
||||
<Property key="Static" value="1"/>
|
||||
<Property key="WordWrap" value="true"/>
|
||||
<Child type="TextBox" skin="MW_DispEdit" offset="0 0 0 -4" align="Stretch" name="Client"/>
|
||||
</Skin>
|
||||
|
||||
</MyGUI>
|
50
files/mygui/openmw_edit.skin.xml
Normal file
|
@ -0,0 +1,50 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<MyGUI type="Skin">
|
||||
|
||||
<!-- Text edit widget -->
|
||||
|
||||
<Skin name="MW_TextEditClient" size="10 10">
|
||||
|
||||
<BasisSkin type="EditText" offset="0 0 10 10" align="Stretch"/>
|
||||
|
||||
</Skin>
|
||||
|
||||
<Skin name="MW_TextBoxEditClient" size="10 10">
|
||||
|
||||
<BasisSkin type="EditText" offset="0 0 10 10" align="Stretch"/>
|
||||
|
||||
</Skin>
|
||||
|
||||
<Skin name="MW_TextEdit" size="512 20">
|
||||
|
||||
<!-- Input -->
|
||||
|
||||
<Property key="FontName" value="Default"/>
|
||||
<Property key="TextAlign" value="Left VCenter"/>
|
||||
<Property key="TextColour" value="0.75 0.6 0.35"/>
|
||||
|
||||
<Child type="TextBox" skin="MW_TextEditClient" offset="4 1 502 18" align="Stretch" name="Client"/>
|
||||
|
||||
|
||||
<!-- Borders -->
|
||||
|
||||
<Child type="Widget" skin="MW_Box" offset="0 0 512 20" align="Stretch" name="Client"/>
|
||||
|
||||
</Skin>
|
||||
|
||||
<Skin name="MW_TextBoxEdit" size="512 20">
|
||||
|
||||
<Property key="FontName" value="Default"/>
|
||||
|
||||
<Property key="TextAlign" value="Left Top"/>
|
||||
|
||||
<Property key="TextColour" value="0.75 0.6 0.35"/>
|
||||
|
||||
<Child type="TextBox" skin="MW_TextBoxEditClient" offset="2 2 490 18" align="Stretch" name="Client"/>
|
||||
|
||||
<Child type="MWScrollBar" skin="MW_VScroll" offset="494 3 14 14" align="Right VStretch" name="VScroll"/>
|
||||
|
||||
</Skin>
|
||||
|
||||
</MyGUI>
|
99
files/mygui/openmw_edit_effect.layout
Normal file
|
@ -0,0 +1,99 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<MyGUI type="Layout">
|
||||
<Widget type="Window" skin="MW_Dialog" layer="Windows" position="0 0 362 310" name="_Main">
|
||||
|
||||
<Widget type="ImageBox" skin="ImageBox" position="8 12 16 16" name="EffectImage">
|
||||
</Widget>
|
||||
|
||||
<Widget type="TextBox" skin="NormalText" position="36 8 400 24" name="EffectName">
|
||||
<Property key="TextAlign" value="Left HCenter"/>
|
||||
</Widget>
|
||||
|
||||
|
||||
<!-- Range -->
|
||||
<Widget type="TextBox" skin="NormalText" position="8 36 400 24">
|
||||
<Property key="Caption" value="#{sRange}"/>
|
||||
<Property key="TextAlign" value="Left HCenter"/>
|
||||
</Widget>
|
||||
<Widget type="AutoSizedButton" skin="MW_Button" position="130 36 0 24" name="RangeButton">
|
||||
<Property key="Caption" value="#{sRangeTouch}"/>
|
||||
</Widget>
|
||||
|
||||
<!-- Magnitude -->
|
||||
<Widget type="Widget" position="8 80 400 70" name="MagnitudeBox">
|
||||
<Widget type="TextBox" skin="NormalText" position="0 0 400 24">
|
||||
<Property key="Caption" value="#{sMagnitude}"/>
|
||||
<Property key="TextAlign" value="Left HCenter"/>
|
||||
</Widget>
|
||||
|
||||
<Widget type="TextBox" skin="SandText" position="122 0 210 20" name="MagnitudeMinValue">
|
||||
<Property key="TextAlign" value="Center"/>
|
||||
<Property key="Caption" value="0"/>
|
||||
</Widget>
|
||||
<Widget type="MWScrollBar" skin="MW_HScroll" position="122 20 210 13" name="MagnitudeMinSlider">
|
||||
<Property key="Range" value="100"/>
|
||||
</Widget>
|
||||
|
||||
<Widget type="TextBox" skin="SandText" position="122 32 210 20" name="MagnitudeMaxValue">
|
||||
<Property key="TextAlign" value="Center"/>
|
||||
<Property key="Caption" value="0"/>
|
||||
</Widget>
|
||||
<Widget type="MWScrollBar" skin="MW_HScroll" position="122 52 210 13" name="MagnitudeMaxSlider">
|
||||
<Property key="Range" value="100"/>
|
||||
</Widget>
|
||||
</Widget>
|
||||
|
||||
|
||||
<!-- Duration -->
|
||||
<Widget type="Widget" position="8 153 400 40" name="DurationBox">
|
||||
<Widget type="TextBox" skin="NormalText" position="0 20 400 24">
|
||||
<Property key="Caption" value="#{sDuration}"/>
|
||||
<Property key="TextAlign" value="Left Top"/>
|
||||
</Widget>
|
||||
|
||||
<Widget type="TextBox" skin="SandText" position="122 0 210 20" name="DurationValue">
|
||||
<Property key="TextAlign" value="Center"/>
|
||||
<Property key="Caption" value="0"/>
|
||||
</Widget>
|
||||
<Widget type="MWScrollBar" skin="MW_HScroll" position="122 20 210 13" name="DurationSlider">
|
||||
<Property key="Range" value="1440"/>
|
||||
</Widget>
|
||||
</Widget>
|
||||
|
||||
<!-- Area -->
|
||||
<Widget type="Widget" position="8 197 400 40" name="AreaBox">
|
||||
<Widget type="TextBox" skin="NormalText" position="0 20 400 24" name="AreaText">
|
||||
<Property key="Caption" value="#{sArea}"/>
|
||||
<Property key="TextAlign" value="Left Top"/>
|
||||
</Widget>
|
||||
|
||||
<Widget type="TextBox" skin="SandText" position="122 0 210 20" name="AreaValue">
|
||||
<Property key="TextAlign" value="Center"/>
|
||||
<Property key="Caption" value="0"/>
|
||||
</Widget>
|
||||
<Widget type="MWScrollBar" skin="MW_HScroll" position="122 20 210 13" name="AreaSlider">
|
||||
<Property key="Range" value="51"/>
|
||||
</Widget>
|
||||
</Widget>
|
||||
|
||||
<Widget type="HBox" position="8 266 336 24">
|
||||
<Widget type="Widget">
|
||||
<UserString key="HStretch" value="true"/>
|
||||
</Widget>
|
||||
|
||||
<Widget type="AutoSizedButton" skin="MW_Button" name="DeleteButton">
|
||||
<Property key="Caption" value="#{sDelete}"/>
|
||||
</Widget>
|
||||
|
||||
<Widget type="AutoSizedButton" skin="MW_Button" name="OkButton">
|
||||
<Property key="Caption" value="#{sOk}"/>
|
||||
</Widget>
|
||||
|
||||
<Widget type="AutoSizedButton" skin="MW_Button" name="CancelButton">
|
||||
<Property key="Caption" value="#{sCancel}"/>
|
||||
</Widget>
|
||||
</Widget>
|
||||
|
||||
</Widget>
|
||||
</MyGUI>
|
119
files/mygui/openmw_enchanting_dialog.layout
Normal file
|
@ -0,0 +1,119 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<MyGUI type="Layout">
|
||||
<Widget type="Window" skin="MW_Dialog" layer="Windows" position="0 0 560 400" name="_Main">
|
||||
|
||||
<Widget type="HBox" position="12 12 250 30">
|
||||
|
||||
<Widget type="AutoSizedTextBox" skin="NormalText">
|
||||
<Property key="Caption" value="#{sName}"/>
|
||||
</Widget>
|
||||
|
||||
<Widget type="EditBox" skin="MW_TextEdit" position="0 0 30 30" name="NameEdit">
|
||||
<UserString key="HStretch" value="true"/>
|
||||
</Widget>
|
||||
|
||||
<Widget type="Widget">
|
||||
</Widget>
|
||||
|
||||
</Widget>
|
||||
|
||||
<!-- Item -->
|
||||
|
||||
<Widget type="HBox" position="12 48 400 59">
|
||||
<Property key="Spacing" value="8"/>
|
||||
|
||||
<Widget type="AutoSizedTextBox" skin="NormalText">
|
||||
<Property key="Caption" value="#{sItem}"/>
|
||||
</Widget>
|
||||
<Widget type="Widget" skin="MW_Box" position="0 0 50 50">
|
||||
<Widget type="ImageBox" skin="ImageBox" position="9 9 32 32" name="ItemBox"/>
|
||||
</Widget>
|
||||
|
||||
<Widget type="Widget" position="0 0 8 0"/>
|
||||
|
||||
<Widget type="AutoSizedTextBox" skin="NormalText">
|
||||
<Property key="Caption" value="#{sSoulGem}"/>
|
||||
</Widget>
|
||||
<Widget type="Button" skin="MW_Box" position="0 0 50 50">
|
||||
<Widget type="ImageBox" skin="ImageBox" position="9 9 32 32" name="SoulBox"/>
|
||||
</Widget>
|
||||
|
||||
</Widget>
|
||||
|
||||
|
||||
<Widget type="TextBox" skin="NormalText" position="320 0 300 24">
|
||||
<Property key="Caption" value="#{sEnchantmentMenu3}:"/>
|
||||
</Widget>
|
||||
<Widget type="TextBox" skin="SandText" position="280 0 258 24" name="Enchantment">
|
||||
<Property key="Caption" value="1"/>
|
||||
<Property key="TextAlign" value="Right HCenter"/>
|
||||
</Widget>
|
||||
|
||||
|
||||
<Widget type="TextBox" skin="NormalText" position="320 24 300 24">
|
||||
<Property key="Caption" value="#{sCastCost}:"/>
|
||||
</Widget>
|
||||
<Widget type="TextBox" skin="SandText" position="280 24 258 24" name="CastCost">
|
||||
<Property key="Caption" value="39"/>
|
||||
<Property key="TextAlign" value="Right HCenter"/>
|
||||
</Widget>
|
||||
|
||||
|
||||
<Widget type="TextBox" skin="NormalText" position="320 48 300 24">
|
||||
<Property key="Caption" value="#{sCharges}"/>
|
||||
</Widget>
|
||||
<Widget type="TextBox" skin="SandText" position="280 48 258 24" name="Charge">
|
||||
<Property key="Caption" value="39"/>
|
||||
<Property key="TextAlign" value="Right HCenter"/>
|
||||
</Widget>
|
||||
|
||||
|
||||
<!-- Available effects -->
|
||||
<Widget type="TextBox" skin="NormalText" position="12 108 300 24">
|
||||
<Property key="Caption" value="#{sMagicEffects}"/>
|
||||
</Widget>
|
||||
<Widget type="MWList" skin="MW_SimpleList" position="12 136 202 209" name="AvailableEffects">
|
||||
</Widget>
|
||||
|
||||
<!-- Used effects -->
|
||||
<Widget type="TextBox" skin="NormalText" position="226 108 300 24">
|
||||
<Property key="Caption" value="#{sEffects}"/>
|
||||
</Widget>
|
||||
<Widget type="Widget" skin="MW_Box" position="226 136 316 209">
|
||||
<Widget type="ScrollView" skin="MW_ScrollViewH" position="4 4 308 201" name="UsedEffects">
|
||||
<Property key="CanvasAlign" value="Left Top"/>
|
||||
</Widget>
|
||||
</Widget>
|
||||
|
||||
<Widget type="HBox" position="0 340 560 60">
|
||||
<Property key="Padding" value="16"/>
|
||||
|
||||
<Widget type="AutoSizedButton" skin="MW_Button" name="TypeButton">
|
||||
<Property key="Caption" value="Constant effect"/>
|
||||
</Widget>
|
||||
|
||||
<Widget type="Widget">
|
||||
<UserString key="HStretch" value="true"/>
|
||||
</Widget>
|
||||
|
||||
<Widget type="AutoSizedTextBox" skin="NormalText" name="PriceTextLabel">
|
||||
<Property key="Caption" value="#{sBarterDialog7}"/>
|
||||
</Widget>
|
||||
<Widget type="AutoSizedTextBox" skin="SandText" name="PriceLabel">
|
||||
<Property key="Caption" value="0"/>
|
||||
</Widget>
|
||||
|
||||
|
||||
|
||||
<Widget type="AutoSizedButton" skin="MW_Button" name="BuyButton">
|
||||
<Property key="Caption" value="#{sBuy}"/>
|
||||
</Widget>
|
||||
|
||||
<Widget type="AutoSizedButton" skin="MW_Button" name="CancelButton">
|
||||
<Property key="Caption" value="#{sCancel}"/>
|
||||
</Widget>
|
||||
</Widget>
|
||||
|
||||
</Widget>
|
||||
</MyGUI>
|
43
files/mygui/openmw_font.xml
Normal file
|
@ -0,0 +1,43 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<MyGUI type="Resource" version="1.1">
|
||||
<Resource type="ResourceTrueTypeFont" name="EB Garamond">
|
||||
<Property key="Source" value="EBGaramond-Regular.ttf"/>
|
||||
<Property key="Size" value="16"/>
|
||||
<Property key="Resolution" value="72"/>
|
||||
<Property key="Antialias" value="false"/>
|
||||
<Property key="TabWidth" value="8"/>
|
||||
<Property key="OffsetHeight" value="0"/>
|
||||
<Codes>
|
||||
<Code range="33 126"/>
|
||||
<Code range="160"/> <!-- Non-breaking space -->
|
||||
<Code range="192 382"/> <!-- Central and Eastern European languages glyphs -->
|
||||
<Code range="1025 1105"/>
|
||||
<Code range="2026"/> <!-- Ellipsis -->
|
||||
<Code range="8470"/>
|
||||
<Code range="8211"/> <!-- Minus -->
|
||||
<Code range="8216 8217"/> <!-- Single quotes -->
|
||||
<Code range="8220 8221"/> <!-- Right and Left Double Quotation mark -->
|
||||
<Code hide="128"/>
|
||||
<Code hide="1026 1039"/>
|
||||
<Code hide="1104"/>
|
||||
</Codes>
|
||||
</Resource>
|
||||
|
||||
<Resource type="ResourceTrueTypeFont" name="MonoFont">
|
||||
<Property key="Source" value="DejaVuLGCSansMono.ttf"/>
|
||||
<Property key="Size" value="18"/>
|
||||
<Property key="Resolution" value="50"/>
|
||||
<Property key="Antialias" value="false"/>
|
||||
<Property key="TabWidth" value="8"/>
|
||||
<Property key="OffsetHeight" value="0"/>
|
||||
<Codes>
|
||||
<Code range="33 126"/>
|
||||
<Code range="192 382"/>
|
||||
<Code range="1025 1105"/>
|
||||
<Code range="8470"/>
|
||||
<Code hide="128"/>
|
||||
<Code hide="1026 1039"/>
|
||||
<Code hide="1104"/>
|
||||
</Codes>
|
||||
</Resource>
|
||||
</MyGUI>
|
177
files/mygui/openmw_hud.layout
Normal file
|
@ -0,0 +1,177 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<MyGUI type="Layout">
|
||||
<Widget type="Widget" layer="HUD" position="0 0 300 200" name="_Main">
|
||||
<!-- Energy bars -->
|
||||
<Widget type="Widget" skin="" position="13 131 65 12" align="Left Bottom" name="EnemyHealthFrame">
|
||||
<Widget type="ProgressBar" skin="MW_EnergyBar_Yellow" position="0 0 65 12" align="Left Bottom" name="EnemyHealth">
|
||||
<Property key="Visible" value="false"/>
|
||||
</Widget>
|
||||
</Widget>
|
||||
<Widget type="Button" skin="" position="13 146 65 12" align="Left Bottom" name="HealthFrame">
|
||||
<UserString key="ToolTipType" value="Layout"/>
|
||||
<UserString key="ToolTipLayout" value="HealthToolTip"/>
|
||||
<UserString key="ImageTexture_HealthImage" value="icons\k\health.dds"/>
|
||||
<Widget type="ProgressBar" skin="MW_EnergyBar_Red" position="0 0 65 12" align="Left Bottom" name="Health">
|
||||
<Property key="NeedMouse" value="false"/>
|
||||
</Widget>
|
||||
</Widget>
|
||||
<Widget type="Button" skin="" position="13 161 65 12" align="Left Bottom" name="MagickaFrame">
|
||||
<UserString key="ToolTipType" value="Layout"/>
|
||||
<UserString key="ToolTipLayout" value="HealthToolTip"/>
|
||||
<UserString key="ImageTexture_HealthImage" value="icons\k\magicka.dds"/>
|
||||
<Widget type="ProgressBar" skin="MW_EnergyBar_Blue" position="0 0 65 12" align="Left Bottom" name="Magicka">
|
||||
<Property key="NeedMouse" value="false"/>
|
||||
</Widget>
|
||||
</Widget>
|
||||
<Widget type="Button" skin="" position="13 176 65 12" align="Left Bottom" name="FatigueFrame">
|
||||
<UserString key="ToolTipType" value="Layout"/>
|
||||
<UserString key="ToolTipLayout" value="HealthToolTip"/>
|
||||
<UserString key="ImageTexture_HealthImage" value="icons\k\fatigue.dds"/>
|
||||
<Widget type="ProgressBar" skin="MW_EnergyBar_Green" position="0 0 65 12" align="Left Bottom" name="Stamina">
|
||||
<Property key="NeedMouse" value="false"/>
|
||||
</Widget>
|
||||
</Widget>
|
||||
|
||||
<!-- Drowning bar -->
|
||||
<Widget type="Widget" skin="HUD_Box" position="0 36 220 56" align="Center Top" name="DrowningFrame">
|
||||
<Property key="Visible" value="false"/>
|
||||
<Widget type="TextBox" skin="SandText" position="0 8 220 24" name="DrowningTitle" align="Center Top HStretch">
|
||||
<Property key="Caption" value="#{sBreath}"/>
|
||||
<Property key="TextAlign" value="Center"/>
|
||||
<Property key="TextShadow" value="true"/>
|
||||
<Property key="TextShadowColour" value="0 0 0"/>
|
||||
</Widget>
|
||||
<Widget type="ProgressBar" skin="MW_Progress_Loading" position="12 36 196 8" align="Center Top" name="Drowning">
|
||||
<Property key="NeedMouse" value="false"/>
|
||||
</Widget>
|
||||
</Widget>
|
||||
|
||||
<!-- Equipped weapon/selected spell name display for a few seconds after it changes -->
|
||||
<Widget type="TextBox" skin="SandText" position="13 118 270 24" name="WeaponSpellName" align="Left Bottom HStretch">
|
||||
<Property key="Visible" value="false"/>
|
||||
<Property key="TextAlign" value="Left"/>
|
||||
<Property key="TextShadow" value="true"/>
|
||||
<Property key="TextShadowColour" value="0 0 0"/>
|
||||
</Widget>
|
||||
|
||||
<!-- Equipped weapon box -->
|
||||
<Widget type="Button" skin="" position="82 146 36 41" align="Left Bottom" name="WeapBox">
|
||||
<Widget type="Widget" skin="HUD_Box" position="0 0 36 36">
|
||||
<Property key="NeedMouse" value="false"/>
|
||||
<Widget type="ImageBox" skin="ImageBox" position="2 2 32 32" align="Left Top" name="WeapImage">
|
||||
<Property key="NeedMouse" value="false"/>
|
||||
</Widget>
|
||||
</Widget>
|
||||
<Widget type="ProgressBar" skin="MW_EnergyBar_Red" position="0 36 36 6" align="Left Bottom" name="WeapStatus">
|
||||
<Property key="NeedMouse" value="false"/>
|
||||
</Widget>
|
||||
</Widget>
|
||||
|
||||
<!-- Selected spell box -->
|
||||
<Widget type="Button" position="122 146 36 41" align="Left Bottom" name="SpellBox">
|
||||
<Widget type="Widget" skin="HUD_Box" position="0 0 36 36">
|
||||
<Widget type="ImageBox" skin="ImageBox" position="2 2 32 32" align="Left Top" name="SpellImage"/>
|
||||
<Property key="NeedMouse" value="false"/>
|
||||
</Widget>
|
||||
<Widget type="ProgressBar" skin="MW_EnergyBar_Red" position="0 36 36 6" align="Left Bottom" name="SpellStatus">
|
||||
<Property key="NeedMouse" value="false"/>
|
||||
</Widget>
|
||||
</Widget>
|
||||
|
||||
<!-- Sneak indicator box -->
|
||||
<Widget type="Button" skin="" position="162 146 36 36" align="Left Bottom" name="SneakBox">
|
||||
<Widget type="Widget" skin="HUD_Box" position="0 0 36 36">
|
||||
<Property key="NeedMouse" value="false"/>
|
||||
<Widget type="ImageBox" skin="ImageBox" position="2 2 32 32" align="Left Top" name="SneakImage">
|
||||
<Property key="NeedMouse" value="false"/>
|
||||
<Property key="ImageTexture" value="icons\k\stealth_sneak.dds"/>
|
||||
</Widget>
|
||||
</Widget>
|
||||
</Widget>
|
||||
|
||||
<!-- Spell effects box -->
|
||||
<Widget type="Widget" skin="HUD_Box_Transparent" position="199 168 20 20" align="Right Bottom" name="EffectBox">
|
||||
</Widget>
|
||||
|
||||
<!-- Cell name display when cell changes -->
|
||||
<Widget type="TextBox" skin="SandText" position="0 89 288 24" name="CellName" align="Left Bottom HStretch">
|
||||
<Property key="Visible" value="false"/>
|
||||
<Property key="TextAlign" value="Right"/>
|
||||
<Property key="TextShadow" value="true"/>
|
||||
<Property key="TextShadowColour" value="0 0 0"/>
|
||||
</Widget>
|
||||
|
||||
<!-- Map box -->
|
||||
<Widget type="Widget" skin="" position="223 123 65 65" name="MiniMapBox" align="Right Bottom">
|
||||
<Widget type="Widget" skin="HUD_Box" position="0 0 65 65" align="Center">
|
||||
|
||||
<Widget type="ScrollView" skin="MW_MapView" position="2 2 61 61" align="Left Bottom" name="MiniMap">
|
||||
<Property key="CanvasSize" value="1536 1536"/>
|
||||
|
||||
<Widget type="ImageBox" skin="RotatingSkin" position="0 0 32 32" align="Bottom Left" name="Compass">
|
||||
<Property key="ImageTexture" value="textures\compass.dds"/>
|
||||
</Widget>
|
||||
|
||||
<Widget type="Button" skin="" position="0 0 1536 1536" name="MiniMapButton" align="Right Bottom">
|
||||
</Widget>
|
||||
|
||||
</Widget>
|
||||
|
||||
</Widget>
|
||||
</Widget>
|
||||
|
||||
<!-- Crosshair -->
|
||||
<Widget type="ImageBox" skin="ImageBox" position="0 0 32 32" align="Center Center" name="Crosshair">
|
||||
<Property key="ImageTexture" value="textures\target.dds"/>
|
||||
</Widget>
|
||||
|
||||
<!-- Basic FPSCounter box -->
|
||||
<Widget type="Widget" skin="HUD_Box" position="12 12 32 26" align="Left Top" name="FPSBox">
|
||||
<Property key="Visible" value="false"/>
|
||||
<Widget type="TextBox" skin="NumFPS" position="3 3 25 17" align="Center" name="FPSCounter"/>
|
||||
</Widget>
|
||||
|
||||
<!-- Advanced FPSCounter box -->
|
||||
<Widget type="Widget" skin="HUD_Box" position="12 12 165 64" align="Left Top" name="FPSBoxAdv">
|
||||
<Property key="Visible" value="false"/>
|
||||
|
||||
<Widget type="Widget" skin="" position="0 0 110 60" align="Left Top">
|
||||
|
||||
<Widget type="TextBox" skin="NumFPS" position="0 0 110 32" align="Left Top">
|
||||
<Property key="Caption" value="FPS: "/>
|
||||
<Property key="TextAlign" value="Right"/>
|
||||
</Widget>
|
||||
|
||||
<Widget type="TextBox" skin="NumFPS" position="0 16 110 32" align="Left Top">
|
||||
<Property key="Caption" value="Tri Count: "/>
|
||||
<Property key="TextAlign" value="Right"/>
|
||||
</Widget>
|
||||
|
||||
<Widget type="TextBox" skin="NumFPS" position="0 32 110 32" align="Left Top">
|
||||
<Property key="Caption" value="Batch Count: "/>
|
||||
<Property key="TextAlign" value="Right"/>
|
||||
</Widget>
|
||||
|
||||
</Widget>
|
||||
|
||||
<Widget type="Widget" skin="" position="110 0 55 60" align="Left Top">
|
||||
|
||||
<Widget type="TextBox" skin="NumFPS" position="0 0 55 32" align="Left Top" name="FPSCounterAdv">
|
||||
<Property key="TextAlign" value="Left"/>
|
||||
</Widget>
|
||||
|
||||
<Widget type="TextBox" skin="NumFPS" position="0 16 55 32" align="Left Top" name="TriangleCounter">
|
||||
<Property key="TextAlign" value="Left"/>
|
||||
</Widget>
|
||||
|
||||
<Widget type="TextBox" skin="NumFPS" position="0 32 55 32" align="Left Top" name="BatchCounter">
|
||||
<Property key="TextAlign" value="Left"/>
|
||||
</Widget>
|
||||
|
||||
</Widget>
|
||||
|
||||
</Widget>
|
||||
|
||||
</Widget>
|
||||
</MyGUI>
|
35
files/mygui/openmw_hud_box.skin.xml
Normal file
|
@ -0,0 +1,35 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<MyGUI type="Skin">
|
||||
|
||||
<!-- The 'box' frame that surrounds various HUD items and other elements -->
|
||||
|
||||
<Skin name="HUD_Box" size="40 40">
|
||||
|
||||
<!-- Borders -->
|
||||
|
||||
<Child type="Widget" skin="MW_Box" offset="0 0 40 40" align="Left Stretch" name="Client"/>
|
||||
|
||||
<!-- The interior of the box -->
|
||||
|
||||
<Child type="Widget" skin="BlackBG" offset="2 2 36 36" align="Stretch" name="Client"/>
|
||||
|
||||
</Skin>
|
||||
|
||||
<Skin name="HUD_Box_Transparent" size="40 40">
|
||||
<Child type="Widget" skin="MW_Box" offset="0 0 40 40" align="Left Stretch" name="Client"/>
|
||||
</Skin>
|
||||
|
||||
<Skin name="HUD_Box_NoTransp" size="40 40">
|
||||
|
||||
<!-- Borders -->
|
||||
|
||||
<Child type="Widget" skin="MW_Box" offset="0 0 40 40" align="Left Stretch" name="Client"/>
|
||||
|
||||
<!-- The interior of the box -->
|
||||
|
||||
<Child type="Widget" skin="DialogBG" offset="2 2 36 36" align="Stretch" name="Client"/>
|
||||
|
||||
</Skin>
|
||||
|
||||
</MyGUI>
|