Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
2dfeb85
Update to Ogre v14.6
slapin Feb 17, 2026
e010f99
Fixed for Ogre 14.5+
slapin Jun 13, 2026
54f9930
Single player network fix
slapin Jun 13, 2026
70676f1
Fix correctness bugs found reviewing the Ogre 14.6 port
Upabjojr Jul 31, 2026
3879605
Drop the leftover CEGUI layout debugging
Upabjojr Jul 31, 2026
f55753e
Tidy up the mechanical parts of the port
Upabjojr Jul 31, 2026
79fe093
Group the RTShaderLib path the way Ogre's own template does
Upabjojr Jul 31, 2026
550f41c
Correct two review findings that a real build disproved
Upabjojr Jul 31, 2026
bb4a72a
Make the Audio and Gameplay sliders visible again
Upabjojr Jul 31, 2026
aca1c91
Fixed some minor issues
slapin Aug 9, 2026
85a4173
Returned RefMetal material
slapin Aug 13, 2026
a4bb2b5
Added 'ambient' parameter to ReflMetal material
slapin Aug 13, 2026
e450a9c
Port the last fixed-function materials to Ogre 14
Upabjojr Aug 14, 2026
7c161d7
Delete the vendored RTShaderLib sources nothing can load
Upabjojr Aug 14, 2026
6420d3c
Keep the hard error when a multiplayer host's port is busy
Upabjojr Aug 14, 2026
bb523dc
Vendor Panels_Diffuse.png so the RTSS panel materials have their texture
Upabjojr Aug 14, 2026
27a6a9b
Re-fit the settings window when the display size changes
Upabjojr Aug 14, 2026
34c9d07
Re-anchor the YES/NO dialogs to the frame's real client area
Upabjojr Aug 14, 2026
816f452
Document what renderQueueStarted's cameraName parameter depends on
Upabjojr Aug 14, 2026
de1cba2
Let the stats windows scroll instead of clipping their text
Upabjojr Aug 14, 2026
f604940
Consolidate the x11_mouse_hide comments into one explanation
Upabjojr Aug 14, 2026
7b17512
Give the YES/NO dialogs room for the titlebar the skin actually draws
Upabjojr Aug 14, 2026
99f44bf
Pin the FrameWindow titlebar to the window top
Upabjojr Aug 14, 2026
3944e4d
Shrug off an Ogre install that exports Bullet headers it never wrote
Upabjojr Aug 15, 2026
efa47d3
Give the skill tree window room for the client area the skin really has
Upabjojr Aug 22, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
37 changes: 24 additions & 13 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,9 @@ if(NOT MSVC)
add_definitions(-DOD_VERSION="${OD_MAJOR_VERSION}.${OD_MINOR_VERSION}.${OD_PATCH_LEVEL}")
endif()

set(CMAKE_CXX_STANDARD 14)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This now competes with the existing mechanism rather than replacing it. Line 213 still does:

set(CMAKE_CXX_FLAGS "${OD_CXX11_FLAGS} ${OD_OPT_FLAGS} ${CMAKE_CXX_FLAGS}")

where OD_CXX11_FLAGS is -std=c++11 from the CHECK_CXX_COMPILER_FLAG probe above. Both -std=c++11 and -std=gnu++14 end up on the command line, and which one wins is down to CMake's argument ordering.

Also missing set(CMAKE_CXX_STANDARD_REQUIRED ON) — without it CMake silently falls back to an older standard on a compiler that can't do C++14, rather than failing the configure.

Cleanest is to drop the OD_CXX11_FLAGS probe entirely (lines 144-154) and let CMAKE_CXX_STANDARD own this. CMAKE_CXX_EXTENSIONS defaults to ON, which gives -std=gnu++14 and covers the MinGW case the old probe was working around.

set(CMAKE_CXX_STANDARD_REQUIRED ON)

# Set the data path depending on the platform
if(WIN32)
set(OD_DATA_PATH ".")
Expand Down Expand Up @@ -136,20 +139,9 @@ set(OD_OPT_FLAGS CACHE STRING "Optimization and optional compilation flags")
set(OD_CXX11_FLAGS CACHE STRING "Compilation flags to enable C++11 support")

if(MSVC)
# C++11 compilation flag is activated by default
# The language standard is driven by CMAKE_CXX_STANDARD above.
# Optimisation flags can be added if deemed useful
else()
include(CheckCXXCompilerFlag)
if(NOT OD_CXX11_FLAGS)
CHECK_CXX_COMPILER_FLAG("-std=c++11" OD_CXX11_FLAG_SUPPORTED)
CHECK_CXX_COMPILER_FLAG("-std=gnu++11" OD_CXXGNU11_FLAG_SUPPORTED)
# MinGW supports CXX11 flag but do not compile with it. However, it works with gnu++11
if(OD_CXX11_FLAG_SUPPORTED AND NOT MINGW)
set(OD_CXX11_FLAGS "-std=c++11" CACHE STRING "Compilation flags to enable C++11 support" FORCE)
elseif(OD_CXX11_FLAG_SUPPORTED)
set(OD_CXX11_FLAGS "-std=gnu++11" CACHE STRING "Compilation flags to enable C++11 support" FORCE)
endif()
endif()
if(OD_ENABLE_WARNINGS)
# Help getting compilation warnings
set(OD_OPT_FLAGS "${OD_OPT_FLAGS} -Wall -Wcast-align -Wcast-qual -Wctor-dtor-privacy -Wdisabled-optimization -Wold-style-cast")
Expand Down Expand Up @@ -208,7 +200,7 @@ if(OD_USE_SFML_WINDOW)
add_definitions(-DOD_USE_SFML_WINDOW)
endif()

set(CMAKE_CXX_FLAGS "${OD_CXX11_FLAGS} ${OD_OPT_FLAGS} ${CMAKE_CXX_FLAGS}")
set(CMAKE_CXX_FLAGS "${OD_OPT_FLAGS} ${CMAKE_CXX_FLAGS}")
message(STATUS "CMake CXX Flags: " ${CMAKE_CXX_FLAGS})

set(EXTRA_LIBRARIES "")
Expand Down Expand Up @@ -525,6 +517,25 @@ find_package(PythonLibs REQUIRED)
find_package(pybind11 REQUIRED)
find_package(OIS REQUIRED)
find_package(OGRE REQUIRED CONFIG)
# An Ogre built against its bundled dependencies (OGRE_BUILD_DEPENDENCIES=ON) but
# installed without OGRE_INSTALL_DEPENDENCIES exports the OgreBullet component with
# an include/bullet directory that was never installed, and CMake refuses to
# generate for any target that links it - which OGRE_LIBRARIES makes every OGRE
# consumer do. The game never includes a Bullet header, so the missing directory
# only matters as far as it makes CMake stop: drop the dead entries and move on.
if(TARGET OgreBullet)
get_target_property(_od_bullet_incs OgreBullet INTERFACE_INCLUDE_DIRECTORIES)
if(_od_bullet_incs)
set(_od_bullet_incs_present "")
foreach(_od_inc_dir IN LISTS _od_bullet_incs)
if(_od_inc_dir MATCHES "^\\$" OR EXISTS "${_od_inc_dir}")
list(APPEND _od_bullet_incs_present "${_od_inc_dir}")
endif()
endforeach()
set_target_properties(OgreBullet PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${_od_bullet_incs_present}")
endif()
endif()
set(RTSHADER_DIR "${OGRE_MEDIA_DIR}/RTShaderLib") # use upstream version
set(OGRE_PLUGIN_DIR_REL ${OGRE_PLUGIN_DIR})
set(OGRE_PLUGIN_DIR_DBG ${OGRE_PLUGIN_DIR})
Expand Down
4 changes: 2 additions & 2 deletions CREDITS
Original file line number Diff line number Diff line change
Expand Up @@ -95,8 +95,6 @@ template.level OD Team GPLv3+

Name Author License Source URL
------------------------------------------------------------------------------------------------------------------------
RTShaderLib/* The Ogre 3D Team MIT http://www.ogre3d.org/licensing

scripts/
-> *.material OD Team GPLv3+

Expand Down Expand Up @@ -185,6 +183,8 @@ textures/
-> MysteryBox*.png Nobiax, Danimal CC-BY-SA 3.0 http://opengameart.org/users/danimal
-> OrcBed*.png Bart, p0ss CC-BY-SA 3.0 http://forum.freegamedev.net/viewtopic.php?p=60191#p60191
-> Orc{,Normal}.png
-> Panels_Diffuse.png The Ogre 3D Team MIT https://github.com/OGRECave/ogre - Samples/Media/materials/textures
-> Panels_Normal_Tangent.png The Ogre 3D Team MIT https://github.com/OGRECave/ogre - Samples/Media/materials/textures
-> PitDemon*.png
-> Podium*.png
-> Portal{,Normal}.png Yughues CC0 http://opengameart.org/users/yughues
Expand Down
16 changes: 10 additions & 6 deletions cmake/config/resources.cfg.in
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
[Graphics]

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[Graphics] is now declared twice, with [OgreInternal] in between, and @OGRE_MEDIA_DIR@/Main is listed under both groups. Ogre's config parser will merge the two [Graphics] blocks so it works, but it reads as an accident.

The six hardcoded @CMAKE_INSTALL_PREFIX@/share/OGRE/Media/RTShaderLib* lines above are also redundant now that @RTSHADER_DIR@ is expanded — RTSHADER_DIR is set to ${OGRE_MEDIA_DIR}/RTShaderLib in CMakeLists.txt:530, pointing at the same place but resolved properly instead of guessed from the install prefix.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed that with followup commit as latest Ogre update showed the problem.

FileSystem=@CMAKE_INSTALL_PREFIX@/share/OGRE/Media/RTShaderLib
FileSystem=@CMAKE_INSTALL_PREFIX@/share/OGRE/Media/RTShaderLib/GLSL
FileSystem=@CMAKE_INSTALL_PREFIX@/share/OGRE/Media/RTShaderLib/HLSL
FileSystem=@CMAKE_INSTALL_PREFIX@/share/OGRE/Media/RTShaderLib/HLSL_Cg
FileSystem=@CMAKE_INSTALL_PREFIX@/share/OGRE/Media/RTShaderLib/materials
FileSystem=@CMAKE_INSTALL_PREFIX@/share/OGRE/Media/RTShaderLib/../Main
# Our hand-written .vert/.frag live in the Graphics group and #include
# OgreUnifiedShader.h plus the RTShaderLib FFPLib_*/SGXLib_* sources. Ogre resolves
# those includes within the *same* resource group, so Main must be here.
# RTShaderLib is deliberately listed ONLY here: adding it to [OgreInternal] as well
# makes RTSSamplers.material parse twice and Ogre then throws
# "Sampler 'Ogre/ShadowSampler' already exists" during startup.
# Likewise, Media/Main must NOT also be in [OgreInternal] because Shadow.material
# defines shared_params OgreFroxels which would be created twice.
FileSystem=@RTSHADER_DIR@
FileSystem=@OGRE_MEDIA_DIR@/Main
FileSystem=materials/scripts
FileSystem=materials/scripts/Creatures
FileSystem=materials/textures
Expand Down
11 changes: 8 additions & 3 deletions gui/LoadConfirm.layout
Original file line number Diff line number Diff line change
Expand Up @@ -7,20 +7,25 @@
<Property name="AlwaysOnTop" value="True" />
<Property name="Text" value="Are you sure ?" />
<Property name="AlwaysOnTop" value="True" />
<!-- The text fills the client area above the buttons and the buttons
are anchored to the client area's bottom edge, so the dialog lays
out correctly whatever room the titlebar and frame take. -->
<Window type="OD/StaticText" name="Message" >
<Property name="Text" value=" You have an unsaved changes, your work will be lost, &#0010;
Do you really want to load a new level?" />
<Property name="InheritsAlpha" value="False" />
<Property name="Area" value="{{0.5,-220},{0.5,-100},{0.5,220},{0.5,0}}" />
<Property name="VertFormatting" value="CentreAligned" />
<Property name="HorzFormatting" value="WordWrapCentered" />
<Property name="Area" value="{{0,25},{0,5},{1,-25},{1,-50}}" />
</Window>
<Window type="OD/Button" name="YesOption" >
<Property name="Area" value="{{0.3,-48},{0.8,-39},{0.3,44},{0.8,-1}}" />
<Property name="Area" value="{{0.3,-48},{1,-44},{0.3,44},{1,-6}}" />
<Property name="Text" value="Yes" />
<Property name="TooltipText" value="Confirm exit" />
<Property name="InheritsAlpha" value="False" />
</Window>
<Window type="OD/Button" name="NoOption" >
<Property name="Area" value="{{0.7,-47},{0.8,-39},{0.7,45},{0.8,-1}}" />
<Property name="Area" value="{{0.7,-47},{1,-44},{0.7,45},{1,-6}}" />
<Property name="Text" value="No" />
<Property name="TooltipText" value="Cancel exit" />
<Property name="InheritsAlpha" value="False" />
Expand Down
23 changes: 21 additions & 2 deletions gui/OD.looknfeel
Original file line number Diff line number Diff line change
Expand Up @@ -912,8 +912,22 @@
<Property name="NWSESizingCursorImage" value="OpenDungeonsSkin/MouseNwSeCursor" />
<Property name="NESWSizingCursorImage" value="OpenDungeonsSkin/MouseNeSwCursor" />
<NamedArea name="ClientWithTitleWithFrame">
<Area />

<Area>
<Dim type="LeftEdge"><ImageDim dimension="Width" name="OpenDungeonsSkin/WindowTopLeft" /></Dim>
<Dim type="TopEdge"><WidgetDim dimension="BottomEdge" widget="__auto_titlebar__" /></Dim>
<Dim type="RightEdge">
<OperatorDim op="Subtract">
<UnifiedDim scale="1" type="RightEdge" />
<ImageDim dimension="Width" name="OpenDungeonsSkin/WindowTopRight" />
</OperatorDim>
</Dim>
<Dim type="BottomEdge">
<OperatorDim op="Subtract">
<UnifiedDim scale="1" type="BottomEdge" />
<ImageDim dimension="Height" name="OpenDungeonsSkin/WindowBottomEdge" />
</OperatorDim>
</Dim>
</Area>
</NamedArea>
<NamedArea name="ClientWithTitleNoFrame">
<Area>
Expand Down Expand Up @@ -959,6 +973,10 @@
</Area>
<Property name="AlwaysOnTop" value="False" />
<Property name="WantsMultiClickEvents" value="False" />
<!-- Position against the window's outer rect, not the client area:
the client area starts below the titlebar, so a client-relative
titlebar would sit its own height too low. -->
<Property name="NonClient" value="True" />
</Child>
<Child nameSuffix="__auto_closebutton__" type="OD/SystemButton">
<Area>
Expand Down Expand Up @@ -986,6 +1004,7 @@
<Property name="NormalImage" value="OpenDungeonsSkin/CloseButtonNormal" />
<Property name="HoverImage" value="OpenDungeonsSkin/CloseButtonHover" />
<Property name="PushedImage" value="OpenDungeonsSkin/CloseButtonPressed" />
<Property name="NonClient" value="True" />
</Child>
<ImagerySection name="withtitle_frame">
<FrameComponent>
Expand Down
13 changes: 8 additions & 5 deletions gui/WindowApplyChanges.layout
Original file line number Diff line number Diff line change
Expand Up @@ -2,27 +2,30 @@

<GUILayout version="4" >
<Window type="OD/FrameWindow" name="ConfirmRestart" >
<Property name="Area" value="{{0.5,-200},{0.5,-100},{0.5,200},{0.5,60}}" />
<Property name="Area" value="{{0.5,-200},{0.5,-95},{0.5,200},{0.5,95}}" />
<Property name="Text" value="Warning" />
<Property name="Alpha" value="0.8" />
<Property name="AlwaysOnTop" value="True" />
<Property name="SizingEnabled" value="False" />
<!-- The text fills the client area above the buttons and the buttons
are anchored to the client area's bottom edge, so the dialog lays
out correctly whatever room the titlebar and frame take. -->
<Window type="OD/StaticText" name="ApplyText" >
<Property name="FrameEnabled" value="False" />
<Property name="BackgroundEnabled" value="False" />
<Property name="InheritsAlpha" value="False" />
<Property Name="VertFormatting" Value="TopAligned" />
<Property name="VertFormatting" value="CentreAligned" />
<Property name="HorzFormatting" value="WordWrapCentered" />
<Property name="Area" value="{{0,25},{0,30},{1,-25},{0.7,0}}" />
<Property name="Area" value="{{0,25},{0,5},{1,-25},{1,-45}}" />
<Property name="Text" value="To actually apply this setting,&#0010;Open Dungeons needs to be stopped now.&#0010;Do you want to apply this change now?" />
</Window>
<Window type="OD/Button" name="CancelButton" >
<Property name="Area" value="{{0.3,-48},{0.9,-39},{0.3,44},{0.9,-5}}" />
<Property name="Area" value="{{0.3,-48},{1,-42},{0.3,44},{1,-8}}" />
<Property name="Text" value="Cancel" />
<Property name="InheritsAlpha" value="False" />
</Window>
<Window type="OD/Button" name="ApplyButton" >
<Property name="Area" value="{{0.7,-47},{0.9,-39},{0.7,45},{0.9,-5}}" />
<Property name="Area" value="{{0.7,-47},{1,-42},{0.7,45},{1,-8}}" />
<Property name="Text" value="Apply" />
<Property name="InheritsAlpha" value="False" />
</Window>
Expand Down
11 changes: 7 additions & 4 deletions gui/WindowQuit.layout
Original file line number Diff line number Diff line change
Expand Up @@ -2,24 +2,27 @@

<GUILayout version="4" >
<Window type="OD/FrameWindow" name="ConfirmExit" >
<Property name="Area" value="{{0.5,-200},{0.5,-100},{0.5,200},{0.5,39}}" />
<Property name="Area" value="{{0.5,-200},{0.5,-95},{0.5,200},{0.5,95}}" />
<Property name="Text" value="Do you really want to leave the underworld?" />
<Property name="Alpha" value="0.8" />
<Property name="AlwaysOnTop" value="True" />
<!-- Anchored to the client area's bottom edge so the dialog lays out
correctly whatever room the titlebar and frame take: buttons row,
then the replay checkbox underneath. -->
<Window type="OD/Button" name="YesOption" >
<Property name="Area" value="{{0.3,-48},{0.6,-39},{0.3,44},{0.6,-1}}" />
<Property name="Area" value="{{0.3,-48},{1,-72},{0.3,44},{1,-34}}" />
<Property name="Text" value="Yes" />
<Property name="TooltipText" value="Confirm exit" />
<Property name="InheritsAlpha" value="False" />
</Window>
<Window type="OD/Button" name="NoOption" >
<Property name="Area" value="{{0.7,-47},{0.6,-39},{0.7,45},{0.6,-1}}" />
<Property name="Area" value="{{0.7,-47},{1,-72},{0.7,45},{1,-34}}" />
<Property name="Text" value="No" />
<Property name="TooltipText" value="Cancel exit" />
<Property name="InheritsAlpha" value="False" />
</Window>
<Window type="OD/Checkbox" name="SaveReplayCheckbox" >
<Property name="Area" value="{{0.5,-91},{0,96},{0.5,91},{0,123}}" />
<Property name="Area" value="{{0.5,-91},{1,-30},{0.5,91},{1,-3}}" />
<Property name="Text" value="Save the game replay?" />
</Window>
</Window>
Expand Down
2 changes: 0 additions & 2 deletions gui/WindowSettings.layout
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,6 @@
<Property name="Area" value="{{0,32},{0,67},{0,327},{0,80}}" />
<Property name="Text" value="" />
<Property name="VerticalSlider" value="False" />
<Property name="AutoRenderingSurface" value="True" />
<Property name="MaximumValue" value="100" />
<Property name="ClickStepSize" value="5" />
</Window>
Expand Down Expand Up @@ -168,7 +167,6 @@
<Property name="Area" value="{{0,32},{0,150},{0,327},{0,163}}" />
<Property name="Text" value="" />
<Property name="VerticalSlider" value="False" />
<Property name="AutoRenderingSurface" value="True" />
<Property name="MaximumValue" value="250" />
<Property name="ClickStepSize" value="5" />
</Window>
Expand Down
5 changes: 4 additions & 1 deletion gui/WindowSkillTree.layout
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,10 @@

<GUILayout version="4" >
<Window type="OD/FrameWindow" name="SkillTreeWindow" >
<Property name="Area" value="{{0.5,-305},{0.5,-196},{0.5,305},{0.5,196}}" />
<!-- The three skill columns and the button bar need a 610x380 client
area; the OD/FrameWindow frame is 36px per side plus a 27px
titlebar, so the window itself must be 690x450. -->
<Property name="Area" value="{{0.5,-345},{0.5,-225},{0.5,345},{0.5,225}}" />
<Property name="Text" value="Skill Tree" />
<Property name="SizingEnabled" value="False" />
<Window type="OD/StaticImage" name="Skills" >
Expand Down
2 changes: 0 additions & 2 deletions materials/scripts/AdventurerBed.material
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,9 @@ material AdventurerBed
depth_check on
depth_func less_equal
depth_write on
illumination_stage
light_clip_planes off
light_scissor off
lighting on
normalise_normals off
polygon_mode solid
scene_blend one zero
scene_blend_op add
Expand Down
9 changes: 7 additions & 2 deletions materials/scripts/Anvil.material
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,15 @@ material Anvil : RTSS/NormalMapping_MultiPass
pass lighting
{
// Override the normal map.
rtshader_system
texture_unit
{
lighting_stage normal_map AnvilNormal.png object_space
texture AnvilNormal.png
rtshader_system
{
normal_map object_space
}
}

}

pass decal
Expand Down
9 changes: 7 additions & 2 deletions materials/scripts/ArrowProjectile.material
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,15 @@ material ArrowProjectile : RTSS/NormalMapping_MultiPass
pass lighting
{
// Override the normal map.
rtshader_system
texture_unit
{
lighting_stage normal_map BowNormal.png object_space
texture BowNormal.png
rtshader_system
{
normal_map object_space
}
}

}

pass decal
Expand Down
9 changes: 7 additions & 2 deletions materials/scripts/BasicAxe.material
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,15 @@ material BasicAxe : RTSS/NormalMapping_MultiPass
pass lighting
{
// Override the normal map.
rtshader_system
texture_unit
{
lighting_stage normal_map BasicAxeNormal.png object_space
texture BasicAxeNormal.png
rtshader_system
{
normal_map object_space
}
}

}

pass decal
Expand Down
9 changes: 7 additions & 2 deletions materials/scripts/BasicHammer.material
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,15 @@ material BasicHammer : RTSS/NormalMapping_MultiPass
pass lighting
{
// Override the normal map.
rtshader_system
texture_unit
{
lighting_stage normal_map BasicHammerNormal.png object_space
texture BasicHammerNormal.png
rtshader_system
{
normal_map object_space
}
}

}

pass decal
Expand Down
9 changes: 7 additions & 2 deletions materials/scripts/BasicShield.material
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,15 @@ material BasicShield : RTSS/NormalMapping_MultiPass
pass lighting
{
// Override the normal map.
rtshader_system
texture_unit
{
lighting_stage normal_map BasicShieldNormal.png object_space
texture BasicShieldNormal.png
rtshader_system
{
normal_map object_space
}
}

}

pass decal
Expand Down
9 changes: 7 additions & 2 deletions materials/scripts/BasicSword.material
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,15 @@ material BasicSword : RTSS/NormalMapping_MultiPass
pass lighting
{
// Override the normal map.
rtshader_system
texture_unit
{
lighting_stage normal_map BasicSwordNormal.png object_space
texture BasicSwordNormal.png
rtshader_system
{
normal_map object_space
}
}

}

pass decal
Expand Down
Loading