Merge remote-tracking branch 'wesnoth/master' into rendering_system_overhaul

This commit is contained in:
Tommy 2022-05-24 18:27:40 +12:00
commit 197dfae46c
883 changed files with 31856 additions and 30854 deletions

View file

@ -48,7 +48,6 @@ jobs:
export CXX_STD=17
export CFG=release
export LTO=true
export CACHE_DIR=/home/wesnoth-CI/build
./.github/workflows/ci-scripts/ubuntu.sh
ubuntu-2004-cmake-clang-debug:
@ -70,7 +69,6 @@ jobs:
export CXX_STD=17
export CFG=debug
export LTO=false
export CACHE_DIR=/home/wesnoth-CI/build
./.github/workflows/ci-scripts/ubuntu.sh
@ -93,7 +91,6 @@ jobs:
export CXX_STD=17
export CFG=release
export LTO=false
export CACHE_DIR=/home/wesnoth-CI/build
./.github/workflows/ci-scripts/ubuntu.sh
- name: Upload
@ -122,7 +119,6 @@ jobs:
export CXX_STD=17
export CFG=release
export LTO=false
export CACHE_DIR=/home/wesnoth-CI/build
./.github/workflows/ci-scripts/ubuntu.sh
- name: Upload 1
@ -158,7 +154,6 @@ jobs:
export CXX_STD=17
export CFG=release
export LTO=false
export CACHE_DIR=/home/wesnoth-CI/build
./.github/workflows/ci-scripts/ubuntu.sh
translations:
@ -180,7 +175,6 @@ jobs:
export CXX_STD=17
export CFG=release
export LTO=false
export CACHE_DIR=/home/wesnoth-CI/build
./.github/workflows/ci-scripts/ubuntu.sh
macos-intel-debug:
@ -194,7 +188,6 @@ jobs:
- name: macOS Intel Debug
run: |
export CFG=Debug
export CACHE_DIR=~/build-cache
./.github/workflows/ci-scripts/macos.sh
macos-intel-release:
@ -208,11 +201,8 @@ jobs:
- name: macOS Intel Release
run: |
export CFG=Release
export CACHE_DIR=~/build-cache
./.github/workflows/ci-scripts/macos.sh
# in the case of needing to recompile the vcpkg-created Windows dependencies, increment the cache-name and key for both Release and Debug
# this will create a brand new cache and recompile the vcpkg dependencies from scratch
windows-debug:
runs-on: windows-2019
@ -221,15 +211,6 @@ jobs:
with:
submodules: "recursive"
- name: Cache object files
id: windows-cache
uses: actions/cache@v2
with:
path: |
D:/a/wesnoth/vcpkg
D:/a/wesnoth/wesnoth/vcpkg_installed
key: W002
- name: Add msbuild to PATH
uses: microsoft/setup-msbuild@v1.0.2
@ -274,15 +255,6 @@ jobs:
with:
submodules: "recursive"
- name: Cache object files
id: windows-cache
uses: actions/cache@v2
with:
path: |
D:/a/wesnoth/vcpkg
D:/a/wesnoth/wesnoth/vcpkg_installed
key: W002
- name: Add msbuild to PATH
uses: microsoft/setup-msbuild@v1.0.2

View file

@ -10,7 +10,6 @@ echo "CXX: $CXX"
echo "CXX_STD: $CXX_STD"
echo "CFG: $CFG"
echo "LTO: $LTO"
echo "CACHE_DIR: $CACHE_DIR"
# set the fake display for unit tests
export DISPLAY=:99.0
@ -83,29 +82,18 @@ elif [ "$IMAGE" == "flatpak" ]; then
# flatpak-builder doesn't support this
# therefore manually move stuff between where flatpak needs it and where CI caching can see it
rm -R .flatpak-builder/*
cp -R "$CACHE_DIR"/. .flatpak-builder/
jq '.modules[2].sources[0]={"type":"dir","path":"/home/wesnoth-CI"} | ."build-options".env.FLATPAK_BUILDER_N_JOBS="2"' packaging/flatpak/org.wesnoth.Wesnoth.json > utils/dockerbuilds/CI/org.wesnoth.Wesnoth.json
flatpak-builder --ccache --force-clean --disable-rofiles-fuse wesnoth-app utils/dockerbuilds/CI/org.wesnoth.Wesnoth.json
flatpak-builder --force-clean --disable-rofiles-fuse wesnoth-app utils/dockerbuilds/CI/org.wesnoth.Wesnoth.json
EXIT_VAL=$?
rm -R "$CACHE_DIR"/*
cp -R .flatpak-builder/. "$CACHE_DIR"/
chmod -R 777 "$CACHE_DIR"/
exit $EXIT_VAL
else
if [ "$TOOL" == "cmake" ]; then
export CCACHE_MAXSIZE=3000M
export CCACHE_COMPILERCHECK=content
export CCACHE_DIR="$CACHE_DIR"
cmake -DCMAKE_BUILD_TYPE="$CFG" -DENABLE_GAME=true -DENABLE_SERVER=true -DENABLE_CAMPAIGN_SERVER=true -DENABLE_TESTS=true -DENABLE_NLS="$NLS" \
-DEXTRA_FLAGS_CONFIG="-pipe" -DENABLE_STRICT_COMPILATION=true -DENABLE_LTO="$LTO" -DLTO_JOBS=2 -DENABLE_MYSQL=true \
-DCXX_STD="$CXX_STD" -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache . || exit 1
-DCXX_STD="$CXX_STD" . || exit 1
make conftests || exit 1
make VERBOSE=1 -j2
EXIT_VAL=$?
ccache -s
ccache -z
else
scons wesnoth wesnothd campaignd boost_unit_tests build="$CFG" \
ctool="$CC" cxxtool="$CXX" cxx_std="$CXX_STD" \
@ -141,7 +129,4 @@ if [ -f "errors.log" ]; then
cat errors.log
fi
mv wesnoth "$CACHE_DIR"/wesnoth
mv wesnothd "$CACHE_DIR"/wesnothd
exit $EXIT_VAL

View file

@ -1,12 +1,7 @@
#!/bin/bash
HOMEBREW_NO_AUTO_UPDATE=1 brew install ccache scons
export PATH="/usr/local/opt/gettext/bin:/usr/local/opt/ccache/libexec:$PWD/utils/CI:$PATH"
export CC=ccache-clang
export CXX=ccache-clang++
export CCACHE_MAXSIZE=3000M
export CCACHE_COMPILERCHECK=content
export CCACHE_DIR="$CACHE_DIR"
HOMEBREW_NO_AUTO_UPDATE=1 brew install scons
export PATH="/usr/local/opt/gettext/bin:$PWD/utils/CI:$PATH"
./projectfiles/Xcode/Fix_Xcode_Dependencies
scons translations build=release --debug=time nls=true jobs=2 || exit 1
@ -18,9 +13,6 @@ EXIT_VAL=$?
hdiutil create -volname "Wesnoth_${CFG}" -fs 'HFS+' -srcfolder "build/$CFG" -ov -format UDBZ "Wesnoth_${CFG}.dmg"
ccache -s
ccache -z
if [ $EXIT_VAL == 0 ] && [ "$CFG" == "Release" ]; then
cd ../..
./run_wml_tests -g -c -t 30 -p "./projectfiles/Xcode/build/$CFG/The Battle for Wesnoth.app/Contents/MacOS/The Battle for Wesnoth"

View file

@ -10,7 +10,6 @@ echo "CXX: $CXX"
echo "CXX_STD: $CXX_STD"
echo "CFG: $CFG"
echo "LTO: $LTO"
echo "CACHE_DIR: $CACHE_DIR"
version=$(grep '#define VERSION' src/wesconfig.h | cut -d\" -f2)
echo "Found version: $version"
@ -38,8 +37,7 @@ else
docker build -t wesnoth-repo:"$IMAGE"-"$BRANCH" -f utils/dockerbuilds/CI/Dockerfile-CI-"$IMAGE"-"$BRANCH" .
docker run --cap-add=ALL --privileged \
--volume ~/build-cache:"$CACHE_DIR" \
--env BRANCH --env IMAGE --env NLS --env TOOL --env CC --env CXX \
--env CXX_STD --env CFG --env LTO --env CACHE_DIR \
--env CXX_STD --env CFG --env LTO \
wesnoth-repo:"$IMAGE"-"$BRANCH" ./.github/workflows/ci-scripts/docker.sh
fi

View file

@ -1,7 +1,7 @@
name: Map Diff
on:
pull_request:
pull_request_target:
paths:
- '**.map'
@ -30,14 +30,14 @@ jobs:
cd ./utils/wesnoth-map-diff
## Get maps changed
git fetch --depth=1 origin ${{ github.event.pull_request.base.sha }}
mapfile -t map_paths < <(git diff --name-only HEAD ${{ github.event.pull_request.base.sha }} | grep '\.map$')
git fetch --depth=1 origin ${{ github.event.pull_request.head.sha }}
mapfile -t map_paths < <(git diff --name-only HEAD ${{ github.event.pull_request.head.sha }} | grep '\.map$')
for map_path in "${map_paths[@]}"
do
## Get old map version
map_filename=${map_path##*/}
git show ${{ github.event.pull_request.base.sha }}:"$map_path" > "$map_filename"
git show ${{ github.event.pull_request.head.sha }}:"$map_path" > "$map_filename"
## Run map diff
diff_image=${map_filename%.map}.png
@ -54,10 +54,17 @@ jobs:
done
echo "::set-output name=COMMENT_BODY::$comment_body"
- name: Find comment
uses: peter-evans/find-comment@v2
id: fc
with:
issue-number: ${{ github.event.pull_request.number }}
comment-author: 'github-actions[bot]'
- name: Add comment
uses: peter-evans/create-or-update-comment@v1.4.5
with:
issue-number: ${{ github.event.pull_request.number }}
comment-id: ${{ steps.fc.outputs.comment-id }}
edit-mode: replace
body: |
${{ steps.get-maps-diff.outputs.COMMENT_BODY }}

View file

@ -478,19 +478,15 @@ if(ENABLE_GAME OR ENABLE_TESTS)
find_package(VorbisFile REQUIRED)
find_package(PkgConfig REQUIRED)
find_package(Fontconfig REQUIRED)
find_package(SDL2 2.0.8 REQUIRED)
if(NOT MSVC)
# for everything else, use pkgconfig
# find_package can't be used for SDL2 since at least as of Ubuntu 20.04 they forgot to include the sdl2-config-version.cmake, so cmake can't tell if it's >= 2.0.8 and thus rejects using it
# meanwhile SDL2_image and SDL2_mixer don't seem to have any cmake configuration available at all
# the best I could find is that the more modern cmake module support is only available if you build SDL2 yourself instead of using a distro-packaged version
# still wouldn't help for SDL2_image and SDL2_mixer though
pkg_check_modules(SDL2 REQUIRED sdl2>=2.0.8)
# SDL2_image and SDL2_mixer don't seem to have any cmake configuration available at all
pkg_check_modules(SDL2IMAGE REQUIRED SDL2_image>=2.0.2)
pkg_check_modules(SDL2MIXER REQUIRED SDL2_mixer>=2.0.0)
else()
# for MSVC, vcpkg builds and provides SDL2-related modules for cmake to use, so use those
# for MSVC, vcpkg builds and provides custom SDL2-related modules for cmake to use, so use those
# this also fixes the issue with our previous FindSDL2* scripts incorrectly using the Release version of these libs instead of the Debug version
find_package(SDL2 2.0.8 CONFIG REQUIRED)
find_package(sdl2-image CONFIG REQUIRED)
find_package(sdl2-mixer CONFIG REQUIRED)
endif()

View file

@ -38,7 +38,7 @@ PROJECT_NAME = "The Battle for Wesnoth"
# could be handy for archiving the generated documentation or if some version
# control system is used.
PROJECT_NUMBER = 1.17.3+dev
PROJECT_NUMBER = 1.17.4+dev
# Using the PROJECT_BRIEF tag one can provide an optional one line description
# for a project that appears at the top of each page and should give viewer a

View file

@ -1,32 +1,49 @@
## Version 1.17.3+dev
## Version 1.17.4+dev
### Add-ons client
### Add-ons server
### Campaigns
* Eastern Invasion
* S1: Fixed campfire not having a sound (issue #5766)
* S07a:
* Better handling for side 2 (issue #4145)
* Fixed Grug upkeep, added dialogue about ogres joining (issue #4145)
### Editor
### Multiplayer
### Lua API
### Packaging
### Terrain
### Translations
* Updated translations: Czech, French, Japanese
### Units
### User interface
### WML Engine
### Miscellaneous and Bug Fixes
* wmllint automatically removes the obsolete lines `{SOUND:SLOW}` and `{SOUND:POISON}`
## Version 1.17.4
### Campaigns
* Sceptre of Fire
* S9: Allow Grypon Riders to complete the scenario (issue #6332)
* Under the Burning Suns
* S5: Enforce encounter with the Cloaked Figure (issue #6364)
* S8: Spawned units will now be unable to be blocked into walls (PR #6677)
### Editor
* Added some missing terrain groupings (issue #6643)
### Multiplayer
### Lua API
### Packaging
### Terrain
* new terrain variations
* `Rrd` for desert road/cobbles - just a recolor, but has some different transitions than the normal roads
* `^Bsa*` for snowy stone bridge
### Translations
* Updated translations: British English, Chinese (Simplified), Czech, French
### Units
* Updated translations: British English, Chinese (Simplified), Czech, French, Italian
### User interface
* Added integer scaling options for the entire UI.
### WML Engine
### Miscellaneous and Bug Fixes
* The `--stringfreeze` (`-Z`) command line flag has been removed from wmllint.
* The checks for the old special notes system have been removed from wmllint; the `notecheck off`, `notecheck on` and `match <ability> with <note>` magic comments no longer have any effect.
* Resolved title screen flashing during the loading screen (issue #2395)
* Added the {PASSABLE_HEX} macro to core and deleted it from TRoW S19 (PR #6677)
* Converted most portrait images to webp (PR #6611).
* Hardware accelerated rendering has been enabled in SDL.
## Version 1.17.3
### Add-ons client

95
cmake/FindSDL2.cmake Normal file
View file

@ -0,0 +1,95 @@
#[=======================================================================[.rst:
FindSDL2
--------
Find the SDL2 includes and libraries.
IMPORTED Targets
^^^^^^^^^^^^^^^^
This module defines the `IMPORTED` targets ``SDL2::SDL2`` and ``SDL2::SDL2main``, if
SDL2 has been found.
Result Variables
^^^^^^^^^^^^^^^^
This module defines the following variables:
SDL2_FOUND - True if SDL2 found.
SDL2_INCLUDE_DIRS - Where to find SDL2/SDL.h.
SDL2_LIBRARIES - Libraries when using SDL2.
#]=======================================================================]
include(FindPackageHandleStandardArgs)
# first specifically look for the CMake config version of SDL2 (either system or package manager)
# provides two TARGETs SDL2::SDL2 and SDL2::SDL2Main
find_package(SDL2 QUIET NO_MODULE)
# after the CONFIG type `find_package` we get, if available, a SDL2_VERSION var
# if we found the SDL2 cmake package then we are almost done
# we still need to check the version for some edge cases where the -version.cmake file
# is missing
if(SDL2_FOUND)
find_package_handle_standard_args(SDL2 HANDLE_COMPONENTS CONFIG_MODE)
# in some cases the target is an ALIAS, we want the original
get_target_property(_SDL2_ORIGINAL_TARGET "SDL2::SDL2" ALIASED_TARGET)
# if it's a regular target, just set it to SDL2::SDL2
if(NOT _SDL2_ORIGINAL_TARGET)
set(_SDL2_ORIGINAL_TARGET "SDL2::SDL2")
endif()
get_target_property(_SDL2_INCLUDE_DIRS_FROM_CONFIG "${_SDL2_ORIGINAL_TARGET}" INTERFACE_INCLUDE_DIRECTORIES)
# in the original sdl2-config.cmake we get only <path>/include/SDL2 and in vcpkg we that + <path>/include/
if(_SDL2_INCLUDE_DIRS_FROM_CONFIG MATCHES ".*/include/SDL2.*")
get_filename_component(_SDL2_INCLUDE_DIRS "${_SDL2_INCLUDE_DIRS_FROM_CONFIG}" DIRECTORY)
list(APPEND _SDL2_INCLUDE_DIRS_FROM_CONFIG "${_SDL2_INCLUDE_DIRS}")
# we can endup with a duplicate with vcpkg
list(REMOVE_DUPLICATES _SDL2_INCLUDE_DIRS_FROM_CONFIG)
set_property(TARGET "${_SDL2_ORIGINAL_TARGET}" PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${_SDL2_INCLUDE_DIRS_FROM_CONFIG}")
endif()
get_target_property(_SDL2_INCLUDE_DIRS_FROM_CONFIG "${_SDL2_ORIGINAL_TARGET}" INTERFACE_INCLUDE_DIRECTORIES)
mark_as_advanced(SDL2_INCLUDE_DIRS SDL2_LIBRARIES)
return()
endif()
# let's try pkg-config
find_package(PkgConfig QUIET)
if(PKG_CONFIG_FOUND)
pkg_check_modules(PC_SDL2 REQUIRED sdl2>=${SDL2_FIND_VERSION})
endif()
find_package_handle_standard_args(SDL2 DEFAULT_MSG PC_SDL2_INCLUDE_DIRS PC_SDL2_LIBRARIES)
if(SDL2_FOUND)
if(NOT TARGET SDL2::SDL2)
# the .pc file for SDL2 contains `<prefix>/include/SDL2` which is different from the cmake version
# i.e. `<prefix>/include`
get_filename_component(SDL2_INCLUDE_DIRS ${PC_SDL2_INCLUDE_DIRS} DIRECTORY)
set(SDL2_INCLUDE_DIRS ${SDL2_INCLUDE_DIRS} CACHE STRING "SDL2 include directories")
set(SDL2_LIBRARIES ${PC_SDL2_LIBRARIES} CACHE STRING "SDL2 libraries")
mark_as_advanced(SDL2_INCLUDE_DIRS SDL2_LIBRARIES)
add_library(SDL2::SDL2 INTERFACE IMPORTED)
set_target_properties(SDL2::SDL2 PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${SDL2_INCLUDE_DIRS}"
INTERFACE_LINK_DIRECTORIES "${PC_SDL2_LIBDIR}"
INTERFACE_LINK_LIBRARIES "${SDL2_LIBRARIES}")
endif()
if(NOT TARGET SDL2::SDL2main)
# on *nix it seems that .pc files don't actually include libSDL2main, but for consistency's sake,
# let's add a phony library we can link with
add_library(SDL2::SDL2main INTERFACE IMPORTED)
endif()
endif()

View file

@ -115,7 +115,7 @@ if(VORBISFILE_FOUND AND (NOT TARGET VorbisFile::VorbisFile))
if(VORBISFILE_LIBRARY_DEBUG)
set_target_properties(VorbisFile::VorbisFile PROPERTIES IMPORTED_LOCATION_DEBUG "${VORBISFILE_LIBRARY_DEBUG}")
set_target_properties(VorbisFile::VorbisFile PROPERTIES IMPORTED_LOCATION_RELEASE "${VORBISFILE_LIBRARY}")
else()
set_target_properties(VorbisFile::VorbisFile PROPERTIES IMPORTED_LOCATION "${VORBISFILE_LIBRARY}")
endif()
# for the rest of build types
set_target_properties(VorbisFile::VorbisFile PROPERTIES IMPORTED_LOCATION "${VORBISFILE_LIBRARY}")
endif()

View file

@ -11,7 +11,7 @@ Gll^Fds, Gs^Fms, Gs^Fms, Gll^Fds, Gll^Fds, Gll^Fds, Gll^Fds, Gll^Fds, Gs, Gs, Gl
Gll^Fds, Gll^Fms, Gs^Fds, Gs^Fds, Gll^Fds, Gll^Em, Gg, Gs, Gs, Gll, Ww, Ww, Ww, Gg, Re^Gvs, Re^Gvs, Re^Gvs, Re^Gvs, Re^Gvs, Re^Gvs, Gg, Gll^Fms, Gll, Gg, Gg, Hh, Mm, Mm, Hh, Hh, Hh, Mm, Mm, Hh, Hh, Mm, Mm, Mm, Mm, Mm, Mm
Gll^Fds, Gll^Fds, Gll^Fds, Gll^Fds, Gll^Fds, Gll^Fds, Re^Gvs, Gs, Ww, Ww, Gg, Ww, Gg, Gg, Re^Gvs, Re^Gvs, Re^Gvs, Re^Gvs, Re^Gvs, Gg, Gg, Gll^Fds, Gs^Fms, Gg, Gg, Gg^Vh, Hh, Hh, Gd^Es, Gg, Gg, Hh, Gg, Hh, Gs, Hh, Hh, Mm, Mm, Mm, Mm
Gll^Fds, Gll^Fds, Gll^Fds, Gll^Fds, Re^Gvs, Re^Gvs, Gg, Gs^Fds, Ww, Hh, Re^Gvs, Gg, Re^Gvs, Re^Gvs, Re^Gvs, Re^Gvs, Re^Gvs, Re^Gvs, Re^Gvs, Re^Gvs, Re^Gvs, Gll, Gll^Fms, Gll^Fms, Gg, Hh, Hh, Gg, Gs, Gs, Cer, Gg^Vl, Gg, Gs, Hh, Gs, Gd, Hh, Hh, Mm, Mm
Gg, Gll^Em, Re^Gvs, Re^Gvs, Re^Vl, Re^Gvs, Gg, Ww, Re^Gvs, Re^Gvs, Re^Gvs, Gg^Vh, Re^Gvs, Re^Gvs, Re^Gvs, Re^Gvs, Re^Gvs, Re^Gvs, Rr, Gs, Gg, Gg, Gll, Gll, Gg, Hh, Hh, Gs, Gs, Cer, 3 Ker, Cer, Gg, Gs^Ecf, Hh, Gd, Hh, Hh, Gs, Hh, Hh
Gg, Gll^Em, Re^Gvs, Re^Gvs, Re^Vl, Re^Gvs, Gg, Ww, Re^Gvs, Re^Gvs, Re^Gvs, Gg^Vh, Re^Gvs, Re^Gvs, Re^Gvs, Re^Gvs, Re^Gvs, Re^Gvs, Rr, Gs, Gg, Gg, Gll, Gll, Gg, Hh, Hh, Gs^Ecf, Gs, Cer, 3 Ker, Cer, Gg, Gs, Hh, Gd, Hh, Hh, Gs, Hh, Hh
Rr, Rr, Rr, Rr, Rr, Re^Gvs, Rr, Ww, Gg, Re^Gvs, Re^Gvs, Re^Gvs, Gg, Re^Gvs, Re^Gvs, Re^Gvs, Gg, Rr, Gg, Rr, Gll, Gg, Gg^Vh, Rr, Rr, Hh, Gg, Gg, Gg, Cer, Cer, Cer, Gd, Gs, Re, Gs, Hh, Hh, Hh, Gd, Gs
Gll, Gg, Re^Gvs, Re^Gvs, Gll^Fds, Rr, Gll^Fds, Ww^Bw\, Rr, Re^Gvs, Ch, Ch, Ch, Gg, Rr, Rr, Gg^Vh, Gg, Re^Gvs, Gg, Gs^Fds, Gll^Fms, Gll, Gg, Gg, Gg, Hh, Rr, Re, Gg, Gs, Gg, Re, Gd, Gg^Vhh, Re, Gs^Es, Re, Re, Re, Re
Gll^Fds, Gll^Fds, Gll^Fds, Re^Gvs, Gll^Fds, Gll^Fds, Gs^Fds, Ww, Gg, Rr, Ch, 1 Kh, Ch, Gs, Rr, Gg, Re^Gvs, Re^Gvs, Gll^Fds, Gg, Gll^Fds, Gs^Fms, Gll^Fms, Gll^Fms, Gll^Fms, Gg, Hh, Hh, Hh, Hh, Gs, Re, Gg, Hh, Hh, Hh, Gs, Hh, Hh, Hh, Hh

View file

@ -33,6 +33,7 @@
side=2
canrecruit=yes
controller=ai
hidden=yes
recruit=Skeleton Rider,Vampire Bat,Skeleton,Skeleton Archer
[ai]
recruitment_pattern=fighter,fighter,scout,scout,archer
@ -124,6 +125,14 @@
carryover_percentage=70
[/gold_carryover]
[/objectives]
[store_unit]
[filter]
id=Garnad
[/filter]
kill=yes
variable=saved_Garnad
[/store_unit]
[/event]
[event]
@ -136,14 +145,6 @@
id=Owaec
[/recall]
[store_unit]
[filter]
id=Garnad
[/filter]
kill=yes
variable=saved_Garnad
[/store_unit]
[message]
speaker=Gweddry
message= _ "We have come to the Great River. Should we cross here, or try to find a ford?"
@ -189,6 +190,10 @@
x,y=36,29
[/unstore_unit]
{CLEAR_VARIABLE saved_Garnad}
[modify_side]
side=2
hidden=no
[/modify_side]
[terrain]
x,y=36,29
@ -368,7 +373,8 @@
[then]
[message]
speaker=Grug
message= _ "Grug say join you will he."
#po: "Grug say join you will he" means "I will join you" in a weird speech pattern. "Gork and Drog too" means that two other ogres will be joining Gweddry.
message= _ "Grug say join you will he. Gork and Drog too."
[/message]
[modify_unit]
@ -379,24 +385,22 @@
side=1
canrecruit=no
[modifications]
{TRAIT_LOYAL}
{TEAM_COLOR_OVERRIDE () purple}
[/modifications]
{TRAIT_LOYAL}
{TEAM_COLOR_OVERRIDE () purple}
[/modify_unit]
[unit]
name= _ "Gork"
side=1
type=Ogre
x,y=recall,recall
x,y=39,4
random_traits=yes
[/unit]
[unit]
name= _ "Drog"
side=1
type=Ogre
x,y=recall,recall
x,y=40,5
random_traits=yes
[/unit]

View file

@ -328,7 +328,7 @@
[message]
speaker=Dacyn
message= _ "We have no time to lose! Let's get moving quickly before the rest of their army catches up with us."
message= _ "We have no time to lose! Lets get moving quickly before the rest of their army catches up with us."
[/message]
[endlevel]

View file

@ -28,7 +28,7 @@
sounds=ambient/campfire.ogg
delay=0
chance=100
full_range=1
full_range=2
fade_range=6
[/sound_source]
[/do]

View file

@ -341,15 +341,6 @@
[event]
name=enemies defeated
[endlevel]
bonus=yes
{NEW_GOLD_CARRYOVER 40}
[/endlevel]
[/event]
[event]
name=victory
[message]
speaker=Tallin
message= _ "<i>Yes</i>! We did it! We are free!"
@ -392,6 +383,11 @@
[/move_unit_fake]
[redraw][/redraw]
[endlevel]
bonus=yes
{NEW_GOLD_CARRYOVER 40}
[/endlevel]
[/event]
# Death events

View file

@ -294,10 +294,6 @@
[/endlevel]
[/event]
[event]
name=victory
[/event]
{HERODEATH_AIGLONDUR}
{HERODEATH_ANGARTHING}
{HERODEATH_MOVRUR}

View file

@ -297,6 +297,7 @@
# initialize starting variable
# create elf units
# create AI=guardian starting units
# initiate assassin trigger variable
#fires lighting central cavern
{ANIMATED_CAMPFIRE 31 32}
@ -457,6 +458,8 @@
[/unit]
[/then]
[/if]
{VARIABLE assassin_triggered no}
[/event]
# starting events
@ -2057,6 +2060,7 @@
[event]
name=call_assassin
first_time_only=yes
[store_locations]
[filter]
id=Kaleh
@ -2065,6 +2069,8 @@
variable=dark_assassin_location
[/store_locations]
{VARIABLE assassin_triggered yes}
[unit]
type=Dark Assassin Cloaked
id=Cloaked Figure
@ -2343,6 +2349,20 @@
animate=no
[/kill]
[if]
[variable]
name=assassin_triggered
equals=yes
[/variable]
[else]
[fire_event]
name=call_assassin
[/fire_event]
[/else]
[/if]
{CLEAR_VARIABLE assassin_triggered}
[switch]
variable=ally_race

View file

@ -2422,7 +2422,7 @@
[/message]
[/event]
# Event 13: Encounter Cloaked Figure for (potentially) a third time
# Event 13: Encounter Cloaked Figure for a third time
[event]
name=moveto
@ -2462,7 +2462,7 @@
[message]
speaker=Kaleh
message= _ "In Elohs name, not you again. Must I fight you another time?"
message= _ "In Elohs name, not you again. Must I fight you a third time?"
[/message]
[message]

View file

@ -42,7 +42,10 @@
[/units]
[lua]
code="wesnoth.require 'campaigns/tutorial/lua/character_selection.lua'"
code=<<
wesnoth.require 'campaigns/tutorial/lua/character_selection'
wesnoth.require 'campaigns/tutorial/lua/hint_message'
>>
[/lua]
{campaigns/tutorial/utils}

View file

@ -0,0 +1,30 @@
local hint_message = {valid = false}
local hint_text = ""
function wesnoth.wml_actions.hint_message(cfg)
if hint_message.valid then
hint_message:remove()
end
if cfg.message and not cfg.remove then
hint_text = cfg.message
if cfg.caption and cfg.caption ~= "" then
hint_text = "<b><big>" .. cfg.caption .. "</big></b>\n" .. hint_text
end
hint_message = wesnoth.interface.add_overlay_text(hint_text, {
size = 18,
location = {5,5},
color = {255, 255, 255},
duration = "unlimited",
max_width = "40%",
valign = "top",
halign = "left"
})
end
end
wesnoth.persistent_tags.hint_message.read = wesnoth.wml_actions.hint_message
function wesnoth.persistent_tags.hint_message.write(add)
add{message = hint_text}
end

View file

@ -355,21 +355,15 @@
{CLEAR_PRINT}
{GENDER (
[message]
speaker=narrator
[hint_message]
caption= _ "Movement"
image=wesnoth-icon.png
message= _ "When you hover over or select a unit, in this case Konrad, the places he can move to are highlighted. All units have a certain number of <i>movement points</i>, which dictate how many hexes that unit can move per turn. Normally, moving one hex on flat terrain uses one movement point. To move, simply click on Konrad and then your destination. (You can press <b>u</b> to undo a move if you move to the wrong place.)" +
{CONTINUE_MSG}
[/message]
message= _ "When you hover over or select a unit, in this case Konrad, the places he can move to are highlighted. All units have a certain number of <i>movement points</i>, which dictate how many hexes that unit can move per turn. Normally, moving one hex on flat terrain uses one movement point. To move, simply click on Konrad and then your destination. (You can press <b>u</b> to undo a move if you move to the wrong place.)"
[/hint_message]
) (
[message]
speaker=narrator
[hint_message]
caption= _ "Movement"
image=wesnoth-icon.png
message= _ "When you hover over or select a unit, in this case Lisar, the places she can move to are highlighted. All units have a certain number of <i>movement points</i>, which dictate how many hexes that unit can move per turn. Normally, moving one hex on flat terrain uses one movement point. To move, simply click on Lisar and then your destination. (You can press <b>u</b> to undo a move if you move to the wrong place.)" +
{CONTINUE_MSG}
[/message]
message= _ "When you hover over or select a unit, in this case Lisar, the places she can move to are highlighted. All units have a certain number of <i>movement points</i>, which dictate how many hexes that unit can move per turn. Normally, moving one hex on flat terrain uses one movement point. To move, simply click on Lisar and then your destination. (You can press <b>u</b> to undo a move if you move to the wrong place.)"
[/hint_message]
)}
# [message]speaker=narrator deselects the unit, so reselect it now
@ -508,19 +502,15 @@
)}
{GENDER (
[message]
speaker=narrator
[hint_message]
caption= _"Attacking"
image=wesnoth-icon.png
message= _ "To attack the quintain, first select the attacker (Konrad), then the target (the quintain). You will see an attack description. Click <b>Attack</b> when youre ready."
[/message]
[/hint_message]
) (
[message]
speaker=narrator
[hint_message]
caption= _"Attacking"
image=wesnoth-icon.png
message= _"To attack the quintain, first select the attacker (Lisar), then the target (the quintain). You will see an attack description. Click <b>Attack</b> when youre ready."
[/message]
[/hint_message]
)}
[disallow_end_turn]
@ -558,19 +548,15 @@
[/message]
{GENDER (
[message]
speaker=narrator
[hint_message]
caption= _ "Crowns"
image=wesnoth-icon.png
message= _ "The tiny golden crown above your leader (Konrad) indicates he is a side leader. In most scenarios, you will lose if your leader is killed. Be sure to keep him safe!"
[/message]
[/hint_message]
) (
[message]
speaker=narrator
[hint_message]
caption= _ "Crowns"
image=wesnoth-icon.png
message= _ "The tiny golden crown above your leader (Lisar) indicates she is a side leader. In most scenarios, you will lose if your leader is killed. Be sure to keep her safe!"
[/message]
[/hint_message]
)}
# Check where Delfador is, to set the remaining moves accordingly
@ -611,12 +597,10 @@
[allow_end_turn][/allow_end_turn]
[message]
speaker=narrator
[hint_message]
caption= _ "Turns"
image=wesnoth-icon.png
message= _ "Every turn, each side in a scenario gets a chance to make their move. Once youve completed everything you wish to do this turn, click on the <b>End Turn</b> button in the bottom right of the screen. The other sides, whether controlled by the AI or other human players, will then make their move. Some scenarios must be completed in a certain number of turns. You can see what turn it is, and any applicable turn limit, next to the flag icon at the top of the screen."
[/message]
[/hint_message]
{PRINT (_"End your turn")}
[/event]
@ -689,12 +673,10 @@
{CLEAR_PRINT}
[message]
speaker=narrator
[hint_message]
caption= _ "Villages"
image=wesnoth-icon.png
message= _"You have captured a village! It now flies your colors and has been added to your total village count (the house icon at the top of the screen shows how many villages you currently control). Villages provide the gold needed to recruit units. Each turn, you gain 2 gold, plus 1 for every village you own."
[/message]
[/hint_message]
[allow_end_turn][/allow_end_turn]
@ -770,12 +752,10 @@
side=1
[/set_recruit]
[message]
speaker=narrator
[hint_message]
caption= _ "Recruiting"
image=wesnoth-icon.png
message= _ "Whenever youre on a <i>keep</i>, you can <i>recruit</i> units on the castle tiles around it by right-clicking and selecting <b>Recruit</b>. Note that newly recruited units cannot act the turn you recruit them; you will be able to use them next turn. For this scenario, you have only one type of unit to choose from: the Elvish Fighter."
[/message]
[/hint_message]
{PRINT (_"Recruit two Elvish Fighters")}
[/event]
@ -794,12 +774,10 @@
{CLEAR_PRINT}
[message]
speaker=narrator
[hint_message]
caption= _ "Traits"
image=wesnoth-icon.png
message= _"Be sure to examine the <i>traits</i> of your new recruits. They are listed under its race in the sidebar. Traits can subtly affect how you use your troops. For example, units with the <i>quick</i> trait can move an extra hex each turn, and units with the <i>intelligent</i> trait require 20% less experience to level up."
[/message]
[/hint_message]
# Allow our hero to move freely until next turn without undo messages now that the recruiting is done
{VARIABLE enable_undo_messages no}
@ -1009,36 +987,30 @@
[/show_if]
[/message]
[message]
speaker=narrator
[hint_message]
caption= _ "Unit Descriptions"
image=wesnoth-icon.png
message= _ "You can right-click on a unit to see a detailed <b>Unit Description</b>."
[/message]
[/hint_message]
[/event]
# TURN 7: protect your troops
[event]
name=turn 7
[message]
speaker=narrator
[hint_message]
caption= _ "Protect Your Troops"
image=wesnoth-icon.png
message= _ "Remember to pull back wounded units into villages and recruit more if needed. Take special care of units with the highest <i>experience points (XP)</i> so they can gain levels and become more powerful."
[/message]
[/hint_message]
[/event]
# TURN 8: support
[event]
name=turn 8
[message]
speaker=narrator
[hint_message]
caption= _ "Support"
image=wesnoth-icon.png
message= _"Each village you control will <i>support</i> one unit for free. After that, each unit costs you one gold per turn."
[/message]
[/hint_message]
[/event]
# TURN 9: advancement
@ -1055,25 +1027,21 @@
[/show_if]
[/message]
[message]
speaker=narrator
[hint_message]
caption= _ "Advancement"
image=wesnoth-icon.png
message= _ "When a unit gains enough experience points (the <i>experience bar</i>, if present, is on the <b>right</b> of the <i>hitpoints bar</i>), it will gain a level. Elvish Fighters have two advancement options, and you will be able to choose which one you want. However, second level units cost twice as much to support as first level units."
[/message]
[/hint_message]
[/event]
# TURN 10: defenses
[event]
name=turn 10
[message]
speaker=narrator
[hint_message]
caption= _ "Defenses"
image=wesnoth-icon.png
# wmllint: local spelling quintains
message= _ "Whenever one of your units is selected, youll see varying percentages as you move the mouse over the map. The higher the percentage, the more <i>defense</i> that unit has in that kind of terrain. For example, most units have good defenses in castles and villages but poor defenses in rivers. Some units, like these quintains, have a <i>magical</i> attack, which always has a 70% chance of hitting no matter what terrain their targets occupy."
[/message]
[/hint_message]
[/event]
[event]
@ -1239,12 +1207,10 @@
[event]
name=victory
[message]
speaker=narrator
[hint_message]
caption= _ "Victory"
image=wesnoth-icon.png
message= _ "After your victory notice, the map will be grayed out to indicate that the scenario is over; this is called <i>linger mode</i>. You will still be able to examine the final positions and state of your troops and any surviving enemies. When youre finished, click the <b>End Scenario</b> button to go on to the next scenario in the campaign."
[/message]
[/hint_message]
[/event]
[event]

View file

@ -287,12 +287,10 @@
[/else]
[/if]
[message]
speaker=narrator
[hint_message]
caption= _ "Recalling"
image=wesnoth-icon.png
message= _ "In addition to recruiting new units each scenario, you can also <i>recall</i> your experienced veterans from previous scenarios, for the cost of 20 gold each. This allows you to build up a formidable army over the course of multiple scenarios by recalling your highest leveled troops or those with good combinations of traits and abilities. To recall a unit, right-click while your leader stands on a keep and select the <i>Recall</i> option. Remember to also recruit new troops in addition to recalling old ones."
[/message]
[/hint_message]
[message]
speaker=Galdrad
@ -490,19 +488,10 @@ If either Shaman advances to become a Druid, then shell be able to heal adjac
message= _ "Excellent! As Delfador mentioned earlier, each captured village will support one unit and provide you with 1 extra gold per turn."
[/message]
[message]
speaker=narrator
[hint_message]
caption= _ "Income and Upkeep"
image=wesnoth-icon.png
message= _ "Each turn, you will gain 2 gold plus one for each village you own. However, <i>upkeep</i> is subtracted from that. You can support as many levels worth of units as the number of villages you own; beyond that, you must pay 1 gold per turn. Be careful, as owning too many units can cause you to have negative income and lose gold each turn!"
[/message]
[message]
speaker=narrator
caption= _ "Status Table"
image=wesnoth-icon.png
message= _ "The Status Table details the sides current status and starting conditions. Fog and shroud will affect what you can see in this table, and occasionally a side may be hidden; however, it is still useful to check this table when a scenario begins. You can access it in the <b>Menu</b> menu."
[/message]
[/hint_message]
[allow_end_turn][/allow_end_turn]
@ -617,12 +606,10 @@ If either Shaman advances to become a Druid, then shell be able to heal adjac
{TALK_ABOUT Dumbo ( _ "That Orcish Grunt is still blocking our path. He has no ranged attacks, so your archers should be able to engage him with little risk. Unfortunately, your units cannot reach him this turn, but you should not let them languish! Move them into position so they can attack next turn. There are also other villages on this side of the river. You should secure them for income and healing.")}
[message]
speaker=narrator
[hint_message]
caption= _ "Long-distance Movement"
image=wesnoth-icon.png
message= _ "You can order a unit to move for multiple turns by selecting the unit and clicking on the destination. A number will indicate how many turns it will take to get there."
[/message]
[/hint_message]
[message]
speaker=student
@ -721,12 +708,10 @@ Please report the bug."
[event]
name=turn 3
[message]
speaker=narrator
[hint_message]
caption= _ "Tracking Enemy Movement"
image=wesnoth-icon.png
message= _ "You can see where an enemy can reach by moving the mouse over them. You can see all possible enemy moves at once with the <b>Show Enemy Moves</b> command from the <b>Actions</b> menu."
[/message]
[/hint_message]
{TALK_ABOUT_LOC 15,11 ( _ "We must occupy that island before the Wolf Riders reach it!")}
@ -926,6 +911,13 @@ Please report the bug."
{UNDO_REMINDER}
[/event]
[event]
name=turn 4
[hint_message]
message= _ "When moving a unit, the percentages shown are the units defense on that hex. The higher the number, the less likely they are to get hit."
[/hint_message]
[/event]
[event]
name=turn 4
[filter_condition]
@ -945,17 +937,19 @@ Please report the bug."
{TALK_ABOUT_LOC 16,9 ( _ "Careful! It is now nighttime. Orcs are <i>chaotic</i>, which means their attacks are now 25% stronger. By day, their attacks are 25% weaker, which is a noticeable difference. You are <i>lawful</i>: stronger by day and weaker at night. Your elvish warriors are <i>neutral</i>: unaffected by the time of day.")}
[message]
speaker=narrator
[hint_message]
caption= _ "Time of Day"
image=wesnoth-icon.png
message= _ "During a scenario, the time of day will shift as turns pass. There are four <i>alignments</i> a unit may be: Lawful, Neutral, Chaotic, or Liminal. Each alignment gets a different bonus or handicap depending on the time of day. You can hover over the sky image below the minimap on the right to see the current time of day and who has the advantage."
[/message]
[/hint_message]
[/event]
[event]
name=turn 6
[hint_message]
remove=yes
[/hint_message]
[fire_event]
name=check_income
[/fire_event]
@ -991,37 +985,49 @@ Rest-healing is an exception to the rule — if a unit doesnt do anything for
[/fire_event]
[/event]
[event]
name=turn 8
[hint_message]
caption= _ "Long-distance Movement"
message= _ "You can order a unit to move for multiple turns by selecting the unit and clicking on the destination. A number will indicate how many turns it will take to get there."
[/hint_message]
[/event]
[event]
name=turn 9
[message]
speaker=narrator
[hint_message]
caption= _ "Tracking Unused Units"
image=wesnoth-icon.png
message= _ "You can ensure you use all your troops by pressing <b>n</b> to step from one unit to the next. If you press <b>space</b>, you can mark the currently selected unit as having finished its turn, which stops you moving it by accident later on. When <b>n</b> no longer selects a new unit, its safe to end your turn."
[/message]
[/hint_message]
[/event]
[event]
name=turn 10
[message]
speaker=narrator
caption= _ "Victory Conditions"
image=wesnoth-icon.png
message= _ "In this scenario, you only need to defeat the orc leader to win. Victory conditions for a scenario are given under <b>Objectives</b> in the <b>Menu</b> menu."
[/message]
[hint_message]
caption= _ "Status Table"
message= _ "The Status Table details the sides current status and starting conditions. Fog and shroud will affect what you can see in this table, and occasionally a side may be hidden; however, it is still useful to check this table when a scenario begins. You can access it in the <b>Menu</b> menu."
[/hint_message]
[/event]
[event]
name=turn 11
[hint_message]
caption= _ "Speeding Up Animations"
message= _ "Holding down <b>shift</b> will make the animations for moving and fighting quicker. The <b>acceleration factor</b> can be set, and turned on by default, in the <b>Preferences</b> menus <b>General</b> tab."
[/hint_message]
[/event]
[event]
name=turn 12
[message]
speaker=narrator
caption= _ "Speeding Up Animations"
image=wesnoth-icon.png
message= _ "Holding down <b>shift</b> will make the animations for moving and fighting quicker. The <b>acceleration factor</b> can be set, and turned on by default, in the <b>Preferences</b> menus <b>General</b> tab."
[/message]
[hint_message]
caption= _ "Victory Conditions"
message= _ "In this scenario, you only need to defeat the orc leader to win. Victory conditions for a scenario are given under <b>Objectives</b> in the <b>Menu</b> menu."
[/hint_message]
[/event]
[event]
@ -1066,12 +1072,10 @@ Rest-healing is an exception to the rule — if a unit doesnt do anything for
message= _ "Good idea!"
[/message]
[message]
speaker=narrator
[hint_message]
caption= _ "Recruit the Right Units"
image=wesnoth-icon.png
message= _ "Remember to recruit troops useful for the situation. Archers are particularly effective against Grunts, Wolf Riders and the orcish leader."
[/message]
[/hint_message]
[/then]
[/if]

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 277 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 287 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

View file

@ -180,12 +180,16 @@ C*,K*,X*,Q*,W*,Ai,M*,*^V*,*^B*,_off^_usr#enddef
{NEW:FOREST (W*^Tf*) (Wo*) forest/mushrooms-water}
{NEW:FOREST (*^Uf*,*^Tf*) {SMALL_FOREST_FILTER} forest/mushrooms}
{NEW:FOREST (W*^Wkf) (Wwr*,!,W*) water/seaweed/kelp ANIM="-[1~4,3,2]" TIME=":[700*6]"}
{NEW:FOREST (*^Wkf) {SMALL_FOREST_FILTER} water/seaweed/kelp-dead}
#undef SMALL_FOREST_FILTER
# Great-tree
{NEW:OVERLAY *^Fet forest/great-tree}
{NEW:OVERLAY *^Feta forest/great-tree-snowy}
{NEW:OVERLAY *^Fetd forest/great-tree-dead}
{NEW:OVERLAY W*^Feth forest/great-oak-tree-dead-water}
{NEW:OVERLAY *^Feth forest/great-oak-tree-dead}
# Oasis
@ -401,6 +405,9 @@ C*,K*,X*,Q*,W*,Ai,M*,*^V*,*^B*,_off^_usr#enddef
{NEW:WALL_FLAMES_OVERLAY (Xo*^Efs) walls/stone/flames/sconce}
{NEW:TORCH_FLAMES_OVERLAY (!,X*^Efs,!,*^Efs) walls/stone/flames/torch}
# seashells
{NEW:OVERLAY *^Ewsh embellishments/seashells LAYER=-86}
#Farmland
{NEW:OVERLAY *^Gvs embellishments/farm-veg-spring LAYER=-81}
@ -426,6 +433,7 @@ C*,K*,X*,Q*,W*,Ai,M*,*^V*,*^B*,_off^_usr#enddef
{NEW:OVERLAY (!,Xof^Efm,!,*^Efm) embellishments/flowers-mixed LAYER=-500}
#Rubble
{NEW:OVERLAY W*^Dr misc/rubble-water FLAG=rubble LAYER=-1}
{NEW:OVERLAY *^Dr misc/rubble FLAG=rubble LAYER=-1}
{NEW:OVERLAY *^Es embellishments/stones-small}
@ -936,7 +944,7 @@ C*,K*,X*,Q*,W*,Ai,M*,*^V*,*^B*,_off^_usr#enddef
# Default layer is -500, so anything layering above should be higher.
{NEW:TRANSITION_INTRA (*^Dr) -158 misc/rubble FLAG=intra}
{NEW:TRANSITION_INTRA (!,W*^Dr,!,*^Dr) -158 misc/rubble FLAG=intra}
{NEW:TRANSITION_INTRA (*^Esd) -158 embellishments/rocks FLAG=intra}
{NEW:TRANSITION (Md,Mv) (!,Md,Hhd,Mv,W*,S*) -166 mountains/dry}

View file

@ -2061,6 +2061,15 @@ corner#endarg
# causes problems; this is why the rules for setting the flag for a small
# forest and placing the actual image are separate.
#arg LAYER
0#endarg
#arg ANIM
#endarg
#arg TIME
#endarg
[terrain_graphics]
map="
, 2
@ -2096,9 +2105,9 @@ corner#endarg
[/tile]
[image]
name={IMAGESTEM}-small@V.png
name={IMAGESTEM}-small@V{ANIM}.png{TIME}
variations=";2;3;4;5;6;7;8;9;10;11"
layer=0
layer={LAYER}
base=90,161
center=90,144
[/image]
@ -2118,9 +2127,9 @@ corner#endarg
[/tile]
[image]
name={IMAGESTEM}@V.png
name={IMAGESTEM}@V{ANIM}.png{TIME}
variations=";2;3;4;5;6;7;8;9;10;11"
layer=0
layer={LAYER}
base=90,161
center=90,144
[/image]

View file

@ -128,6 +128,19 @@
editor_group=water
[/terrain_type]
[terrain_type]
symbol_image=water/seaweed/kelp-tile
id=sea_kelp
name= _ "Swamp"
editor_name= _ "Kelp Forest"
string=^Wkf
aliasof=_bas, St
submerge=0.45
default_base=Ww
mvt_alias=-,_bas,St
editor_group=water
[/terrain_type]
# ## Swamp ##
[terrain_type]
@ -554,6 +567,16 @@ Most units receive 20 to 40% defense in sand."
editor_group=water,embellishments
[/terrain_type]
[terrain_type]
symbol_image=embellishments/seashells-tile
id=seashells
editor_name= _ "Seashells"
string=^Ewsh
default_base=Ds
aliasof=_bas
editor_group=water,embellishments
[/terrain_type]
## Trash and battlefield litter ##
[terrain_type]
symbol_image=misc/detritus/trashC-1

View file

@ -0,0 +1,146 @@
#textdomain wesnoth-units
#define CARIBE_IMAGE_PATH
units/monsters/caribe#enddef
[unit_type]
id=Caribe
name= _ "Caribe"
race=monster
image="{CARIBE_IMAGE_PATH}/caribe-shadow.png~BLIT("{CARIBE_IMAGE_PATH}/caribe-default.png")"
profile="portraits/monsters/caribe.webp"
hitpoints=38
# needs some adjustment
movement_type=deepsea
[resistance]
arcane=100
pierce=90
impact=80
[/resistance]
movement=8
experience=40
level=1
alignment=neutral
advances_to=null
{AMLA_DEFAULT}
cost=16
undead_variation=serpent
usage=fighter
description= _ "The giant caribe are seldom encountered in the inland rivers near Weldyn, but tales of their ferocious attacks have spread far and wide. Their angry red eyes are embedded in an armored face. While it is their teeth that are a dangerous weapon, they do posses small, bony arms and claws, which they can use to extricate themselves from situations dire to most other fish. The giant caribe can climb over land and untie fishing nets, some have said they even commune with the saurian augers. Whatever the truth, these fish are unusually clever and should not be understimated."
die_sound=water-blast.wav
[abilities]
{ABILITY_SKIRMISHER}
[/abilities]
[defend]
start_time=-126
terrain_type=W*,W*^Wkf
offset=0:110,0~-0.2:42,-0.2~0:100
[frame]
image={CARIBE_IMAGE_PATH}/caribe-defend-[1,2,1].png~MASK({CARIBE_IMAGE_PATH}/caribe-mask.png):[1,250,1]
[/frame]
[if]
hit_sound_start_time=-25
hits=hit
[hit_sound_frame]
sound=hiss-hit.wav
[/hit_sound_frame]
[/if]
[/defend]
[defend]
start_time=-126
terrain_type=!,W*,W*^Wkf
offset=0:110,0~-0.1:42,-0.1~0:100
[frame]
image={CARIBE_IMAGE_PATH}/caribe-land.png
[/frame]
[if]
hit_sound_start_time=-25
hits=hit
[hit_sound_frame]
sound=hiss-hit.wav
[/hit_sound_frame]
[/if]
[/defend]
[movement_anim]
start_time=0
fish_start_time=0
fish_y=1:250,1~3:600,3:150,3~1:600
fish_offset="0~1:200,0~1:200,0~1:200,0~1:200,0~1:200,0~1:200,0~1:200,0~1:200,0~1:200,0~1:200"
terrain_type=W*,W*^Wkf
alpha=0.3
[fish_frame]
image={CARIBE_IMAGE_PATH}/caribe-[hi,default,lo,default].png~MASK({CARIBE_IMAGE_PATH}/caribe-mask.png):[400*4]
auto_vflip=no
# submerge=0.45
[/fish_frame]
[frame]
image={CARIBE_IMAGE_PATH}/caribe-shadow.png:1600
layer=2
[/frame]
[/movement_anim]
[movement_anim]
start_time=0
terrain_type=!,W*,W*^Wkf
[frame]
image={CARIBE_IMAGE_PATH}/caribe-land.png
[/frame]
[/movement_anim]
[standing_anim]
start_time=0
fish_start_time=0
fish_y=1:250,1~3:600,3:150,3~1:600
terrain_type=W*,W*^Wkf
alpha=0.3
[fish_frame]
image={CARIBE_IMAGE_PATH}/caribe-[hi,default,lo,default].png~MASK({CARIBE_IMAGE_PATH}/caribe-mask.png):[400*4]
auto_vflip=no
# submerge=0.45
[/fish_frame]
[frame]
image={CARIBE_IMAGE_PATH}/caribe-shadow.png:1600
layer=2
[/frame]
[/standing_anim]
[standing_anim]
start_time=0
terrain_type=!,W*,W*^Wkf
[frame]
image={CARIBE_IMAGE_PATH}/caribe-land.png
[/frame]
[/standing_anim]
[attack]
name=fangs
description=_"fangs"
icon=attacks/fangs-angler.png
type=pierce
range=melee
damage=6
number=4
[/attack]
[attack_anim]
[filter_attack]
name=fangs
[/filter_attack]
terrain_type=W*,W*^Wkf
start_time=-250
offset=0~-0.1:75,-0.1~0.65:175,0.65~0:250
[frame]
image={CARIBE_IMAGE_PATH}/caribe-[default,attack-1,attack-2,default].png~MASK({CARIBE_IMAGE_PATH}/caribe-mask.png):[50,125,150,175]
[/frame]
{SOUND:HIT_AND_MISS bite.ogg {SOUND_LIST:MISS} -100}
[/attack_anim]
[attack_anim]
[filter_attack]
name=fangs
[/filter_attack]
terrain_type=!,W*,W*^Wkf
start_time=-250
offset=0~-0.1:75,-0.1~0.65:175,0.65~0:250
[frame]
image={CARIBE_IMAGE_PATH}/caribe-[land,attack-1,attack-2,land].png:[50,125,150,175]
[/frame]
{SOUND:HIT_AND_MISS bite.ogg {SOUND_LIST:MISS} -100}
[/attack_anim]
[/unit_type]
#undef CARIBE_IMAGE_PATH

View file

@ -0,0 +1,160 @@
#textdomain wesnoth-units
#define CARIBE_IMAGE_PATH
units/monsters/caribe#enddef
[unit_type]
id=Nibbler
name= _ "Nibbler"
race=monster
image="{CARIBE_IMAGE_PATH}/nibbler.png"
profile="portraits/monsters/nibbler.webp"
hitpoints=28
# needs some adjustment
movement_type=deepsea
[resistance]
arcane=100
[/resistance]
[movement_costs]
deep_water=1
shallow_water=1
reef=2
swamp_water=2
flat=99
sand=99
forest=99
hills=99
village=2
castle=3
cave=99
frozen=99
fungus=99
[/movement_costs]
movement=6
experience=32
level=0
alignment=neutral
advances_to=Caribe
cost=10
undead_variation=serpent
usage=fighter
description= _ "Nibblers are juvenile predator fish, often more curious than dangerous. A single individual may not be a threat, but these fish seldom travel alone."
die_sound=water-blast.wav
[abilities]
{ABILITY_SKIRMISHER}
[/abilities]
[defend]
start_time=-126
terrain_type=W*,W*^Wkf
offset=0:110,0~-0.2:42,-0.2~0:100
[frame]
image={CARIBE_IMAGE_PATH}/nibbler-defend-[1,2,1].png~MASK({CARIBE_IMAGE_PATH}/caribe-mask.png):[1,250,1]
[/frame]
[if]
hit_sound_start_time=-25
hits=hit
[hit_sound_frame]
sound=hiss-hit.wav
[/hit_sound_frame]
[/if]
[/defend]
[defend]
start_time=-126
terrain_type=!,W*,W*^Wkf
offset=0:110,0~-0.1:42,-0.1~0:100
[frame]
image={CARIBE_IMAGE_PATH}/nibbler-land.png
[/frame]
[if]
hit_sound_start_time=-25
hits=hit
[hit_sound_frame]
sound=hiss-hit.wav
[/hit_sound_frame]
[/if]
[/defend]
[movement_anim]
start_time=0
fish_start_time=0
fish_y=1:250,1~3:600,3:150,3~1:600
fish_offset="0~1:200,0~1:200,0~1:200,0~1:200,0~1:200,0~1:200,0~1:200,0~1:200,0~1:200,0~1:200"
terrain_type=W*,W*^Wkf
alpha=0.3
[fish_frame]
image={CARIBE_IMAGE_PATH}/nibbler-[hi,default,lo,default].png~MASK({CARIBE_IMAGE_PATH}/caribe-mask.png):[400*4]
auto_vflip=no
# submerge=0.45
[/fish_frame]
[frame]
image={CARIBE_IMAGE_PATH}/nibbler-shadow.png:1600
layer=2
[/frame]
[/movement_anim]
[movement_anim]
start_time=0
terrain_type=!,W*,W*^Wkf
[frame]
image={CARIBE_IMAGE_PATH}/nibbler-land.png
[/frame]
[/movement_anim]
[standing_anim]
start_time=0
fish_start_time=0
fish_y=1:250,1~3:600,3:150,3~1:600
terrain_type=W*,W*^Wkf
alpha=0.3
[fish_frame]
image={CARIBE_IMAGE_PATH}/nibbler-[hi,default,lo,default].png~MASK({CARIBE_IMAGE_PATH}/caribe-mask.png):[400*4]
auto_vflip=no
# submerge=0.45
[/fish_frame]
[frame]
image={CARIBE_IMAGE_PATH}/nibbler-shadow.png:1600
layer=2
[/frame]
[/standing_anim]
[standing_anim]
start_time=0
terrain_type=!,W*,W*^Wkf
[frame]
image={CARIBE_IMAGE_PATH}/nibbler-land.png
[/frame]
[/standing_anim]
[attack]
name=fangs
description=_"fangs"
icon=attacks/fangs-angler.png
type=pierce
range=melee
damage=5
number=3
[/attack]
[attack_anim]
[filter_attack]
name=fangs
[/filter_attack]
terrain_type=W*,W*^Wkf
# place holder anim
start_time=-225
offset=0~-0.1:75,-0.1~0.65:150,0.65~0:225
[frame]
image={CARIBE_IMAGE_PATH}/nibbler-[default,attack-1,default].png~MASK({CARIBE_IMAGE_PATH}/caribe-mask.png):[50,200,200]
[/frame]
{SOUND:HIT_AND_MISS bite.ogg {SOUND_LIST:MISS} -100}
[/attack_anim]
[attack_anim]
[filter_attack]
name=fangs
[/filter_attack]
terrain_type=!,W*,W*^Wkf
# place holder anim
start_time=-225
offset=0~-0.1:75,-0.1~0.65:150,0.65~0:225
[frame]
image={CARIBE_IMAGE_PATH}/nibbler-[land,attack-1,land].png:[50,200,200]
[/frame]
{SOUND:HIT_AND_MISS bite.ogg {SOUND_LIST:MISS} -100}
[/attack_anim]
[/unit_type]
#undef CARIBE_IMAGE_PATH

View file

@ -165,11 +165,11 @@
# Temporary unit to not break anything someone might have in 1.15.x, but should be removed eventually.
[unit_type]
id=Giant Stoat
name= _ "Giant Stoat"
description= _ "Giant Stoats are obsolete, use Frost Stoat."
id=Giant Stoat # wmllint: noconvert
name= _ "Giant Stoat" # wmllint: noconvert
description= _ "Giant Stoats are obsolete, use Frost Stoat." # wmllint: noconvert
[base_unit]
id=Frost Stoat
[/base_unit]
{DEPRECATED_UNIT "Giant Stoat" "Frost Stoat" 1.17}
{DEPRECATED_UNIT "Giant Stoat" "Frost Stoat" 1.17} # wmllint: noconvert
[/unit_type]

View file

@ -46,9 +46,52 @@
[window_definition]
id = tooltip
id = tooltip_transparent
description = "The window to show a large tooltip."
[resolution]
left_border = 15
right_border = 15
top_border = 15
bottom_border = 15
[background]
[draw]
[rectangle]
x = 0
y = 0
w = "(width)"
h = "(height)"
fill_color = "0, 0, 0, 192"
border_thickness = 1
border_color = "0, 0, 0, 255"
[/rectangle]
[/draw]
[/background]
[foreground]
[draw]
[/draw]
[/foreground]
[/resolution]
[/window_definition]
[window_definition]
id = tooltip
description = "The window to show a floating tooltip."
[resolution]
left_border = 15

View file

@ -141,7 +141,7 @@ def reevaluate_best_size(w, s)
[window]
id = "tooltip"
description = "The tooltip popup window with large tooltips, eg in the main menu."
description = "The tooltip popup window with floating tooltips."
[resolution]
definition = "tooltip"
@ -190,6 +190,57 @@ def reevaluate_best_size(w, s)
[/window]
[window]
id = "tooltip_transparent"
description = "The tooltip popup window with floating tooltips, and transparent background."
[resolution]
definition = "tooltip_transparent"
automatic_placement = false
functions = "{__GUI_WINDOW_FUNCTIONS}"
x = "{__GUI_WINDOW_X}"
y = "{__GUI_WINDOW_Y}"
width = "{__GUI_WINDOW_WIDTH}"
height = "{__GUI_WINDOW_HEIGHT}"
reevaluate_best_size = "{__GUI_WINDOW_REEVALUATE_BEST_SIZE}"
# TODO tooltips in this window make little sense.
# Have to think of a nice solution.
[tooltip]
id = "tooltip_transparent"
[/tooltip]
[helptip]
id = "tooltip_transparent"
[/helptip]
[grid]
[row]
[column]
[label]
id = "label"
definition = "default_small"
use_markup = true
wrap = true
[/label]
[/column]
[/row]
[/grid]
[/resolution]
[/window]
#undef __GUI_WINDOW_REEVALUATE_BEST_SIZE
#undef __GUI_WINDOW_HEIGHT
#undef __GUI_WINDOW_WIDTH

View file

@ -282,11 +282,11 @@
[/linked_group]
[tooltip]
id = "tooltip"
id = "tooltip_transparent"
[/tooltip]
[helptip]
id = "tooltip"
id = "tooltip_transparent"
[/helptip]
[grid]

View file

@ -3,5 +3,5 @@
sort_name = "English (·𐑖𐑭𐑝𐑾𐑯)"
locale=en@shaw
alternates=en_AG@shaw, en_AU@shaw, en_CA@shaw, en_BW@shaw, en_DK@shaw, en_GB@shaw, en_HK@shaw, en_IE@shaw, en_IN@shaw, en_NG@shaw, en_NZ@shaw, en_PH@shaw, en_SG@shaw, en_US@shaw, en_ZA@shaw, en_ZW@shaw
percent=33
percent=32
[/locale]

View file

@ -3,5 +3,5 @@
sort_name = "Ivrit"
locale=he_IL
dir=rtl
percent=34
percent=33
[/locale]

View file

@ -1,5 +1,5 @@
[locale]
name="Tiếng Việt"
locale=vi_VN
percent=58
percent=57
[/locale]

View file

@ -1,4 +1,5 @@
# This unit test is used for verify what 'add' and 'sub' attributes work in [leadership] abilities
# but also what 'cumulative=yes' is fixed.
{GENERIC_UNIT_TEST "test_add_in_leadership_abilities" (
[event]
name=start
@ -14,17 +15,35 @@
[effect]
apply_to=new_ability
[abilities]
[leadership]
id=leadership_cum
value=25
cumulative=yes
affect_self=yes
[/leadership]
[leadership]#this value must be added to other leadership_cum
id=leadership_cum
value=25
cumulative=yes
affect_self=yes
[/leadership]
[leadership]
id=leadership_pos
add=25
cumulative=no
affect_self=yes
[/leadership]
[leadership]#this value musn't be added because already leadership_pos to value=25
id=leadership_pos
add=15
cumulative=no
affect_self=yes
[/leadership]
[attacks]
value=1
[/attacks]
[damage]
value=60
value=12
[/damage]
[chance_to_hit]
value=100
@ -73,7 +92,9 @@
[/filter]
variable=b
[/store_unit]
{ASSERT ({VARIABLE_CONDITIONAL b.hitpoints equals 25})}
#the final damage must be damage_value +(damage_value*(2*leadership_cum + highest leadership_pos))
# 12 + 12*(2*0.25 + 0.25) = 21. It must be remain 100hp-21=79hp
{ASSERT ({VARIABLE_CONDITIONAL b.hitpoints equals 79})}
{SUCCEED}
[/event]
)}

View file

@ -2,7 +2,7 @@
major = 1
minor = 17
release = 3
release = 4
dev_suffix = "+dev" # either use "+dev", "-dev", "" (empty string) or None
as_string = "{}.{}.{}{}".format(major,

View file

@ -223,6 +223,13 @@ aliaschanges = (
("Vi", "Vt"),
)
# Deprecated lines that ought to be removed globally. Suppressed by noconvert.
obsolete_lines = (
"{MAGENTA_IS_THE_TEAM_COLOR}",
"{SOUND:SLOW}",
"{SOUND:POISON}",
)
# Global changes meant to be done on all lines. Suppressed by noconvert.
linechanges = (
("canrecruit=1", "canrecruit=yes"),
@ -969,6 +976,9 @@ linechanges = (
("Naga Slasher", "Naga Dirkfang"),
("Naga Bladewhirler", "Naga Ophidian"),
# monster unit ID changes during 1.15.x cycle
("Giant Stoat", "Frost Stoat"),
# Changed in 1.15.0: separate portrait for leader
("portraits/orcs/leader.png", "portraits/orcs/ruler.png"),
("portraits/orcs/leader-2.png", "portraits/orcs/ruler-2.png"),
@ -2944,13 +2954,19 @@ def hack_syntax(filename, lines):
in_side_one_tag = False
side_one_tag_needs_side_one = True
break
# handle removal of {MAGENTA_IS_THE_TEAM_COLOR}
# handle removal of obsolete lines without replacement
# obsolete_lines contains normal strings, so re.escape is needed to embed them into this regex
obsolete_re = re.compile(r"(\s*)(" + "|".join([re.escape(l) for l in obsolete_lines]) + r")(.*)")
for i, line in enumerate(lines):
if "no-syntax-rewrite" in line:
break
m = re.match(r"(\s*)\{MAGENTA_IS_THE_TEAM_COLOR\}(.*)", line)
if "wmllint: noconvert" in line:
continue
m = obsolete_re.match(line)
if m:
new_line = m.group(1) + m.group(2).lstrip()
# match group 1 is the indentation
# match group 3 contains everything after the removed part (like comments)
new_line = m.group(1) + m.group(3).lstrip()
if new_line.isspace():
# only empty spaces, make the line blank
# don't remove the line to not alter the other for cycles
@ -2958,8 +2974,8 @@ def hack_syntax(filename, lines):
else:
# keep indentation and comments
lines[i] = new_line + "\n"
print('"{}", line {}: removed MAGENTA_IS_THE_TEAM_COLOR'.format(filename,
i+1))
# match group 2 contains the removed part
print('"{}", line {}: removed {}'.format(filename, i+1, m.group(2)))
# handle deprecation of [unit] placement=map_overwrite/map_passable/leader_passable
in_unit = False
for i, line in enumerate(lines):

View file

@ -48,13 +48,13 @@ s\ ostatními.
V\ seznamu pro výběr jazyka uvnitř hry ukázat všechny překlady, i\ když jsou
považovány za nedostatečně hotové.
.TP
\fB\-\-bunzip2\fP\fI\ soubor_se_hrou.bz2\fP
dekomprimuje soubor s uloženou hrou (soubor_se_hrou) ve formátu bzip2 a
uloží jej bez koncovky .bz2. Následně je \fIsoubor_se_hrou.bz2\fP smazán.
\fB\-\-bunzip2\fP\fI\ vstupní_soubor.bz2\fP
dekomprimuje soubor, který by měl být ve formátu bzip2, a\ uloží jej bez
přípony .bz2. Původní \fIvstupní_soubor.bz2\fP bude odstraněn.
.TP
\fB\-\-bzip2\fP\fI\ soubor_se_hrou\fP
komprimuje soubor s uloženou hrou (soubor_se_hrou) do formátu bzip2 a uloží
jej jako \fIsoubor_se_hrou\fP.bz2 a odstraní \fIsoubor_se_hrou\fP.
\fB\-\-bzip2\fP\fI\ vstupní_soubor\fP
zkomprimuje soubor do formátu bzip2, uloží jej jako \fIvstupní_soubor\fP.bz2
a\ odstraní \fIvstupní_soubor\fP.
.TP
\fB\-c[\fP\fIid_tažení\fP\fB],\ \-\-campaign[\fP\fI=id_tažení\fP\fB]\fP
rovnou spustí tažení s\ identifikátorem \fIid_tažení\fP. Pokud není zadán

View file

@ -156,8 +156,8 @@ filename.pem 4096\fP
.SS 全局标签:
.
.P
\fB[redirect]\fP A tag to specify a server to redirect certain client versions
to. Is not used if \fBversions_accepted\fP is not set.
\fB[redirect]\fP
这个标签用于设定一个服务器,以将某些版本的客户端重定向到该服务器上。如果没有设置\fBversions_accepted\fP,那么此标签无效。
.RS
.TP
\fBhost\fP
@ -186,12 +186,8 @@ to. Is not used if \fBversions_accepted\fP is not set.
这个标签用于告诉服务器扮演代理服务器角色,把连接在本服务器上的用户的请求转发到指定的服务器。与\fB[redirect]\fP接受一样的主键。
.RE
.P
\fB[user_handler]\fP Configures the user handler. If no \fB[user_handler]\fP
section is present in the configuration the server will run without any nick
registration service. All additional tables that are needed for the
\fBforum_user_handler\fP to function can be found in table_definitions.sql in
the Wesnoth source repository. Requires mysql support enabled. For cmake
this is \fBENABLE_MYSQL\fP and for scons this is \fBforum_user_handler.\fP
\fB[user_handler]\fP
配置用户数据处理器。如果配置中没有\fB[user_handler]\fP小节,则服务器在运行中将不提供任何昵称注册服务。\fBforum_user_handler\fP正常运作所需的额外数据表可以在韦诺源代码库的table_definitions.sql中找到。需要启用mysql支持。对于cmake请使用\fBENABLE_MYSQL\fP而对于scons请使用\fBforum_user_handler\fP
.RS
.TP
\fBdb_host\fP

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Some files were not shown because too many files have changed in this diff Show more