Merge remote-tracking branch 'wesnoth/master' into rendering_system_overhaul
28
.github/workflows/ci-main.yml
vendored
|
@ -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
|
||||
|
||||
|
|
19
.github/workflows/ci-scripts/docker.sh
vendored
|
@ -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
|
||||
|
|
12
.github/workflows/ci-scripts/macos.sh
vendored
|
@ -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"
|
||||
|
|
4
.github/workflows/ci-scripts/ubuntu.sh
vendored
|
@ -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
|
||||
|
|
15
.github/workflows/map-diff.yml
vendored
|
@ -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 }}
|
||||
|
|
|
@ -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()
|
||||
|
|
2
Doxyfile
|
@ -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
|
||||
|
|
31
changelog.md
|
@ -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
|
@ -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()
|
|
@ -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()
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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]
|
||||
|
||||
|
|
|
@ -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! Let’s get moving quickly before the rest of their army catches up with us."
|
||||
[/message]
|
||||
|
||||
[endlevel]
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
sounds=ambient/campfire.ogg
|
||||
delay=0
|
||||
chance=100
|
||||
full_range=1
|
||||
full_range=2
|
||||
fade_range=6
|
||||
[/sound_source]
|
||||
[/do]
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -294,10 +294,6 @@
|
|||
[/endlevel]
|
||||
[/event]
|
||||
|
||||
[event]
|
||||
name=victory
|
||||
[/event]
|
||||
|
||||
{HERODEATH_AIGLONDUR}
|
||||
{HERODEATH_ANGARTHING}
|
||||
{HERODEATH_MOVRUR}
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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 Eloh’s name, not you again. Must I fight you another time?"
|
||||
message= _ "In Eloh’s name, not you again. Must I fight you a third time?"
|
||||
[/message]
|
||||
|
||||
[message]
|
||||
|
|
|
@ -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}
|
||||
|
|
30
data/campaigns/tutorial/lua/hint_message.lua
Normal 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
|
||||
|
|
@ -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 Li’sar, 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 Li’sar 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 Li’sar, 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 Li’sar 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 you’re ready."
|
||||
[/message]
|
||||
[/hint_message]
|
||||
) (
|
||||
[message]
|
||||
speaker=narrator
|
||||
[hint_message]
|
||||
caption= _"Attacking"
|
||||
image=wesnoth-icon.png
|
||||
message= _"To attack the quintain, first select the attacker (Li’sar), then the target (the quintain). You will see an attack description. Click <b>Attack</b> when you’re 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 (Li’sar) 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 you’ve 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 you’re 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, you’ll 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 you’re finished, click the <b>End Scenario</b> button to go on to the next scenario in the campaign."
|
||||
[/message]
|
||||
[/hint_message]
|
||||
[/event]
|
||||
|
||||
[event]
|
||||
|
|
|
@ -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 she’ll 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 she’ll 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 unit’s 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 doesn’t 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, it’s 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> menu’s <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> menu’s <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 doesn’t 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]
|
||||
|
||||
|
|
BIN
data/core/images/portraits/monsters/caribe.webp
Normal file
After Width: | Height: | Size: 36 KiB |
BIN
data/core/images/portraits/monsters/nibbler.webp
Normal file
After Width: | Height: | Size: 67 KiB |
BIN
data/core/images/terrain/embellishments/seashells-tile.png
Normal file
After Width: | Height: | Size: 10 KiB |
BIN
data/core/images/terrain/embellishments/seashells.png
Normal file
After Width: | Height: | Size: 1.5 KiB |
BIN
data/core/images/terrain/embellishments/seashells2.png
Normal file
After Width: | Height: | Size: 1.7 KiB |
BIN
data/core/images/terrain/embellishments/seashells3.png
Normal file
After Width: | Height: | Size: 2 KiB |
BIN
data/core/images/terrain/embellishments/seashells4.png
Normal file
After Width: | Height: | Size: 1 KiB |
BIN
data/core/images/terrain/embellishments/seashells5.png
Normal file
After Width: | Height: | Size: 2.1 KiB |
BIN
data/core/images/terrain/embellishments/seashells6.png
Normal file
After Width: | Height: | Size: 2.1 KiB |
BIN
data/core/images/terrain/forest/great-oak-tree-dead-water.png
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
data/core/images/terrain/misc/rubble-water.png
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
data/core/images/terrain/misc/rubble-water2.png
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
data/core/images/terrain/misc/rubble-water3.png
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
data/core/images/terrain/misc/rubble-water4.png
Normal file
After Width: | Height: | Size: 11 KiB |
BIN
data/core/images/terrain/water/seaweed/kelp-1.png
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
data/core/images/terrain/water/seaweed/kelp-2.png
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
data/core/images/terrain/water/seaweed/kelp-3.png
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
data/core/images/terrain/water/seaweed/kelp-4.png
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
data/core/images/terrain/water/seaweed/kelp-dead-small.png
Normal file
After Width: | Height: | Size: 5.9 KiB |
BIN
data/core/images/terrain/water/seaweed/kelp-dead-small2.png
Normal file
After Width: | Height: | Size: 3.1 KiB |
BIN
data/core/images/terrain/water/seaweed/kelp-dead-small3.png
Normal file
After Width: | Height: | Size: 2.5 KiB |
BIN
data/core/images/terrain/water/seaweed/kelp-dead.png
Normal file
After Width: | Height: | Size: 5.5 KiB |
BIN
data/core/images/terrain/water/seaweed/kelp-dead2.png
Normal file
After Width: | Height: | Size: 5.8 KiB |
BIN
data/core/images/terrain/water/seaweed/kelp-dead3.png
Normal file
After Width: | Height: | Size: 6.2 KiB |
BIN
data/core/images/terrain/water/seaweed/kelp-dead4.png
Normal file
After Width: | Height: | Size: 5.9 KiB |
BIN
data/core/images/terrain/water/seaweed/kelp-small-1.png
Normal file
After Width: | Height: | Size: 11 KiB |
BIN
data/core/images/terrain/water/seaweed/kelp-small-2.png
Normal file
After Width: | Height: | Size: 11 KiB |
BIN
data/core/images/terrain/water/seaweed/kelp-small-3.png
Normal file
After Width: | Height: | Size: 11 KiB |
BIN
data/core/images/terrain/water/seaweed/kelp-small-4.png
Normal file
After Width: | Height: | Size: 11 KiB |
BIN
data/core/images/terrain/water/seaweed/kelp-tile.png
Normal file
After Width: | Height: | Size: 9.1 KiB |
BIN
data/core/images/terrain/water/seaweed/kelp2-1.png
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
data/core/images/terrain/water/seaweed/kelp2-2.png
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
data/core/images/terrain/water/seaweed/kelp2-3.png
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
data/core/images/terrain/water/seaweed/kelp2-4.png
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
data/core/images/units/monsters/caribe/caribe-attack-1.png
Normal file
After Width: | Height: | Size: 2.4 KiB |
BIN
data/core/images/units/monsters/caribe/caribe-attack-2.png
Normal file
After Width: | Height: | Size: 2.4 KiB |
BIN
data/core/images/units/monsters/caribe/caribe-default.png
Normal file
After Width: | Height: | Size: 5.2 KiB |
BIN
data/core/images/units/monsters/caribe/caribe-defend-1.png
Normal file
After Width: | Height: | Size: 2 KiB |
BIN
data/core/images/units/monsters/caribe/caribe-defend-2.png
Normal file
After Width: | Height: | Size: 2 KiB |
BIN
data/core/images/units/monsters/caribe/caribe-hi.png
Normal file
After Width: | Height: | Size: 5.3 KiB |
BIN
data/core/images/units/monsters/caribe/caribe-land.png
Normal file
After Width: | Height: | Size: 2 KiB |
BIN
data/core/images/units/monsters/caribe/caribe-lo.png
Normal file
After Width: | Height: | Size: 5.4 KiB |
BIN
data/core/images/units/monsters/caribe/caribe-mask.png
Normal file
After Width: | Height: | Size: 4.1 KiB |
BIN
data/core/images/units/monsters/caribe/caribe-shadow.png
Normal file
After Width: | Height: | Size: 277 B |
BIN
data/core/images/units/monsters/caribe/caribe.png
Normal file
After Width: | Height: | Size: 2 KiB |
BIN
data/core/images/units/monsters/caribe/nibbler--hi.png
Normal file
After Width: | Height: | Size: 1.4 KiB |
BIN
data/core/images/units/monsters/caribe/nibbler-attack-1.png
Normal file
After Width: | Height: | Size: 1.4 KiB |
BIN
data/core/images/units/monsters/caribe/nibbler-default.png
Normal file
After Width: | Height: | Size: 4.9 KiB |
BIN
data/core/images/units/monsters/caribe/nibbler-defend-1.png
Normal file
After Width: | Height: | Size: 1.4 KiB |
BIN
data/core/images/units/monsters/caribe/nibbler-defend-2.png
Normal file
After Width: | Height: | Size: 1.3 KiB |
BIN
data/core/images/units/monsters/caribe/nibbler-hi.png
Normal file
After Width: | Height: | Size: 5 KiB |
BIN
data/core/images/units/monsters/caribe/nibbler-land.png
Normal file
After Width: | Height: | Size: 1.3 KiB |
BIN
data/core/images/units/monsters/caribe/nibbler-lo.png
Normal file
After Width: | Height: | Size: 4.8 KiB |
BIN
data/core/images/units/monsters/caribe/nibbler-shadow.png
Normal file
After Width: | Height: | Size: 287 B |
BIN
data/core/images/units/monsters/caribe/nibbler.png
Normal file
After Width: | Height: | Size: 1.4 KiB |
|
@ -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}
|
||||
|
||||
|
|
|
@ -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]
|
||||
|
|
|
@ -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
|
||||
|
|
146
data/core/units/monsters/Caribe.cfg
Normal 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
|
160
data/core/units/monsters/Caribe_Nibbler.cfg
Normal 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
|
|
@ -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]
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -282,11 +282,11 @@
|
|||
[/linked_group]
|
||||
|
||||
[tooltip]
|
||||
id = "tooltip"
|
||||
id = "tooltip_transparent"
|
||||
[/tooltip]
|
||||
|
||||
[helptip]
|
||||
id = "tooltip"
|
||||
id = "tooltip_transparent"
|
||||
[/helptip]
|
||||
|
||||
[grid]
|
||||
|
|
|
@ -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]
|
||||
|
|
|
@ -3,5 +3,5 @@
|
|||
sort_name = "Ivrit"
|
||||
locale=he_IL
|
||||
dir=rtl
|
||||
percent=34
|
||||
percent=33
|
||||
[/locale]
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
[locale]
|
||||
name="Tiếng Việt"
|
||||
locale=vi_VN
|
||||
percent=58
|
||||
percent=57
|
||||
[/locale]
|
||||
|
|
|
@ -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]
|
||||
)}
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|