Compare commits
206 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 978f061481 | |||
| fb61272e8a | |||
| ad4cc972a6 | |||
| f4493c9e15 | |||
| 5785121948 | |||
| 703707ea6d | |||
| 8fc3723e76 | |||
| 0eb6828066 | |||
| 1b7809b823 | |||
| 1ad3b21f53 | |||
| b97bcbada9 | |||
| 5eb239cd4b | |||
| 3d38c352ad | |||
| 60b855df05 | |||
| 1c699c1257 | |||
| 233c74eaf9 | |||
| 56c0677ac4 | |||
| 3a97ba8ef0 | |||
| ac757918c0 | |||
| cbff85d66a | |||
| f1392ed778 | |||
| 14288192e8 | |||
| 8990fa3cb8 | |||
| d38554e453 | |||
| 220c5f5bd1 | |||
| 14f6999fce | |||
| bde2ec7a40 | |||
| 4a36b97363 | |||
| 10d4f13828 | |||
| 9a2b648cb9 | |||
| 579eb4753b | |||
| 62595aba82 | |||
| dedfc78a0e | |||
| e02d46b45f | |||
| d450642332 | |||
| 9c9506e903 | |||
| 6954f5e0b5 | |||
| 75bc195d47 | |||
| ba79a89c6a | |||
| bc7573b68a | |||
| 24aaac96c4 | |||
| d9def0508d | |||
| 5e2af3d28f | |||
| ccd795c658 | |||
| 7d3d0e9c42 | |||
| ac341208d4 | |||
| f374325fd2 | |||
| 2e1cc4cf40 | |||
| 2218c59cab | |||
| bba7502534 | |||
| dc5fae5e5e | |||
| 0606ece32a | |||
| 6201603e00 | |||
| a14314421a | |||
| 8c6825f346 | |||
| dc95cee364 | |||
| 54d51fb8b3 | |||
| 51cf5881c2 | |||
| be00a19661 | |||
| f08c30edf7 | |||
| de7ab5eaae | |||
| 9b89330615 | |||
| 1bf032105f | |||
| e79331802d | |||
| 68e2f75602 | |||
| 5c482e0508 | |||
| 85aaa9c307 | |||
| 659c5f1f84 | |||
| b2cc93e47f | |||
| 65dc6695cc | |||
| 284032cdce | |||
| f46ef69aca | |||
| 71a584d852 | |||
| 33420a5643 | |||
| 63ab1e21ad | |||
| 300c705504 | |||
| 5f31f79edf | |||
| 7edf2802d7 | |||
| 4f49f81425 | |||
| e159a02474 | |||
| b9410ec7cb | |||
| 4954f41273 | |||
| 38fdba9314 | |||
| 0abae9ca7c | |||
| 19eef1590d | |||
| 7df672bd41 | |||
| 843c119e5c | |||
| 48f5b8fc1c | |||
| b86e43024a | |||
| 8cf0613c5c | |||
| 40a37478e3 | |||
| 6494c3c494 | |||
| 10313dad08 | |||
| a31fb2f94e | |||
| 75b5686484 | |||
| 50132a48e3 | |||
| 732b01c44c | |||
| 1c7d1d5707 | |||
| bb732b7784 | |||
| 4a16ab4f7b | |||
| 8ce19e73a5 | |||
| 62ed0e1cdc | |||
| c8a693bd28 | |||
| c809834050 | |||
| ed64975b14 | |||
| 3054299a73 | |||
| d97c1abff3 | |||
| 0da41c7d25 | |||
| 8cd989c9e2 | |||
| 7a033f9e2e | |||
| 6f2fd7ea61 | |||
| 179ac5d931 | |||
| fe465a4abc | |||
| a98773f3f6 | |||
| 377a63ff35 | |||
| 610b7a2d7f | |||
| 3136807a9a | |||
| 65de954fd0 | |||
| a638b9ae28 | |||
| 2a87b24bb8 | |||
| 7f0b416c92 | |||
| e339ea6d0e | |||
| df8dc6f9f2 | |||
| 65bf9c3452 | |||
| 6c8078fa61 | |||
| 3889c04b8a | |||
| 045db25c11 | |||
| a9c48f3cb4 | |||
| 8f4bd54194 | |||
| f9beb0aabc | |||
| 48e47c9711 | |||
| 9015cf2b05 | |||
| ca16fb634d | |||
| b93daefb5d | |||
| eb5408cef8 | |||
| cded3a3e0f | |||
| b8c09b2c44 | |||
| 5a160f99ff | |||
| 4ac5e2e044 | |||
| fb2346f557 | |||
| 0af8985d48 | |||
| bf8079a43e | |||
| b454952f5d | |||
| 946ff0ca02 | |||
| a1e2eaf5d0 | |||
| 68da72b304 | |||
| 49d8501795 | |||
| 73fa5fc874 | |||
| 18d80d9fc0 | |||
| 2f9fa8806f | |||
| 2722b16c85 | |||
| 799bfe8916 | |||
| 2ea81c22a6 | |||
| 10b0fc2890 | |||
| 64d508a505 | |||
| 86f0fd17e3 | |||
| 14130cb3e0 | |||
| da957d7c65 | |||
| a128c0b91c | |||
| 853771230a | |||
| 9fd2683aa9 | |||
| 814cd44f73 | |||
| 404fd5d24e | |||
| d01103a8ca | |||
| 9fcd06bd1d | |||
| 1fd34fb657 | |||
| a5d368265c | |||
| 049d5d4cb9 | |||
| 91be550c12 | |||
| 8c4aac43e8 | |||
| ac776231a7 | |||
| 34e71f1830 | |||
| 1778105f33 | |||
| 4db78082f5 | |||
| ff821abb79 | |||
| ca010ef10c | |||
| 432e3e0317 | |||
| afed1e9ed9 | |||
| a6aaa6776f | |||
| 893a66a7cb | |||
| 07a8857ca2 | |||
| 60e8673634 | |||
| 84b59702f2 | |||
| 61bf7c9704 | |||
| 9a5ca68322 | |||
| bee32a2879 | |||
| 451371a834 | |||
| ebde2d705a | |||
| 0d7d17dca1 | |||
| ba6168fbe3 | |||
| aeb5a39544 | |||
| fffd5e81cc | |||
| 6335d467a6 | |||
| 7136cd55dc | |||
| 65c630b06a | |||
| 17eea48e40 | |||
| 62d71639c9 | |||
| 51c33e33cc | |||
| 6ae2ac66a4 | |||
| 4d44225f6b | |||
| 02e92b2b58 | |||
| 15cb840e28 | |||
| 78bcc4cb29 | |||
| 85dc268d1d | |||
| 1c6f9a80a6 | |||
| 73bff7c2bc |
78
.github/workflows/mac-universal.yml
vendored
Normal file
78
.github/workflows/mac-universal.yml
vendored
Normal file
@@ -0,0 +1,78 @@
|
||||
name: Mac universal build
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- universal
|
||||
release:
|
||||
types: [published]
|
||||
jobs:
|
||||
build:
|
||||
runs-on: macos-14
|
||||
env:
|
||||
CONFIGURATION: ${{ matrix.configuration }}
|
||||
BUTLER_API_KEY: ${{ secrets.BUTLER_API_KEY }}
|
||||
PROD_MACOS_CERTIFICATE: '${{ secrets.PROD_MACOS_CERTIFICATE }}'
|
||||
PROD_MACOS_CERTIFICATE_PWD: '${{ secrets.PROD_MACOS_CERTIFICATE_PWD }}'
|
||||
PROD_MACOS_CERTIFICATE_NAME: '${{ secrets.PROD_MACOS_CERTIFICATE_NAME }}'
|
||||
PROD_MACOS_CI_KEYCHAIN_PWD: '${{ secrets.PROD_MACOS_CI_KEYCHAIN_PWD }}'
|
||||
PROD_MACOS_NOTARIZATION_APPLE_ID: '${{ secrets.PROD_MACOS_NOTARIZATION_APPLE_ID }}'
|
||||
PROD_MACOS_NOTARIZATION_TEAM_ID: '${{ secrets.PROD_MACOS_NOTARIZATION_TEAM_ID }}'
|
||||
PROD_MACOS_NOTARIZATION_PWD: '${{ secrets.PROD_MACOS_NOTARIZATION_PWD }}'
|
||||
BUILD_OS: macos
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
configuration:
|
||||
- Release
|
||||
- Debug
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: test butler
|
||||
run: './.github/workflows/scripts/butler_push.sh test'
|
||||
shell: bash
|
||||
if: ${{ startsWith(github.ref, 'refs/tags/') && matrix.configuration == 'Release' && matrix.os.name != 'macos' }}
|
||||
|
||||
# Download macos-intel
|
||||
- uses: robinraju/release-downloader@v1
|
||||
id: download
|
||||
with:
|
||||
latest: true
|
||||
fileName: 'cboe-macos-intel-${{ matrix.configuration }}.tar'
|
||||
extract: true
|
||||
out-file-path: 'cboe-macos-intel-${{ matrix.configuration }}'
|
||||
|
||||
# Download macos-silicon
|
||||
- uses: robinraju/release-downloader@v1
|
||||
with:
|
||||
latest: true
|
||||
fileName: 'cboe-macos-silicon-${{ matrix.configuration }}.tar'
|
||||
extract: true
|
||||
out-file-path: 'cboe-macos-silicon-${{ matrix.configuration }}'
|
||||
|
||||
- run: .github/workflows/scripts/mac/make-universal.sh
|
||||
|
||||
# Skipping this for now because of issue nqnstudios#13
|
||||
- name: Codesign and notarize
|
||||
run: 'SIGN="no" NOTARIZE="no" .github/workflows/scripts/mac/sign-apps.sh'
|
||||
|
||||
- name: 'Tar files'
|
||||
run: 'tar -cvf cboe-macos-universal-${{matrix.configuration}}.tar "build/Blades of Exile"'
|
||||
|
||||
# Upload everything as artifact
|
||||
- uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: mac-universal-dependencies-${{matrix.configuration}}
|
||||
path: cboe-macos-universal-${{matrix.configuration}}.tar
|
||||
|
||||
# upload a release
|
||||
- name: Github release
|
||||
uses: softprops/action-gh-release@v2
|
||||
with:
|
||||
files: cboe-macos-universal-${{ matrix.configuration }}.tar
|
||||
tag_name: ${{ steps.download.outputs.tag_name }}
|
||||
|
||||
- name: 'Itch.io release'
|
||||
run: './.github/workflows/scripts/butler_push.sh'
|
||||
shell: bash
|
||||
if: ${{ matrix.configuration == 'Release' }}
|
||||
136
.github/workflows/release.yml
vendored
Normal file
136
.github/workflows/release.yml
vendored
Normal file
@@ -0,0 +1,136 @@
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- 'itch-edition'
|
||||
tags:
|
||||
- "v*.*.*"
|
||||
pull_request:
|
||||
branches:
|
||||
- itch-edition
|
||||
jobs:
|
||||
release:
|
||||
env:
|
||||
ARCH: ${{ matrix.os.flag }}
|
||||
MACOSX_DEPLOYMENT_TARGET: 10.15
|
||||
BUTLER_API_KEY: ${{ secrets.BUTLER_API_KEY }}
|
||||
PROD_MACOS_CERTIFICATE: '${{ secrets.PROD_MACOS_CERTIFICATE }}'
|
||||
PROD_MACOS_CERTIFICATE_PWD: '${{ secrets.PROD_MACOS_CERTIFICATE_PWD }}'
|
||||
PROD_MACOS_CERTIFICATE_NAME: '${{ secrets.PROD_MACOS_CERTIFICATE_NAME }}'
|
||||
PROD_MACOS_CI_KEYCHAIN_PWD: '${{ secrets.PROD_MACOS_CI_KEYCHAIN_PWD }}'
|
||||
PROD_MACOS_NOTARIZATION_APPLE_ID: '${{ secrets.PROD_MACOS_NOTARIZATION_APPLE_ID }}'
|
||||
PROD_MACOS_NOTARIZATION_TEAM_ID: '${{ secrets.PROD_MACOS_NOTARIZATION_TEAM_ID }}'
|
||||
PROD_MACOS_NOTARIZATION_PWD: '${{ secrets.PROD_MACOS_NOTARIZATION_PWD }}'
|
||||
VCPKG_BINARY_SOURCES: "clear;x-gha,readwrite"
|
||||
RELEASE_FLAG: ${{ matrix.configuration == 'Release' && 'true' || 'false' }}
|
||||
BUILD_OS: ${{ matrix.os.name }}
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
os:
|
||||
- name: macos
|
||||
suffix: '-intel'
|
||||
flag: x86_64
|
||||
deps: macos-universal
|
||||
version: 13
|
||||
scons-script: './.github/workflows/scripts/mac/scons-build.sh'
|
||||
- name: macos
|
||||
flag: arm64
|
||||
suffix: '-silicon'
|
||||
deps: macos-universal
|
||||
version: 14
|
||||
scons-script: './.github/workflows/scripts/mac/scons-build.sh'
|
||||
# - name: ubuntu
|
||||
# suffix: ''
|
||||
# version: 22.04
|
||||
# scons-script: scons
|
||||
- name: windows
|
||||
suffix: ''
|
||||
version: 2022
|
||||
scons-script: './.github/workflows/scripts/win/scons-build.bat'
|
||||
configuration:
|
||||
- Release
|
||||
- Debug
|
||||
runs-on: '${{ matrix.os.name }}-${{ matrix.os.version }}'
|
||||
steps:
|
||||
- name: Export GitHub Actions cache environment variables
|
||||
uses: actions/github-script@v7
|
||||
with:
|
||||
script: "core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || ''); core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || '');"
|
||||
- name: checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: true
|
||||
- name: test butler
|
||||
run: './.github/workflows/scripts/butler_push.sh test'
|
||||
shell: bash
|
||||
if: ${{ startsWith(github.ref, 'refs/tags/') && matrix.configuration == 'Release' && matrix.os.name != 'macos' }}
|
||||
|
||||
- name: Download dependency build
|
||||
uses: robinraju/release-downloader@v1
|
||||
with:
|
||||
repository: NQNStudios/cboe-dependencies
|
||||
latest: true
|
||||
fileName: 'dependencies-${{ matrix.os.deps || matrix.os.name }}-${{ matrix.configuration }}.tar'
|
||||
extract: true
|
||||
out-file-path: 'deps'
|
||||
- name: Windows build dependencies
|
||||
run: 'vcpkg install libxml2 && pip install scons'
|
||||
if: ${{ matrix.os.name == 'windows' }}
|
||||
- name: Mac build dependencies
|
||||
run: brew install scons
|
||||
if: ${{ matrix.os.name == 'macos' }}
|
||||
- name: Linux build dependencies
|
||||
run: sudo apt-get update && sudo apt-get install scons libxml2-utils libgl-dev libopenal-dev
|
||||
if: ${{ matrix.os.name == 'ubuntu' }}
|
||||
- name: Install TGUI
|
||||
run: 'sudo ./.github/workflows/scripts/linux/install-tgui.sh'
|
||||
if: ${{ matrix.os.name == 'ubuntu' }}
|
||||
- name: Build
|
||||
run: '${{ matrix.os.scons-script }} test=false release=$RELEASE_FLAG'
|
||||
shell: bash
|
||||
|
||||
- name: Download fix-rpaths.py script
|
||||
run: git clone https://gist.github.com/NQNStudios/7145bcf6621891f5176c8caa165d6b93
|
||||
if: ${{ matrix.os.name == 'macos' }}
|
||||
- name: Fix rpaths game
|
||||
run: 'python 7145bcf6621891f5176c8caa165d6b93/fix-rpaths.py "build/Blades of Exile/Blades of Exile.app"'
|
||||
if: ${{ matrix.os.name == 'macos' }}
|
||||
- name: Fix rpaths scenario editor
|
||||
run: 'python 7145bcf6621891f5176c8caa165d6b93/fix-rpaths.py "build/Blades of Exile/BoE Scenario Editor.app"'
|
||||
if: ${{ matrix.os.name == 'macos' }}
|
||||
- name: Fix rpaths character editor
|
||||
run: 'python 7145bcf6621891f5176c8caa165d6b93/fix-rpaths.py "build/Blades of Exile/BoE Character Editor.app"'
|
||||
if: ${{ matrix.os.name == 'macos' }}
|
||||
|
||||
- run: cp .itch.toml "build/Blades of Exile/"
|
||||
shell: bash
|
||||
|
||||
- name: 'Tar unsigned files'
|
||||
run: 'tar -cvf cboe-${{ matrix.os.name }}${{ matrix.os.suffix }}-${{ matrix.configuration }}-unsigned.tar "Blades of Exile"'
|
||||
working-directory: '${{ github.workspace }}/build'
|
||||
- name: upload pre-signing artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: cboe-${{ matrix.os.name }}${{ matrix.os.suffix }}-${{ matrix.configuration }}-unsigned
|
||||
path: '${{ github.workspace }}/build/cboe-${{ matrix.os.name }}${{ matrix.os.suffix }}-${{ matrix.configuration }}-unsigned.tar'
|
||||
# Skipping this for now because of issue nqnstudios#13
|
||||
- name: Codesign and notarize
|
||||
run: 'SIGN="no" NOTARIZE="no" ./.github/workflows/scripts/mac/sign-apps.sh'
|
||||
if: ${{ matrix.os.name == 'macos' }}
|
||||
- name: 'Tar files'
|
||||
run: 'tar -cvf cboe-${{ matrix.os.name }}${{ matrix.os.suffix }}-${{ matrix.configuration }}.tar "Blades of Exile"'
|
||||
working-directory: '${{ github.workspace }}/build'
|
||||
- name: 'Upload Artifact'
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: cboe-${{ matrix.os.name }}${{ matrix.os.suffix }}-${{ matrix.configuration }}
|
||||
path: '${{ github.workspace }}/build/cboe-${{ matrix.os.name }}${{ matrix.os.suffix }}-${{ matrix.configuration }}.tar'
|
||||
- name: Github release
|
||||
uses: softprops/action-gh-release@v2
|
||||
with:
|
||||
files: '${{ github.workspace }}/build/cboe-${{ matrix.os.name }}${{ matrix.os.suffix }}-${{ matrix.configuration }}.tar'
|
||||
if: ${{ startsWith(github.ref, 'refs/tags/') }}
|
||||
- name: 'Itch.io release'
|
||||
run: './.github/workflows/scripts/butler_push.sh'
|
||||
shell: bash
|
||||
if: ${{ startsWith(github.ref, 'refs/tags/') && matrix.configuration == 'Release' && matrix.os.name != 'macos' }}
|
||||
48
.github/workflows/scripts/butler_push.sh
vendored
Executable file
48
.github/workflows/scripts/butler_push.sh
vendored
Executable file
@@ -0,0 +1,48 @@
|
||||
#! /bin/bash
|
||||
|
||||
# Pass any argument to make it a dry run (for putting at the start of your CI, to catch failure early)
|
||||
test="${1}"
|
||||
|
||||
butler_channel=""
|
||||
butler_exe=""
|
||||
release_dir=""
|
||||
if [ "$BUILD_OS" = "ubuntu" ]; then
|
||||
butler_channel=linux-amd64
|
||||
butler_exe=butler
|
||||
release_dir="linux"
|
||||
|
||||
# TEMPORARY
|
||||
butler_exe=.github/workflows/scripts/linux/butler/butler
|
||||
elif [ "$BUILD_OS" = "windows" ]; then
|
||||
butler_channel=windows-amd64
|
||||
butler_exe=butler.exe
|
||||
release_dir="windows"
|
||||
|
||||
# TEMPORARY
|
||||
butler_exe=.github/workflows/scripts/win/butler/butler.exe
|
||||
elif [ "$BUILD_OS" = "macos" ]; then
|
||||
butler_channel=darwin-amd64
|
||||
butler_exe=butler
|
||||
release_dir="macos"
|
||||
|
||||
# TEMPORARY
|
||||
butler_exe=.github/workflows/scripts/mac/butler/butler
|
||||
fi
|
||||
|
||||
|
||||
# Butler download is disabled because something is wrong with the automated download links
|
||||
## -L follows redirects
|
||||
## -O specifies output name
|
||||
# if [ ! -f ./${butler_exe} ]; then
|
||||
# curl -L -o butler.zip https://broth.itch.ovh/butler/${butler_channel}/LATEST/archive/default
|
||||
# unzip butler.zip
|
||||
# fi
|
||||
|
||||
# GNU unzip tends to not set the executable bit even though it's set in the .zip
|
||||
chmod +x ${butler_exe}
|
||||
# just a sanity check run (and also helpful in case you're sharing CI logs)
|
||||
./${butler_exe} -V
|
||||
|
||||
if [ -z "$test" ]; then
|
||||
./${butler_exe} push "build/Blades of Exile/" nqn/blades-of-exile:${release_dir}
|
||||
fi
|
||||
BIN
.github/workflows/scripts/linux/butler/7z.so
vendored
Executable file
BIN
.github/workflows/scripts/linux/butler/7z.so
vendored
Executable file
Binary file not shown.
BIN
.github/workflows/scripts/linux/butler/butler
vendored
Executable file
BIN
.github/workflows/scripts/linux/butler/butler
vendored
Executable file
Binary file not shown.
BIN
.github/workflows/scripts/linux/butler/libc7zip.so
vendored
Executable file
BIN
.github/workflows/scripts/linux/butler/libc7zip.so
vendored
Executable file
Binary file not shown.
@@ -3,7 +3,7 @@
|
||||
git clone --depth 1 -b 0.9 https://github.com/texus/TGUI.git
|
||||
cd TGUI
|
||||
export CLICOLOR_FORCE=1
|
||||
cmake -D TGUI_CXX_STANDARD=14 .
|
||||
SFML_DIR=../deps/lib/cmake/SFML cmake -D TGUI_CXX_STANDARD=14 -D SFML_DIR=../deps/lib/cmake/SFML .
|
||||
make
|
||||
cmake --install .
|
||||
cd .. # Probably not needed but...
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#!/bin/sh -ve
|
||||
|
||||
export CCFLAGS=-fdiagnostics-color=always
|
||||
scons
|
||||
scons $@
|
||||
BIN
.github/workflows/scripts/mac/butler/7z.so
vendored
Executable file
BIN
.github/workflows/scripts/mac/butler/7z.so
vendored
Executable file
Binary file not shown.
BIN
.github/workflows/scripts/mac/butler/butler
vendored
Executable file
BIN
.github/workflows/scripts/mac/butler/butler
vendored
Executable file
Binary file not shown.
BIN
.github/workflows/scripts/mac/butler/libc7zip.dylib
vendored
Executable file
BIN
.github/workflows/scripts/mac/butler/libc7zip.dylib
vendored
Executable file
Binary file not shown.
27
.github/workflows/scripts/mac/make-universal.sh
vendored
Executable file
27
.github/workflows/scripts/mac/make-universal.sh
vendored
Executable file
@@ -0,0 +1,27 @@
|
||||
#! /bin/bash
|
||||
|
||||
if [ -z "$CONFIGURATION" ]; then
|
||||
CONFIGURATION=Release
|
||||
fi
|
||||
|
||||
INTEL=cboe-macos-intel-$CONFIGURATION
|
||||
SILICON=cboe-macos-silicon-$CONFIGURATION
|
||||
|
||||
combine() {
|
||||
mkdir -p "build/Blades of Exile/$1.app/Contents/MacOS"
|
||||
lipo -create "$SILICON/Blades of Exile/$1.app/Contents/MacOS/$1" "$INTEL/Blades of Exile/$1.app/Contents/MacOS/$1" -output "build/Blades of Exile/$1.app/Contents/MacOS/$1"
|
||||
cp -r "$SILICON/Blades of Exile/$1.app/Contents/Frameworks" "build/Blades of Exile/$1.app/Contents/"
|
||||
cp -r "$SILICON/Blades of Exile/$1.app/Contents/Resources" "build/Blades of Exile/$1.app/Contents/"
|
||||
cp "$SILICON/Blades of Exile/$1.app/Contents/Info.plist" "build/Blades of Exile/$1.app/Contents/"
|
||||
cp "$SILICON/Blades of Exile/$1.app/Contents/PkgInfo" "build/Blades of Exile/$1.app/Contents/"
|
||||
}
|
||||
|
||||
combine "Blades of Exile"
|
||||
combine "BoE Scenario Editor"
|
||||
combine "BoE Character Editor"
|
||||
|
||||
cp -r "$SILICON/Blades of Exile/Blades of Exile Base" "build/Blades of Exile/"
|
||||
cp -r "$SILICON/Blades of Exile/Blades of Exile Scenarios" "build/Blades of Exile/"
|
||||
cp -r "$SILICON/Blades of Exile/data" "build/Blades of Exile/"
|
||||
cp -r "$SILICON/Blades of Exile/docs" "build/Blades of Exile/"
|
||||
cp "$SILICON/Blades of Exile/.itch.toml" "build/Blades of Exile/"
|
||||
2
.github/workflows/scripts/mac/scons-build.sh
vendored
2
.github/workflows/scripts/mac/scons-build.sh
vendored
@@ -4,4 +4,4 @@ export CC="$(brew --prefix llvm)/bin/clang"
|
||||
export CXX="$(brew --prefix llvm)/bin/clang++"
|
||||
export SDKROOT="$(xcrun --show-sdk-path)"
|
||||
|
||||
scons CXXFLAGS="-I/usr/local/opt/zlib/include" LINKFLAGS="-L/usr/local/opt/zlib/lib" $@
|
||||
scons CXXFLAGS="-I/usr/local/opt/zlib/include -arch $ARCH" LINKFLAGS="-L/usr/local/opt/zlib/lib" $@
|
||||
|
||||
79
.github/workflows/scripts/mac/sign-apps.sh
vendored
Executable file
79
.github/workflows/scripts/mac/sign-apps.sh
vendored
Executable file
@@ -0,0 +1,79 @@
|
||||
#! /bin/bash
|
||||
|
||||
# CODE-SIGNING STEP
|
||||
# Original Source: https://federicoterzi.com/blog/automatic-code-signing-and-notarization-for-macos-apps-using-github-actions/
|
||||
# Modified by NQNStudios
|
||||
|
||||
# Turn our base64-encoded certificate back to a regular .p12 file
|
||||
|
||||
echo $PROD_MACOS_CERTIFICATE | base64 --decode > certificate.p12
|
||||
|
||||
# We need to create a new keychain, otherwise using the certificate will prompt
|
||||
# with a UI dialog asking for the certificate password, which we can't
|
||||
# use in a headless CI environment
|
||||
|
||||
security create-keychain -p "$PROD_MACOS_CI_KEYCHAIN_PWD" build.keychain
|
||||
security default-keychain -s build.keychain
|
||||
security unlock-keychain -p "$PROD_MACOS_CI_KEYCHAIN_PWD" build.keychain
|
||||
security import certificate.p12 -k build.keychain -P "$PROD_MACOS_CERTIFICATE_PWD" -T /usr/bin/codesign
|
||||
security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k "$PROD_MACOS_CI_KEYCHAIN_PWD" build.keychain
|
||||
|
||||
sign() {
|
||||
if [ "$SIGN" = "no" ];
|
||||
then
|
||||
return
|
||||
fi
|
||||
APP_PATH="build/Blades of Exile/$1.app"
|
||||
|
||||
# We finally codesign our app bundle, specifying the Hardened runtime option
|
||||
|
||||
/usr/bin/codesign --force -s "$PROD_MACOS_CERTIFICATE_NAME" --options runtime "$APP_PATH"/Contents/Frameworks/*.dylib -v
|
||||
(cd "$APP_PATH" && frameworks=Contents/Frameworks/*.framework/Versions/A/* && \
|
||||
for framework in $frameworks; do
|
||||
if [ -f "$framework" ]; then
|
||||
/usr/bin/codesign --force -s "$PROD_MACOS_CERTIFICATE_NAME" --options runtime "$framework" -v
|
||||
fi
|
||||
done)
|
||||
/usr/bin/codesign --force -s "$PROD_MACOS_CERTIFICATE_NAME" --options runtime "$APP_PATH"/Contents/Frameworks/*.framework/Versions/A/Resources/Info.plist -v
|
||||
/usr/bin/codesign --force -s "$PROD_MACOS_CERTIFICATE_NAME" --options runtime "$APP_PATH/Contents/Info.plist" -v
|
||||
|
||||
/usr/bin/codesign --force -s "$PROD_MACOS_CERTIFICATE_NAME" --options runtime "$APP_PATH" -v
|
||||
|
||||
# NOTARIZATION STEP
|
||||
if [ "$NOTARIZE" = "no" ];
|
||||
then
|
||||
return
|
||||
fi
|
||||
|
||||
# (same source)
|
||||
|
||||
# Store the notarization credentials so that we can prevent a UI password dialog
|
||||
# from blocking the CI
|
||||
|
||||
echo "Create keychain profile"
|
||||
xcrun notarytool store-credentials "notarytool-profile" --apple-id "$PROD_MACOS_NOTARIZATION_APPLE_ID" --team-id "$PROD_MACOS_NOTARIZATION_TEAM_ID" --password "$PROD_MACOS_NOTARIZATION_PWD"
|
||||
|
||||
# We can't notarize an app bundle directly, but we need to compress it as an archive.
|
||||
# Therefore, we create a zip file containing our app bundle, so that we can send it to the
|
||||
# notarization service
|
||||
|
||||
echo "Creating temp notarization archive"
|
||||
ditto -c -k --keepParent "$APP_PATH" "notarization.zip"
|
||||
|
||||
# Here we send the notarization request to the Apple's Notarization service, waiting for the result.
|
||||
# This typically takes a few seconds inside a CI environment, but it might take more depending on the App
|
||||
# characteristics. Visit the Notarization docs for more information and strategies on how to optimize it if
|
||||
# you're curious
|
||||
|
||||
echo "Notarize app"
|
||||
xcrun notarytool submit "notarization.zip" --keychain-profile "notarytool-profile" --wait
|
||||
|
||||
# Finally, we need to "attach the staple" to our executable, which will allow our app to be
|
||||
# validated by macOS even when an internet connection is not available.
|
||||
echo "Attach staple"
|
||||
xcrun stapler staple "$APP_PATH" || exit 1
|
||||
}
|
||||
|
||||
sign "Blades of Exile"
|
||||
sign "BoE Scenario Editor"
|
||||
sign "BoE Character Editor"
|
||||
BIN
.github/workflows/scripts/win/butler/7z.dll
vendored
Normal file
BIN
.github/workflows/scripts/win/butler/7z.dll
vendored
Normal file
Binary file not shown.
BIN
.github/workflows/scripts/win/butler/butler.exe
vendored
Normal file
BIN
.github/workflows/scripts/win/butler/butler.exe
vendored
Normal file
Binary file not shown.
BIN
.github/workflows/scripts/win/butler/c7zip.dll
vendored
Normal file
BIN
.github/workflows/scripts/win/butler/c7zip.dll
vendored
Normal file
Binary file not shown.
3
.gitmodules
vendored
3
.gitmodules
vendored
@@ -14,3 +14,6 @@
|
||||
[submodule "deps/fmtlib"]
|
||||
path = deps/fmtlib
|
||||
url = http://github.com/fmtlib/fmt
|
||||
[submodule "rsrc/scenarios/custom"]
|
||||
path = rsrc/scenarios/custom
|
||||
url = https://k7izh9.gitea.cloud/openboe/boe-scenarios
|
||||
|
||||
9
.itch.toml
Normal file
9
.itch.toml
Normal file
@@ -0,0 +1,9 @@
|
||||
[[actions]]
|
||||
name = "Play"
|
||||
path = "Blades of Exile.exe"
|
||||
platform = "windows"
|
||||
|
||||
[[actions]]
|
||||
name = "Play"
|
||||
path = "Blades of Exile.app"
|
||||
platform = "osx"
|
||||
@@ -110,7 +110,7 @@ correct place to search. For example, if you installed Boost via Homebrew, you m
|
||||
add something like the following to the Project Build Settings, under Linking->Other
|
||||
Linking Flags:
|
||||
|
||||
-lboost_filesystem -lboost_system -L/usr/local/Cellar/boost/1.57.0/lib
|
||||
-lboost_filesystem -lboost_system -lboost_locale -L/usr/local/Cellar/boost/1.57.0/lib
|
||||
|
||||
Again with Homebrew, you may also need to add the following to Apple LLVM Custom
|
||||
Compiler Flags -> Other C++ Flags:
|
||||
|
||||
90
SConstruct
90
SConstruct
@@ -232,13 +232,15 @@ elif platform == "win32":
|
||||
vcpkg_other_libs = list(filter(path.exists, vcpkg_other_libs))
|
||||
vcpkg_other_bins = [path.join(d.get_abspath(), 'bin') for d in vcpkg_other_packages]
|
||||
vcpkg_other_bins = list(filter(path.exists, vcpkg_other_bins))
|
||||
|
||||
include_paths=[path.join(vcpkg_installed, 'include')] + vcpkg_other_includes
|
||||
project_includes = []
|
||||
for (root, dirs, files) in os.walk('src'):
|
||||
project_includes.append(path.join(os.getcwd(), root))
|
||||
include_paths=project_includes
|
||||
env.Append(
|
||||
LINKFLAGS=['/SUBSYSTEM:WINDOWS','/ENTRY:mainCRTStartup',f'/MACHINE:X{arch_short}'],
|
||||
LINKFLAGS=['/SUBSYSTEM:WINDOWS','/ENTRY:mainCRTStartup',f'/MACHINE:X{arch_short}', '/VERBOSE', '/NODEFAULTLIB:libboost_filesystem-vc142-mt-x64-1_85.lib'],
|
||||
CXXFLAGS=['/EHsc','/MD','/FIglobal.hpp','/utf-8'],
|
||||
CPPPATH=include_paths,
|
||||
LIBPATH=[path.join(vcpkg_installed, 'lib')] + vcpkg_other_libs + vcpkg_other_bins,
|
||||
LIBPATH=[],
|
||||
LIBS=Split("""
|
||||
kernel32
|
||||
user32
|
||||
@@ -259,7 +261,10 @@ elif platform == "win32":
|
||||
def build_app_package(env, source, build_dir, info):
|
||||
env.Install(build_dir, source)
|
||||
elif platform == "posix":
|
||||
env.Append(CXXFLAGS=["-std=c++14","-include","global.hpp"])
|
||||
env.Append(
|
||||
CXXFLAGS=["-std=c++14","-include","global.hpp"],
|
||||
#LINKFLAGS=["-rpath-link", "deps/lib/", "-rpath", "./"]
|
||||
)
|
||||
def build_app_package(env, source, build_dir, info):
|
||||
env.Install(build_dir, source)
|
||||
|
||||
@@ -392,6 +397,7 @@ if not env.GetOption('clean'):
|
||||
check_header('boost/spirit/include/classic.hpp', 'Boost.Spirit.Classic')
|
||||
check_lib('boost_system', 'Boost.System', suffixes, boost_versions)
|
||||
check_lib('boost_filesystem', 'Boost.Filesystem', suffixes, boost_versions)
|
||||
check_lib('boost_locale', 'Boost.Locale', suffixes, boost_versions)
|
||||
sfml_suffixes = ['-d']
|
||||
check_lib('sfml-system', 'SFML-system', sfml_suffixes)
|
||||
check_lib('sfml-window', 'SFML-window', sfml_suffixes)
|
||||
@@ -421,6 +427,7 @@ if not env.GetOption('clean'):
|
||||
if platform == 'posix':
|
||||
def check_tgui(conf, second_attempt=False):
|
||||
if conf.CheckLib('libtgui', language='C++'):
|
||||
bundled_libs.append('tgui')
|
||||
return conf
|
||||
else:
|
||||
if second_attempt:
|
||||
@@ -502,7 +509,31 @@ Export("data_dir")
|
||||
SConscript(["rsrc/SConscript", "doc/SConscript"])
|
||||
|
||||
# Bundle required frameworks and libraries
|
||||
|
||||
def handle_bundled_libs(extension, prefix=''):
|
||||
target_dirs = ["#build/Blades of Exile", "#build/test"]
|
||||
for lib in bundled_libs:
|
||||
for lpath in env['LIBPATH']:
|
||||
def check_path(src_file):
|
||||
_dir = os.path.dirname(src_file)
|
||||
print(f'checking {_dir} for {prefix}{lib}')
|
||||
try:
|
||||
print(os.listdir(_dir))
|
||||
except:
|
||||
pass
|
||||
if path.exists(src_file) and src_file != "/usr/lib/x86_64-linux-gnu/libz.so":
|
||||
for targ in target_dirs:
|
||||
for so in os.listdir(_dir):
|
||||
if os.path.basename(src_file) in so:
|
||||
print(f'found {path.join(_dir, so)}')
|
||||
env.Install(targ, path.join(_dir, so))
|
||||
return True
|
||||
return False
|
||||
if check_path(path.join(lpath, prefix + lib + extension)):
|
||||
break
|
||||
elif check_path(path.join(lpath.replace('lib', 'bin'), prefix + lib + extension)):
|
||||
break
|
||||
elif check_path(path.join(lpath, 'x86_64-linux-gnu', prefix + lib + extension)):
|
||||
break
|
||||
if platform == "darwin":
|
||||
app_targets = []
|
||||
if 'game' in targets:
|
||||
@@ -544,20 +575,7 @@ elif platform == "win32":
|
||||
brotlidec
|
||||
brotlicommon
|
||||
""")
|
||||
target_dirs = ["#build/Blades of Exile", "#build/test"]
|
||||
for lib in bundled_libs:
|
||||
for lpath in env['LIBPATH']:
|
||||
src_file = path.join(lpath, lib + ".dll")
|
||||
if path.exists(src_file):
|
||||
for targ in target_dirs:
|
||||
env.Install(targ, src_file)
|
||||
break
|
||||
elif 'lib' in lpath:
|
||||
src_file = path.join(lpath.replace('lib', 'bin'), lib + ".dll")
|
||||
if path.exists(src_file):
|
||||
for targ in target_dirs:
|
||||
env.Install(targ, src_file)
|
||||
break
|
||||
handle_bundled_libs(".dll")
|
||||
# Extra: Microsoft redistributable libraries installer
|
||||
if 'msvc' in env["TOOLS"]:
|
||||
if path.exists("deps/VCRedistInstall.exe"):
|
||||
@@ -565,11 +583,41 @@ elif platform == "win32":
|
||||
else:
|
||||
print("WARNING: Cannot find installer for the MSVC redistributable libraries for your version of Visual Studio.")
|
||||
print("Please download it from Microsoft's website and place it at:")
|
||||
print(" deps/VCRedistInstall.exe")
|
||||
print(" deps/VCRedistInstall.exe")
|
||||
# Create it so its lack doesn't cause makensis to break
|
||||
# (Because the installer is an optional component.)
|
||||
os.makedirs("build/Blades of Exile", exist_ok=True)
|
||||
open("build/Blades of Exile/VCRedistInstall.exe", 'w').close()
|
||||
elif platform == "posix":
|
||||
targets = [
|
||||
"Blades of Exile",
|
||||
"BoE Character Editor",
|
||||
"BoE Scenario Editor",
|
||||
]
|
||||
def patchelf():
|
||||
to_patch = targets + [so for so in os.listdir("build/Blades of Exile") if '.so' in so]
|
||||
for targ in to_patch:
|
||||
subprocess.call(['patchelf', '--set-rpath', '.', targ], cwd='build/Blades of Exile')
|
||||
atexit.register(patchelf)
|
||||
bundled_libs += Split("""
|
||||
GL
|
||||
X11
|
||||
stdc++
|
||||
Xrandr
|
||||
Xcursor
|
||||
udev
|
||||
openal
|
||||
vorbisenc
|
||||
vorbisfile
|
||||
vorbis
|
||||
ogg
|
||||
FLAC
|
||||
freetype
|
||||
GLdispatch
|
||||
GLX
|
||||
xcb
|
||||
""")
|
||||
handle_bundled_libs(".so", "lib")
|
||||
|
||||
if env["package"]:
|
||||
if platform == "darwin":
|
||||
|
||||
@@ -76,6 +76,7 @@ Section "Blades of Exile" Section1
|
||||
File "${RELEASE_DIR}\Blades of Exile Scenarios\stealth.boes"
|
||||
File "${RELEASE_DIR}\Blades of Exile Scenarios\valleydy.boes"
|
||||
File "${RELEASE_DIR}\Blades of Exile Scenarios\zakhazi.boes"
|
||||
File "${RELEASE_DIR}\Blades of Exile Scenarios\tutorial.boes"
|
||||
!include data.nsi
|
||||
SetShellVarContext all
|
||||
CreateShortCut "$DESKTOP\Blades of Exile.lnk" "$INSTDIR\Blades of Exile.exe"
|
||||
@@ -243,6 +244,7 @@ Section Uninstall
|
||||
Delete "$INSTDIR\Blades of Exile Scenarios\stealth.boes"
|
||||
Delete "$INSTDIR\Blades of Exile Scenarios\valleydy.boes"
|
||||
Delete "$INSTDIR\Blades of Exile Scenarios\zakhazi.boes"
|
||||
Delete "$INSTDIR\Blades of Exile Scenarios\tutorial.boes"
|
||||
Delete "$INSTDIR\VCRedistInstall.exe"
|
||||
Delete "$INSTDIR\libsndfile-1.dll"
|
||||
Delete "$INSTDIR\sfml-audio-2.dll"
|
||||
|
||||
@@ -192,6 +192,7 @@
|
||||
<Xml Include="..\..\..\rsrc\dialogs\welcome.xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="..\..\..\src\dialogxml\dialogs\btnpanel.cpp" />
|
||||
<ClCompile Include="..\..\..\src\dialogxml\keycodes.cpp" />
|
||||
<ClCompile Include="..\..\..\src\dialogxml\dialogs\3choice.cpp" />
|
||||
<ClCompile Include="..\..\..\src\dialogxml\dialogs\choicedlog.cpp" />
|
||||
@@ -289,6 +290,7 @@
|
||||
<ItemGroup>
|
||||
<ClInclude Include="..\..\..\src\alchemy.hpp" />
|
||||
<ClInclude Include="..\..\..\src\damage.hpp" />
|
||||
<ClInclude Include="..\..\..\src\dialogxml\dialogs\btnpanel.hpp" />
|
||||
<ClInclude Include="..\..\..\src\dialogxml\keycodes.hpp" />
|
||||
<ClInclude Include="..\..\..\src\dialogxml\dialogs\3choice.hpp" />
|
||||
<ClInclude Include="..\..\..\src\dialogxml\dialogs\choicedlog.hpp" />
|
||||
@@ -505,6 +507,11 @@
|
||||
<Exec Command="$(SolutionDir)..\..\pkg\win\build-scen.bat $(SolutionDir)..\..\rsrc\scenarios\valleydy $(SolutionDir)..\..\rsrc\scenarios\valleydy.boes" />
|
||||
<Exec Command="$(SolutionDir)..\..\pkg\win\build-scen.bat $(SolutionDir)..\..\rsrc\scenarios\stealth $(SolutionDir)..\..\rsrc\scenarios\stealth.boes" />
|
||||
<Exec Command="$(SolutionDir)..\..\pkg\win\build-scen.bat $(SolutionDir)..\..\rsrc\scenarios\zakhazi $(SolutionDir)..\..\rsrc\scenarios\zakhazi.boes" />
|
||||
<<<<<<< HEAD
|
||||
<Exec Command='xcopy $(SolutionDir)..\..\rsrc\scenarios\custom "$(TargetDir)\Blades of Exile Scenarios\custom\" /S /Y' />
|
||||
=======
|
||||
<Exec Command="$(SolutionDir)..\..\pkg\win\build-scen.bat $(SolutionDir)..\..\rsrc\scenarios\tutorial $(SolutionDir)..\..\rsrc\scenarios\tutorial.boes" />
|
||||
>>>>>>> 25c8de44 (Visual studio package tutorial)
|
||||
</Target>
|
||||
<!--COPY FILES TO OUTPUT DIRECTORY-->
|
||||
<Target Name="CopyFiles" AfterTargets="BuildScenarios">
|
||||
@@ -567,4 +574,4 @@
|
||||
</PropertyGroup>
|
||||
<Error Condition="!Exists('..\packages\GitInfo.2.0.10\build\GitInfo.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\GitInfo.2.0.10\build\GitInfo.targets'))" />
|
||||
</Target>
|
||||
</Project>
|
||||
</Project>
|
||||
@@ -833,6 +833,9 @@
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\deps\fmtlib\src\format.cc" />
|
||||
<ClCompile Include="..\..\..\deps\fmtlib\src\os.cc" />
|
||||
<ClCompile Include="..\..\..\src\dialogxml\dialogs\btnpanel.cpp">
|
||||
<Filter>DialogXML\Dialogs</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="..\..\..\src\view_dialogs.hpp" />
|
||||
@@ -1095,8 +1098,11 @@
|
||||
<ClInclude Include="..\..\..\src\tools\profile.hpp">
|
||||
<Filter>Tools</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\src\dialogxml\dialogs\btnpanel.hpp">
|
||||
<Filter>DialogXML\Dialogs</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="packages.config" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
</Project>
|
||||
@@ -14,6 +14,7 @@
|
||||
"boost-chrono",
|
||||
"boost-math",
|
||||
"boost-spirit",
|
||||
"boost-process"
|
||||
"boost-process",
|
||||
"boost-locale"
|
||||
]
|
||||
}
|
||||
@@ -348,6 +348,7 @@
|
||||
<None Include="..\..\..\rsrc\dialogs\dialog.css" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="..\..\..\src\dialogxml\dialogs\btnpanel.cpp" />
|
||||
<ClCompile Include="..\..\..\src\dialogxml\keycodes.cpp" />
|
||||
<ClCompile Include="..\..\..\src\dialogxml\dialogs\3choice.cpp" />
|
||||
<ClCompile Include="..\..\..\src\dialogxml\dialogs\choicedlog.cpp" />
|
||||
@@ -392,6 +393,7 @@
|
||||
<ClCompile Include="..\..\..\src\fileio\xml-parser\tinyxmlerror.cpp" />
|
||||
<ClCompile Include="..\..\..\src\fileio\xml-parser\tinyxmlparser.cpp" />
|
||||
<ClCompile Include="..\..\..\src\gfx\gfxsheets.cpp" />
|
||||
<ClCompile Include="..\..\..\src\gfx\graphics.cpp" />
|
||||
<ClCompile Include="..\..\..\src\gfx\render_image.cpp" />
|
||||
<ClCompile Include="..\..\..\src\gfx\render_shapes.cpp" />
|
||||
<ClCompile Include="..\..\..\src\gfx\render_text.cpp" />
|
||||
@@ -447,6 +449,8 @@
|
||||
<ClCompile Include="..\..\..\deps\fmtlib\src\os.cc" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="..\..\..\src\dialogxml\dialogs\btnpanel.hpp" />
|
||||
<ClInclude Include="..\..\..\src\gfx\graphics.hpp" />
|
||||
<ClInclude Include="..\..\..\src\scenario\town_import.tpp" />
|
||||
<ClInclude Include="..\..\..\src\alchemy.hpp" />
|
||||
<ClInclude Include="..\..\..\src\damage.hpp" />
|
||||
@@ -567,6 +571,8 @@
|
||||
<Exec Command="$(SolutionDir)..\..\pkg\win\build-scen.bat $(SolutionDir)..\..\rsrc\scenarios\valleydy $(SolutionDir)..\..\rsrc\scenarios\valleydy.boes" />
|
||||
<Exec Command="$(SolutionDir)..\..\pkg\win\build-scen.bat $(SolutionDir)..\..\rsrc\scenarios\stealth $(SolutionDir)..\..\rsrc\scenarios\stealth.boes" />
|
||||
<Exec Command="$(SolutionDir)..\..\pkg\win\build-scen.bat $(SolutionDir)..\..\rsrc\scenarios\zakhazi $(SolutionDir)..\..\rsrc\scenarios\zakhazi.boes" />
|
||||
<Exec Command="$(SolutionDir)..\..\pkg\win\build-scen.bat $(SolutionDir)..\..\rsrc\scenarios\tutorial $(SolutionDir)..\..\rsrc\scenarios\tutorial.boes" />
|
||||
<Exec Command='xcopy $(SolutionDir)..\..\rsrc\scenarios\custom "$(TargetDir)\Blades of Exile Scenarios\custom\" /S /Y' />
|
||||
</Target>
|
||||
<!--COPY FILES TO OUTPUT DIRECTORY-->
|
||||
<Target Name="CopyFiles" AfterTargets="BuildScenarios">
|
||||
@@ -623,4 +629,4 @@
|
||||
</Copy>
|
||||
<Message Text="changed:@(ChangedScenarios)" Importance="high" />
|
||||
</Target>
|
||||
</Project>
|
||||
</Project>
|
||||
@@ -826,6 +826,12 @@
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\deps\fmtlib\src\format.cc" />
|
||||
<ClCompile Include="..\..\..\deps\fmtlib\src\os.cc" />
|
||||
<ClCompile Include="..\..\..\src\dialogxml\dialogs\btnpanel.cpp">
|
||||
<Filter>DialogXML\Dialogs</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\src\gfx\graphics.cpp">
|
||||
<Filter>Gfx</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="..\..\..\src\scenario\town_import.tpp">
|
||||
@@ -1081,5 +1087,11 @@
|
||||
<ClInclude Include="..\..\..\src\tools\profile.hpp">
|
||||
<Filter>Tools</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\src\dialogxml\dialogs\btnpanel.hpp">
|
||||
<Filter>DialogXML\Dialogs</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\src\gfx\graphics.hpp">
|
||||
<Filter>Gfx</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
</Project>
|
||||
@@ -14,6 +14,7 @@
|
||||
"boost-chrono",
|
||||
"boost-math",
|
||||
"boost-spirit",
|
||||
"boost-process"
|
||||
"boost-process",
|
||||
"boost-locale"
|
||||
]
|
||||
}
|
||||
@@ -66,6 +66,8 @@
|
||||
413AAF672D38A4A5002E9BF1 /* living.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 914698FB1A7362D900F20F5E /* living.cpp */; };
|
||||
413FE08F2CECFAFF000D97DC /* winutil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 413FE08E2CECFAFF000D97DC /* winutil.cpp */; };
|
||||
415EEEB02D5534A500B47408 /* prefs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 415EEEAF2D5534A500B47408 /* prefs.cpp */; };
|
||||
419889802E4541D10080B0FE /* btnpanel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4198897F2E4541D10080B0FE /* btnpanel.cpp */; };
|
||||
419889812E4541D10080B0FE /* btnpanel.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 4198897E2E4541D10080B0FE /* btnpanel.hpp */; };
|
||||
41E550542DEB8C2A00A7DF52 /* scen.undo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 41E550532DEB8C2A00A7DF52 /* scen.undo.cpp */; };
|
||||
91034D211B225E4A008F01C1 /* scen.appleevents.mm in Sources */ = {isa = PBXBuildFile; fileRef = 91034D201B225E49008F01C1 /* scen.appleevents.mm */; };
|
||||
911A14031B8FAFC600900FD9 /* town_read.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 91C2A6EC1B8FA91400346948 /* town_read.cpp */; };
|
||||
@@ -640,6 +642,8 @@
|
||||
41342CE92DFB872400E66BEB /* quest.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = quest.cpp; sourceTree = "<group>"; };
|
||||
413FE08E2CECFAFF000D97DC /* winutil.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = winutil.cpp; sourceTree = "<group>"; };
|
||||
415EEEAF2D5534A500B47408 /* prefs.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = prefs.cpp; sourceTree = "<group>"; };
|
||||
4198897E2E4541D10080B0FE /* btnpanel.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = btnpanel.hpp; sourceTree = "<group>"; };
|
||||
4198897F2E4541D10080B0FE /* btnpanel.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = btnpanel.cpp; sourceTree = "<group>"; };
|
||||
41E550522DEB8C1400A7DF52 /* scen.undo.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = scen.undo.hpp; sourceTree = "<group>"; };
|
||||
41E550532DEB8C2A00A7DF52 /* scen.undo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = scen.undo.cpp; sourceTree = "<group>"; };
|
||||
91034D201B225E49008F01C1 /* scen.appleevents.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = scen.appleevents.mm; sourceTree = "<group>"; };
|
||||
@@ -1159,6 +1163,8 @@
|
||||
91E128F41BC2077700C8BE1D /* pictchoice.hpp */,
|
||||
91E128F51BC2077700C8BE1D /* strchoice.hpp */,
|
||||
91E128F61BC2077700C8BE1D /* strdlog.hpp */,
|
||||
4198897E2E4541D10080B0FE /* btnpanel.hpp */,
|
||||
4198897F2E4541D10080B0FE /* btnpanel.cpp */,
|
||||
);
|
||||
path = dialogs;
|
||||
sourceTree = "<group>";
|
||||
@@ -1766,6 +1772,7 @@
|
||||
9149924C25913E3F00B5BE97 /* container.hpp in Headers */,
|
||||
9149924E25913E3F00B5BE97 /* led.hpp in Headers */,
|
||||
9170C5102D717F24009B6E7C /* scen.locpicker.hpp in Headers */,
|
||||
419889812E4541D10080B0FE /* btnpanel.hpp in Headers */,
|
||||
9143044B2970EDC1003A3967 /* keymods.hpp in Headers */,
|
||||
9149925025913E3F00B5BE97 /* ledgroup.hpp in Headers */,
|
||||
915473CE2C800AB000EB1C94 /* enchant.hpp in Headers */,
|
||||
@@ -2081,6 +2088,7 @@
|
||||
"$(SRCROOT)/../../rsrc/scenarios/valleydy",
|
||||
"$(SRCROOT)/../../rsrc/scenarios/stealth",
|
||||
"$(SRCROOT)/../../rsrc/scenarios/zakhazi",
|
||||
"$(SRCROOT)/../../rsrc/scenarios/tutorial",
|
||||
"$(SRCROOT)/../../rsrc/bases/cavebase",
|
||||
);
|
||||
name = "Pack Scenarios";
|
||||
@@ -2090,6 +2098,7 @@
|
||||
"$(BUILT_PRODUCTS_DIR)/Blades of Exile Scenarios/valleydy.boes",
|
||||
"$(BUILT_PRODUCTS_DIR)/Blades of Exile Scenarios/stealth.boes",
|
||||
"$(BUILT_PRODUCTS_DIR)/Blades of Exile Scenarios/zakhazi.boes",
|
||||
"$(BUILT_PRODUCTS_DIR)/Blades of Exile Scenarios/tutorial.boes",
|
||||
"$(BUILT_PRODUCTS_DIR)/Blades of Exile Base/cavebase.boes",
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
@@ -2217,6 +2226,7 @@
|
||||
91E128F11BC2076B00C8BE1D /* strdlog.cpp in Sources */,
|
||||
91CE248A1EA12866005BDCE4 /* utility.cpp in Sources */,
|
||||
91CE248C1EA12A96005BDCE4 /* render_text.cpp in Sources */,
|
||||
419889802E4541D10080B0FE /* btnpanel.cpp in Sources */,
|
||||
91CE248E1EA12AA3005BDCE4 /* render_shapes.cpp in Sources */,
|
||||
91A2480E2969CFD200B8D90F /* res_dialog.cpp in Sources */,
|
||||
91CE24921EA12ABD005BDCE4 /* gfxsheets.cpp in Sources */,
|
||||
|
||||
@@ -1884,6 +1884,7 @@
|
||||
"$(SRCROOT)/../../rsrc/scenarios/valleydy",
|
||||
"$(SRCROOT)/../../rsrc/scenarios/stealth",
|
||||
"$(SRCROOT)/../../rsrc/scenarios/zakhazi",
|
||||
"$(SRCROOT)/../../rsrc/scenarios/tutorial",
|
||||
);
|
||||
name = "Pack Scenarios";
|
||||
outputPaths = (
|
||||
@@ -1892,6 +1893,7 @@
|
||||
"$(BUILT_PRODUCTS_DIR)/Blades of Exile Scenarios/valleydy.boes",
|
||||
"$(BUILT_PRODUCTS_DIR)/Blades of Exile Scenarios/stealth.boes",
|
||||
"$(BUILT_PRODUCTS_DIR)/Blades of Exile Scenarios/zakhazi.boes",
|
||||
"$(BUILT_PRODUCTS_DIR)/Blades of Exile Scenarios/tutorial.boes",
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = /bin/sh;
|
||||
|
||||
@@ -55,8 +55,10 @@ scen_env.BuildScenario('#build/rsrc/scenarios/busywork.boes', 'scenarios/busywor
|
||||
scen_env.BuildScenario('#build/rsrc/scenarios/valleydy.boes', 'scenarios/valleydy/header.exs')
|
||||
scen_env.BuildScenario('#build/rsrc/scenarios/stealth.boes', 'scenarios/stealth/header.exs')
|
||||
scen_env.BuildScenario('#build/rsrc/scenarios/zakhazi.boes', 'scenarios/zakhazi/header.exs')
|
||||
scen_env.BuildScenario('#build/rsrc/scenarios/tutorial.boes', 'scenarios/tutorial/header.exs')
|
||||
|
||||
env.Install(path.join(install_dir, "Blades of Exile Scenarios"), Glob("#build/rsrc/scenarios/*.boes"))
|
||||
env.Install(path.join(install_dir, "Blades of Exile Scenarios"), "scenarios/custom")
|
||||
env.Install(path.join(install_dir, "Blades of Exile Base"), Glob("#build/rsrc/bases/*.boes"))
|
||||
|
||||
# Validate dialogs
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<!-- NOTE: This file should be updated to use relative positioning the next time it changes. -->
|
||||
<?xml-stylesheet href="dialog.xsl" type="text/xsl"?>
|
||||
<dialog defbtn='done' escbtn='done'>
|
||||
<pict name='pict' type='dlog' size='large' num='0' top='9' left='9'/>
|
||||
<pict name='pict' type='dlog' size='large' num='0' top='10' left='10'/>
|
||||
<text name='str1' framed='true' top='8' left='91' width='257' height='90'/>
|
||||
<button name='done' type='done' top='107' left='287'/>
|
||||
<button name='record' type='regular' def-key='r' top='107' left='8'>Record</button>
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<!-- NOTE: This file should be updated to use relative positioning the next time it changes. -->
|
||||
<?xml-stylesheet href="dialog.xsl" type="text/xsl"?>
|
||||
<dialog defbtn='done' escbtn='done'>
|
||||
<pict name='pict' type='dlog' size='large' num='0' top='9' left='9'/>
|
||||
<pict name='pict' type='dlog' size='large' num='0' top='10' left='10'/>
|
||||
<text name='title' framed='true' top='9' left='91' width='257' height='19'/>
|
||||
<text name='str1' framed='true' top='39' left='91' width='257' height='87'/>
|
||||
<button name='done' type='done' top='140' left='287'/>
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<!-- NOTE: This file should be updated to use relative positioning the next time it changes. -->
|
||||
<?xml-stylesheet href="dialog.xsl" type="text/xsl"?>
|
||||
<dialog defbtn='done' escbtn='done'>
|
||||
<pict name='pict' type='dlog' num='8' top='9' left='9'/>
|
||||
<pict name='pict' type='dlog' num='8' top='10' left='10'/>
|
||||
<text name='title' framed='true' top='9' left='55' width='257' height='19'/>
|
||||
<text name='str1' framed='true' top='39' left='55' width='257' height='87'/>
|
||||
<button name='done' type='done' top='140' left='251'/>
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<!-- NOTE: This file should be updated to use relative positioning the next time it changes. -->
|
||||
<?xml-stylesheet href="dialog.xsl" type="text/xsl"?>
|
||||
<dialog defbtn='done' escbtn='done'>
|
||||
<pict name='pict' type='dlog' num='8' top='9' left='9'/>
|
||||
<pict name='pict' type='dlog' num='8' top='10' left='10'/>
|
||||
<text name='str1' framed='true' top='8' left='55' width='257' height='90'/>
|
||||
<button name='done' type='done' top='107' left='251'/>
|
||||
<button name='record' type='regular' def-key='r' top='107' left='8'>Record</button>
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<!-- NOTE: This file should be updated to use relative positioning the next time it changes. -->
|
||||
<?xml-stylesheet href="dialog.xsl" type="text/xsl"?>
|
||||
<dialog defbtn='done' escbtn='done'>
|
||||
<pict name='pict' type='dlog' size='large' num='0' top='9' left='9'/>
|
||||
<pict name='pict' type='dlog' size='large' num='0' top='10' left='10'/>
|
||||
<text name='str1' framed='true' top='8' left='91' width='257' height='90'/>
|
||||
<text name='str2' framed='true' top='107' left='91' width='257' height='98'/>
|
||||
<button name='done' type='done' top='212' left='287'/>
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<!-- NOTE: This file should be updated to use relative positioning the next time it changes. -->
|
||||
<?xml-stylesheet href="dialog.xsl" type="text/xsl"?>
|
||||
<dialog defbtn='done' escbtn='done'>
|
||||
<pict name='pict' type='dlog' size='large' num='0' top='9' left='9'/>
|
||||
<pict name='pict' type='dlog' size='large' num='0' top='10' left='10'/>
|
||||
<text name='title' framed='true' top='9' left='91' width='257' height='19'/>
|
||||
<text name='str1' framed='true' top='39' left='91' width='257' height='87'/>
|
||||
<text name='str2' framed='true' top='136' left='91' width='257' height='93'/>
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<!-- NOTE: This file should be updated to use relative positioning the next time it changes. -->
|
||||
<?xml-stylesheet href="dialog.xsl" type="text/xsl"?>
|
||||
<dialog defbtn='done' escbtn='done'>
|
||||
<pict name='pict' type='dlog' num='8' top='9' left='9'/>
|
||||
<pict name='pict' type='dlog' num='8' top='10' left='10'/>
|
||||
<text name='title' framed='true' top='9' left='55' width='257' height='19'/>
|
||||
<text name='str1' framed='true' top='39' left='55' width='257' height='87'/>
|
||||
<text name='str2' framed='true' top='136' left='55' width='257' height='93'/>
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<!-- NOTE: This file should be updated to use relative positioning the next time it changes. -->
|
||||
<?xml-stylesheet href="dialog.xsl" type="text/xsl"?>
|
||||
<dialog defbtn='done' escbtn='done'>
|
||||
<pict name='pict' type='dlog' num='8' top='9' left='9'/>
|
||||
<pict name='pict' type='dlog' num='8' top='10' left='10'/>
|
||||
<text name='str1' framed='true' top='8' left='55' width='257' height='90'/>
|
||||
<text name='str2' framed='true' top='107' left='55' width='257' height='98'/>
|
||||
<button name='done' type='done' top='212' left='251'/>
|
||||
|
||||
@@ -4,16 +4,22 @@
|
||||
<dialog defbtn='done' escbtn='done'>
|
||||
<button name='done' type='done' top='341' left='319'/>
|
||||
<pict type='dlog' num='8' top='9' left='9'/>
|
||||
<text name='str1' framed='true' top='37' left='53' width='257' height='92'/>
|
||||
<text name='str2' framed='true' top='136' left='53' width='257' height='92'/>
|
||||
<text name='str3' framed='true' top='235' left='53' width='257' height='92'/>
|
||||
<pane name='pane1' framed='true' top='37' left='53' width='257' height='92'>
|
||||
<text name='str1' framed='true' top='37' left='53' width='257'/>
|
||||
</pane>
|
||||
<pane name='pane2' framed='true' top='136' left='53' width='257' height='92'>
|
||||
<text name='str2' framed='true' top='136' left='53' width='257'/>
|
||||
</pane>
|
||||
<pane name='pane3' framed='true' top='235' left='53' width='257' height='92'>
|
||||
<text name='str3' framed='true' top='235' left='53' width='257'/>
|
||||
</pane>
|
||||
<text size='large' top='9' left='53' width='257' height='19'>Encounter Notes:</text>
|
||||
<button name='left' type='left' def-key='left' top='340' left='48'/>
|
||||
<button name='right' type='right' def-key='right' top='340' left='111'/>
|
||||
<!--
|
||||
TODO: I like the idea of assigning the delete key to this...
|
||||
-->
|
||||
<button name='del1' type='regular' top='109' left='319'>Delete</button>
|
||||
<button name='del2' type='regular' top='208' left='319'>Delete</button>
|
||||
<button name='del3' type='regular' top='307' left='319'>Delete</button>
|
||||
<button name='del1' type='regular' top='109' left='329'>Delete</button>
|
||||
<button name='del2' type='regular' top='208' left='329'>Delete</button>
|
||||
<button name='del3' type='regular' top='307' left='329'>Delete</button>
|
||||
</dialog>
|
||||
|
||||
38
rsrc/dialogs/choose-pict-labeled.xml
Normal file
38
rsrc/dialogs/choose-pict-labeled.xml
Normal file
@@ -0,0 +1,38 @@
|
||||
<?xml version='1.0' encoding='UTF-8' standalone='no'?>
|
||||
<!-- NOTE: This file should be updated to use relative positioning the next time it changes. -->
|
||||
<?xml-stylesheet href="dialog.xsl" type="text/xsl"?>
|
||||
<dialog defbtn='done' escbtn='cancel'>
|
||||
<pict name='mainpic' type='dlog' num='16' top='6' left='6'/>
|
||||
<text name='prompt' size='large' top='6' left='50' width='248' height='14'>Select a graphic:</text>
|
||||
<group name='group'>
|
||||
<led name='led1' state='off' top='29' left='55' width='57' height='36'/>
|
||||
<led name='led2' state='off' top='74' left='55' width='57' height='36'/>
|
||||
<led name='led3' state='off' top='119' left='55' width='57' height='36'/>
|
||||
<led name='led4' state='off' top='164' left='55' width='57' height='36'/>
|
||||
<led name='led5' state='off' top='209' left='55' width='57' height='36'/>
|
||||
<led name='led6' state='off' top='254' left='55' width='57' height='36'/>
|
||||
<led name='led7' state='off' top='29' left='251' width='57' height='36'/>
|
||||
<led name='led8' state='off' top='74' left='251' width='57' height='36'/>
|
||||
<led name='led9' state='off' top='119' left='251' width='57' height='36'/>
|
||||
<led name='led10' state='off' top='164' left='251' width='57' height='36'/>
|
||||
<led name='led11' state='off' top='209' left='251' width='57' height='36'/>
|
||||
<led name='led12' state='off' top='254' left='251' width='57' height='36'/>
|
||||
</group>
|
||||
<pict name='pic1' type='ter' num='0' top='29' left='76'/>
|
||||
<pict name='pic2' type='ter' num='1' top='74' left='76'/>
|
||||
<pict name='pic3' type='ter' num='2' top='119' left='76'/>
|
||||
<pict name='pic4' type='ter' num='3' top='164' left='76'/>
|
||||
<pict name='pic5' type='ter' num='4' top='209' left='76'/>
|
||||
<pict name='pic6' type='ter' num='5' top='254' left='76'/>
|
||||
<pict name='pic7' type='ter' num='18' top='29' left='272'/>
|
||||
<pict name='pic8' type='ter' num='19' top='74' left='272'/>
|
||||
<pict name='pic9' type='ter' num='20' top='119' left='272'/>
|
||||
<pict name='pic10' type='ter' num='21' top='164' left='272'/>
|
||||
<pict name='pic11' type='ter' num='22' top='209' left='272'/>
|
||||
<pict name='pic12' type='ter' num='23' top='254' left='272'/>
|
||||
<text name='help' top='294' left='6' width='422' height='16'>Click button to left of graphic to select. Use arrows to change pages.</text>
|
||||
<button name='left' type='left' top='314' left='6' def-key='left'/>
|
||||
<button name='right' type='right' top='314' left='69' def-key='right'/>
|
||||
<button name='done' type='done' top='314' left='393'/>
|
||||
<button name='cancel' type='regular' top='314' left='322'>Cancel</button>
|
||||
</dialog>
|
||||
@@ -1,7 +1,7 @@
|
||||
<?xml version='1.0' encoding='UTF-8' standalone='no'?>
|
||||
<!-- NOTE: This file should be updated to use relative positioning the next time it changes. -->
|
||||
<?xml-stylesheet href="dialog.xsl" type="text/xsl"?>
|
||||
<dialog defbtn='no'>
|
||||
<dialog defbtn='yes' escbtn='no'>
|
||||
<button name='no' type='regular' def-key='n' top='39' left='178'>No</button>
|
||||
<button name='yes' type='regular' def-key='y' top='39' left='244'>Yes</button>
|
||||
<pict type='dlog' num='11' top='9' left='9'/>
|
||||
|
||||
@@ -27,8 +27,10 @@
|
||||
<button name='choose-bank1' type='regular' anchor='bank1' relative='pos pos-in' top='-4' left='8'>Choose</button>
|
||||
<field name='bank2' type='int' top='332' left='359' width='110' height='16'/>
|
||||
<button name='choose-bank2' type='regular' anchor='bank2' relative='pos pos-in' top='-4' left='8'>Choose</button>
|
||||
<button name='left' type='left' def-key='left' top='358' left='50'/>
|
||||
<button name='right' type='right' def-key='right' top='358' left='115'/>
|
||||
<button name='cancel' type='regular' top='358' left='322'>Cancel</button>
|
||||
<button name='okay' type='regular' top='358' left='387'>OK</button>
|
||||
|
||||
<button name='preview' type='regular' top='358' left='387'>Preview</button>
|
||||
<button name='left' type='left' def-key='left' top='382' left='50'/>
|
||||
<button name='right' type='right' def-key='right' top='382' left='115'/>
|
||||
<button name='cancel' type='regular' top='382' left='322'>Cancel</button>
|
||||
<button name='okay' type='regular' top='382' left='387'>OK</button>
|
||||
</dialog>
|
||||
|
||||
@@ -5,19 +5,20 @@
|
||||
<field name='name' top='57' left='195' width='252' height='16'/>
|
||||
<field name='descr' top='84' left='195' width='252' height='104'/>
|
||||
<field name='spec' type='int' top='249' left='268' width='87' height='16'/>
|
||||
<button name='okay' type='regular' top='288' left='397'>OK</button>
|
||||
<pict type='dlog' num='16' top='8' left='8'/>
|
||||
<text size='large' top='6' left='50' width='256' height='17'>Edit Special Items</text>
|
||||
<text top='58' left='50' width='132' height='14'>Name of Special Item:</text>
|
||||
<text top='85' left='50' width='118' height='27'>Special Item Description:</text>
|
||||
<text top='243' left='51' width='208' height='28'>Scenario special node to be called when item is used:</text>
|
||||
<button name='cancel' type='regular' top='288' left='332'>Cancel</button>
|
||||
<button name='clear' type='large' top='15' left='329'>Clear Special</button>
|
||||
<button name='edit-spec' type='large' top='246' left='363'>Create/Edit</button>
|
||||
<led name='start-with' state='off' top='198' left='50'>Party starts scen. with item</led>
|
||||
<led name='usable' state='off' top='218' left='50'>Special item can be used</led>
|
||||
<text top='29' left='50' width='136' height='14'>Editing special item:</text>
|
||||
<text name='num' top='29' left='190' width='39' height='14'/>
|
||||
<button name='left' type='left' top='288' left='9'/>
|
||||
<button name='right' type='right' top='288' left='72'/>
|
||||
<button name='preview' type='regular' top='288' left='397'>Preview</button>
|
||||
<button name='left' type='left' top='312' left='9'/>
|
||||
<button name='right' type='right' top='312' left='72'/>
|
||||
<button name='cancel' type='regular' top='312' left='332'>Cancel</button>
|
||||
<button name='okay' type='regular' top='312' left='397'>OK</button>
|
||||
</dialog>
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<text name='title' size='large' top='6' left='50' width='158' height='16'>Edit Special Node</text>
|
||||
<text top='8' left='222' width='90' height='14'>Node number:</text>
|
||||
<text name='num' top='8' left='314' width='38' height='14'/>
|
||||
<text top='147' left='469' width='125' height='124'>
|
||||
<text name='tip' top='147' left='519' width='125'>
|
||||
Enter properties for this special encounter node.
|
||||
For a detailed description of how this window works, see the documentation.
|
||||
</text>
|
||||
@@ -18,6 +18,7 @@
|
||||
<button name='town' type='large' top='49' left='356'>Town Specs</button>
|
||||
<button name='out' type='large' top='73' left='356'>Out Specs</button>
|
||||
<button name='rect' type='large' top='49' left='483'>Rect Specs</button>
|
||||
<button name='all' type='large' top='73' left='483'>All</button>
|
||||
|
||||
|
||||
<text size='large' top='28' left='50' width='158' height='16'>Special Type:</text>
|
||||
@@ -29,11 +30,13 @@
|
||||
<text name='sdf1-lbl' framed='true' top='121' left='22' width='220' height='15'/>
|
||||
<field name='sdf1' type='int' top='120' left='254' width='51' height='16'/>
|
||||
<button name='sdf1-edit' type='tiny' top='106' left='272'/>
|
||||
<button name='sdf1-edit2' type='tiny' relative='pos pos-in' rel-anchor='prev' top='0' left='4'>Choose</button>
|
||||
<led name='sdf1-toggle' top='106' left='272'/>
|
||||
|
||||
<text name='sdf2-lbl' framed='true' top='121' left='317' width='176' height='16'/>
|
||||
<field name='sdf2' type='int' top='120' left='510' width='51' height='16'/>
|
||||
<button name='sdf2-edit' type='tiny' top='106' left='528'/>
|
||||
<button name='sdf2-edit2' type='tiny' relative='pos pos-in' rel-anchor='prev' top='0' left='4'>Choose</button>
|
||||
<led name='sdf2-toggle' top='106' left='528'/>
|
||||
|
||||
|
||||
@@ -41,26 +44,31 @@
|
||||
<text name='msg1-lbl' framed='true' top='164' left='22' width='238' height='15'/>
|
||||
<field name='msg1' type='int' top='163' left='270' width='51' height='16'/>
|
||||
<button name='msg1-edit' type='large' top='161' left='329'>Create/Edit</button>
|
||||
<button name='msg1-edit2' type='regular' relative='pos pos-in' rel-anchor='prev' top='0' left='4'>Choose</button>
|
||||
<led name='msg1-toggle' top='167' left='329'/>
|
||||
|
||||
<text name='msg2-lbl' framed='true' top='188' left='22' width='238' height='15'/>
|
||||
<field name='msg2' type='int' top='187' left='270' width='51' height='16'/>
|
||||
<button name='msg2-edit' type='large' top='185' left='329'>Create/Edit</button>
|
||||
<button name='msg2-edit2' type='regular' relative='pos pos-in' rel-anchor='prev' top='0' left='4'>Choose</button>
|
||||
<led name='msg2-toggle' top='191' left='329'/>
|
||||
|
||||
<text name='msg3-lbl' framed='true' top='212' left='22' width='238' height='15'/>
|
||||
<field name='msg3' type='int' top='211' left='270' width='51' height='16'/>
|
||||
<button name='msg3-edit' type='large' top='209' left='329'>Create/Edit</button>
|
||||
<button name='msg3-edit2' type='regular' relative='pos pos-in' rel-anchor='prev' top='0' left='4'>Choose</button>
|
||||
<led name='msg3-toggle' top='215' left='329'/>
|
||||
|
||||
<text name='pict-lbl' framed='true' top='236' left='22' width='238' height='15'/>
|
||||
<field name='pict' type='int' top='235' left='270' width='51' height='16'/>
|
||||
<button name='pict-edit' type='large' top='233' left='329'>Choose</button>
|
||||
<button name='pict-edit2' type='regular' relative='pos pos-in' rel-anchor='prev' top='0' left='4'>Choose</button>
|
||||
<led name='pict-toggle' top='239' left='329'/>
|
||||
|
||||
<text name='pictype-lbl' framed='true' top='260' left='22' width='238' height='15'/>
|
||||
<field name='pictype' type='int' top='259' left='270' width='51' height='16'/>
|
||||
<button name='pictype-edit' type='large' top='257' left='329'>Choose</button>
|
||||
<button name='pictype-edit2' type='regular' relative='pos pos-in' rel-anchor='prev' top='0' left='4'>Choose</button>
|
||||
<led name='pictype-toggle' top='263' left='329'/>
|
||||
|
||||
|
||||
@@ -68,16 +76,19 @@
|
||||
<text name='x1a-lbl' framed='true' top='302' left='22' width='238' height='15'/>
|
||||
<field name='x1a' type='int' top='301' left='270' width='51' height='16'/>
|
||||
<button name='x1a-edit' type='large' top='298' left='330'>Choose</button>
|
||||
<button name='x1a-edit2' type='regular' relative='pos pos-in' rel-anchor='prev' top='0' left='4'>Choose</button>
|
||||
<led name='x1a-toggle' top='304' left='330'/>
|
||||
|
||||
<text name='x1b-lbl' framed='true' top='326' left='22' width='238' height='15'/>
|
||||
<field name='x1b' type='int' top='325' left='270' width='51' height='16'/>
|
||||
<button name='x1b-edit' type='large' top='322' left='330'>Create/Edit</button>
|
||||
<button name='x1b-edit2' type='regular' relative='pos pos-in' rel-anchor='prev' top='0' left='4'>Choose</button>
|
||||
<led name='x1b-toggle' top='328' left='330'/>
|
||||
|
||||
<text name='x1c-lbl' framed='true' top='350' left='22' width='238' height='15'/>
|
||||
<field name='x1c' type='int' top='349' left='270' width='51' height='16'/>
|
||||
<button name='x1c-edit' type='large' top='346' left='330'>Create/Edit</button>
|
||||
<button name='x1c-edit2' type='regular' relative='pos pos-in' rel-anchor='prev' top='0' left='4'>Choose</button>
|
||||
<led name='x1c-toggle' top='352' left='330'/>
|
||||
|
||||
|
||||
@@ -85,16 +96,19 @@
|
||||
<text name='x2a-lbl' framed='true' top='394' left='22' width='238' height='15'/>
|
||||
<field name='x2a' type='int' top='394' left='270' width='51' height='16'/>
|
||||
<button name='x2a-edit' type='large' top='391' left='330'>Choose</button>
|
||||
<button name='x2a-edit2' type='regular' relative='pos pos-in' rel-anchor='prev' top='0' left='4'>Choose</button>
|
||||
<led name='x2a-toggle' top='397' left='330'/>
|
||||
|
||||
<text name='x2b-lbl' framed='true' top='419' left='22' width='238' height='15'/>
|
||||
<field name='x2b' type='int' top='418' left='270' width='51' height='16'/>
|
||||
<button name='x2b-edit' type='large' top='416' left='330'>Create/Edit</button>
|
||||
<button name='x2b-edit2' type='regular' relative='pos pos-in' rel-anchor='prev' top='0' left='4'>Choose</button>
|
||||
<led name='x2b-toggle' top='422' left='330'/>
|
||||
|
||||
<text name='x2c-lbl' framed='true' top='443' left='22' width='238' height='15'/>
|
||||
<field name='x2c' type='int' top='442' left='270' width='51' height='16'/>
|
||||
<button name='x2c-edit' type='large' top='440' left='330'>Create/Edit</button>
|
||||
<button name='x2c-edit2' type='regular' relative='pos pos-in' rel-anchor='prev' top='0' left='4'>Choose</button>
|
||||
<led name='x2c-toggle' top='446' left='330'/>
|
||||
|
||||
|
||||
@@ -102,6 +116,7 @@
|
||||
<text name='jump-lbl' framed='true' top='472' left='99' width='182' height='14'/>
|
||||
<field name='jump' type='int' top='471' left='291' width='52' height='15'/>
|
||||
<button name='jump-edit' type='large' top='468' left='349'>Create/Edit</button>
|
||||
<button name='jump-edit2' type='regular' relative='pos pos-in' rel-anchor='prev' top='0' left='4'>Choose</button>
|
||||
<led name='jump-toggle' top='474' left='349'/>
|
||||
|
||||
<button name='preview-dialog' type='regular' top='470' left='522'>Preview</button>
|
||||
@@ -109,4 +124,31 @@
|
||||
<button name='okay' type='regular' top='494' left='522'>OK</button>
|
||||
<button name='cancel' type='regular' top='494' left='456'>Cancel</button>
|
||||
<button name='back' type='large' top='494' left='10'>Go Back</button>
|
||||
|
||||
<text name='cb' relative='pos-in pos' anchor='tip' top='8' left='0'>Called By</text>
|
||||
<text relative='pos-in pos' anchor='tip' top='8' left='100'>Calls</text>
|
||||
<!-- There is NO limit to how many things could call a node. Only the designor's sanity.
|
||||
But let's hope this is enough for most cases. -->
|
||||
<button name='calledby0' type='tiny' relative='pos-in pos' anchor='cb' top='2' left='0'/>
|
||||
<button name='calledby1' type='tiny' relative='pos-in pos' rel-anchor='prev' top='4' left='0'/>
|
||||
<button name='calledby2' type='tiny' relative='pos-in pos' rel-anchor='prev' top='4' left='0'/>
|
||||
<button name='calledby3' type='tiny' relative='pos-in pos' rel-anchor='prev' top='4' left='0'/>
|
||||
<button name='calledby4' type='tiny' relative='pos-in pos' rel-anchor='prev' top='4' left='0'/>
|
||||
<button name='calledby5' type='tiny' relative='pos-in pos' rel-anchor='prev' top='4' left='0'/>
|
||||
<button name='calledby6' type='tiny' relative='pos-in pos' rel-anchor='prev' top='4' left='0'/>
|
||||
<button name='calledby7' type='tiny' relative='pos-in pos' rel-anchor='prev' top='4' left='0'/>
|
||||
<button name='calledby8' type='tiny' relative='pos-in pos' rel-anchor='prev' top='4' left='0'/>
|
||||
<button name='calledby9' type='tiny' relative='pos-in pos' rel-anchor='prev' top='4' left='0'/>
|
||||
<button name='calledby10' type='tiny' relative='pos-in pos' rel-anchor='prev' top='4' left='0'/>
|
||||
<button name='calledby11' type='tiny' relative='pos-in pos' rel-anchor='prev' top='4' left='0'/>
|
||||
<button name='calledby12' type='tiny' relative='pos-in pos' rel-anchor='prev' top='4' left='0'/>
|
||||
<button name='calledby13' type='tiny' relative='pos-in pos' rel-anchor='prev' top='4' left='0'/>
|
||||
<!-- There is a limit to how many nodes a node can call. I think it's 3, for the
|
||||
if-elseif-else conditionals. -->
|
||||
<button name='calls0' type='tiny' relative='pos-in pos' anchor='cb' top='2' left='100'/>
|
||||
<button name='calls1' type='tiny' relative='pos-in pos' rel-anchor='prev' top='4' left='0'/>
|
||||
<button name='calls2' type='tiny' relative='pos-in pos' rel-anchor='prev' top='4' left='0'/>
|
||||
<button name='calls3' type='tiny' relative='pos-in pos' rel-anchor='prev' top='4' left='0'/>
|
||||
|
||||
<text name='tooltip' framed='true' ellipsis='true' width='260' height='16' relative='neg pos' anchor='calledby13' top='4' left='20'></text>
|
||||
</dialog>
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
<?xml version='1.0' encoding='UTF-8' standalone='no'?>
|
||||
<!-- NOTE: This file should be updated to use relative positioning the next time it changes. -->
|
||||
<?xml-stylesheet href="dialog.xsl" type="text/xsl"?>
|
||||
<dialog defbtn='okay' escbtn='cancel'>
|
||||
<pict type='dlog' num='16' top='6' left='6'/>
|
||||
@@ -7,14 +6,42 @@
|
||||
<text top='36' left='152' width='80' height='16'>Sheet Number:</text>
|
||||
<text name='num' top='36' left='242' width='40' height='16'/>
|
||||
<pict name='sheet' framed='true' scaled='true' type='full' num='0' top='54' left='12' width='280' height='360'/>
|
||||
|
||||
<!-- Icon grid segments -->
|
||||
<tilemap name='zrows' anchor='sheet' relative='pos-in pos-in' top='0' left='0' rows='11' cols='10' framed='false'>
|
||||
<line name='zrow' left='0' top='0' width='28' height='0'/>
|
||||
<text height='36' left='0' top='0' />
|
||||
</tilemap>
|
||||
<tilemap name='zcols' anchor='sheet' relative='pos-in pos-in' top='0' left='0' rows='10' cols='11' framed='false'>
|
||||
<line name='zcol' left='0' top='0' width='0' height='36'/>
|
||||
<text width='28' left='0' top='0' />
|
||||
</tilemap>
|
||||
|
||||
<!-- Whole-sheet operations -->
|
||||
<button name='copy' type='regular' def-key='ctrl c' top='54' left='304'>Copy</button>
|
||||
<button name='paste' type='regular' def-key='ctrl v' top='80' left='304'>Paste</button>
|
||||
<button name='open' type='regular' def-key='ctrl o' top='106' left='304'>Import</button>
|
||||
<button name='save' type='regular' def-key='ctrl s' top='132' left='304'>Export</button>
|
||||
<button name='del' type='regular' def-key='ctrl x' top='158' left='304'>Delete</button>
|
||||
<button name='paste' type='regular' def-key='ctrl v' relative='pos-in pos-in' rel-anchor='prev' top='26' left='0'>Paste</button>
|
||||
<button name='edit' type='regular' relative='pos-in pos-in' rel-anchor='prev' top='26' left='0'>Edit</button>
|
||||
<button name='reload' type='regular' relative='pos-in pos-in' rel-anchor='prev' top='26' left='0'>Reload</button>
|
||||
<button name='open' type='regular' def-key='ctrl o' relative='pos-in pos-in' rel-anchor='prev' top='26' left='0'>Import</button>
|
||||
<button name='save' type='regular' def-key='ctrl s' relative='pos-in pos-in' rel-anchor='prev' top='26' left='0'>Export</button>
|
||||
<button name='del' type='regular' def-key='ctrl x' relative='pos-in pos-in' rel-anchor='prev' top='26' left='0'>Delete</button>
|
||||
|
||||
<!-- Icon operations -->
|
||||
<text name='icon-head' relative='pos-in pos' rel-anchor='prev' top='5' left='0'>Selected icons:</text>
|
||||
<text name='icon-min' relative='pos-in pos' rel-anchor='prev' top='2' left='0' width='30' framed='true'>0</text>
|
||||
<text relative='pos pos-in' rel-anchor='prev' top='0' left='0'>-</text>
|
||||
<text name='icon-max' relative='pos pos-in' rel-anchor='prev' top='0' left='0' width='30' framed='true'>0</text>
|
||||
|
||||
<button name='icon-terr' type='tiny' text-size='9' relative='pos-in pos' anchor='icon-min' top='2' left='0'>Import Terrain</button>
|
||||
<button name='icon-terr-anim' type='tiny' text-size='9' relative='pos-in pos' rel-anchor='prev' top='2' left='0'>Import Animated Terrain</button>
|
||||
<button name='strip-terr' type='tiny' text-size='9' relative='pos-in pos' rel-anchor='prev' top='2' left='0'>Strip Terrain Background</button>
|
||||
<field name='diff-threshold' relative='pos-in pos' rel-anchor='prev' top='2' left='0' width='40' height='12' type='uint'>0</field>
|
||||
<button name='add-terr' type='tiny' text-size='9' relative='pos-in pos' rel-anchor='prev' top='2' left='0'>Add Terrain Background</button>
|
||||
|
||||
<button name='left' type='left' def-key='left' top='426' left='20'/>
|
||||
<button name='right' type='right' def-key='right' top='426' left='85'/>
|
||||
<button name='new' type='regular' def-key='ctrl n' top='426' left='162'>New</button>
|
||||
|
||||
<button name='cancel' type='regular' top='426' left='239'>Cancel</button>
|
||||
<button name='okay' type='regular' top='426' left='304'>OK</button>
|
||||
</dialog>
|
||||
|
||||
@@ -2,34 +2,19 @@
|
||||
<!-- NOTE: This file should be updated to use relative positioning the next time it changes. -->
|
||||
<?xml-stylesheet href="dialog.xsl" type="text/xsl"?>
|
||||
<dialog defbtn='okay' escbtn='okay'>
|
||||
<!--
|
||||
TODO: This dialog contains out-of-date information
|
||||
-->
|
||||
<button name='okay' type='regular' top='284' left='403'>OK</button>
|
||||
<text top='4' left='50' width='312' height='16'>BLADES OF EXILE - DISTRIBUTING YOUR SCENARIO</text>
|
||||
<pict type='dlog' num='16' top='6' left='6'/>
|
||||
<text top='22' left='50' width='413' height='56'>
|
||||
<text top='22' left='50' width='413'>
|
||||
When you've completed your scenario, you probably want to give other people the chance to play through it.
|
||||
It's a big kick letting other people run around in your own fantasy world, get stuck at your puzzles, and kill your creations.
|
||||
</text>
|
||||
<text top='79' left='50' width='414' height='54'>
|
||||
The easiest way to release a scenario is to send it over to Spiderweb Software.
|
||||
Go to www.spidweb.com.
|
||||
There's a scenario upload area there.
|
||||
Alternately, mail it to us on disk (PO Box 85659, Seattle, WA 98145).
|
||||
<text top='4' left='0' width='414' relative='pos-in pos' rel-anchor='prev'>
|
||||
The easiest way to release a scenario is to send it to NQNStudios. (nqn AT fastmail DOT com)<br/>
|
||||
<br/>
|
||||
Alternately, you can upload it as a game on itch.io, then share the link with the Blades of Exile: Itch Edition
|
||||
community and/or the Spiderweb Software message board.
|
||||
</text>
|
||||
<text top='134' left='50' width='412' height='40'>
|
||||
Before you send a scenario, however, be sure to read the License Agreement (in the file Blades of Exile License).
|
||||
It says a lot of big no-no's and describes your (and our) rights for your scenario.
|
||||
</text>
|
||||
<text top='175' left='50' width='418' height='54'>
|
||||
Also look for information on the Blades of Exile Scenario Contest.
|
||||
Your scenario, if really good, could win you products or a hefty chunk of money.
|
||||
If you think your scenario is good enough, be sure to send it in!
|
||||
</text>
|
||||
<text top='230' left='50' width='418' height='52'>
|
||||
Finally, if your scenario is really, really good, we might like to sell it as a stand-alone.
|
||||
If we're interested, you can actually make money from your work!
|
||||
To take a shot at this, just send us your scenario before releasing it.
|
||||
</text>
|
||||
<text top='4' left='50' width='312' height='16'>BLADES OF EXILE - DISTRIBUTING YOUR SCENARIO</text>
|
||||
<text top='4' left='0' relative='pos-in pos' rel-anchor='prev' colour='link'>https://nqn.itch.io/blades-of-exile/community</text>
|
||||
<text top='4' left='0' relative='pos-in pos' rel-anchor='prev' colour='link'>https://spiderwebforums.ipbhost.com/forum/12-blades-of-exile/</text>
|
||||
<button name='okay' type='regular' relative='abs pos' rel-anchor='prev' top='4' left='403'>OK</button>
|
||||
</dialog>
|
||||
|
||||
@@ -2,33 +2,38 @@
|
||||
<!-- NOTE: This file should be updated to use relative positioning the next time it changes. -->
|
||||
<?xml-stylesheet href="dialog.xsl" type="text/xsl"?>
|
||||
<dialog defbtn='okay' escbtn='okay'>
|
||||
<!--
|
||||
TODO: This dialog may contain out-of-date information
|
||||
-->
|
||||
<button name='okay' type='regular' top='288' left='403'>OK</button>
|
||||
<pict type='dlog' num='16' top='6' left='6'/>
|
||||
<text top='22' left='50' width='413' height='52'>
|
||||
<text top='4' left='50' width='312' height='16'>BLADES OF EXILE - TESTING YOUR SCENARIO</text>
|
||||
<text top='22' left='50' width='413'>
|
||||
If you want other people to play your scenario, it is vitally important that you test it.
|
||||
Otherwise, lots of people might waste lots of hours playing a scenairo that is unwinnable or otherwise doesn't work.
|
||||
Otherwise, lots of people might waste lots of hours playing a scenario that is unwinnable or otherwise doesn't work.
|
||||
</text>
|
||||
<text top='75' left='50' width='414' height='54'>
|
||||
To run your scenario, copy it into the Blades of Exile Scenarios folder and start it using the Custom Scenario button on the game title screen.
|
||||
Play from your scenario from start to finish, and, if possible, have friends play it too.
|
||||
<text top='4' left='0' relative='pos-in pos' rel-anchor='prev' width='414'>
|
||||
To run your scenario, copy it into the Blades of Exile Scenarios folder and start it using the Start Scenario button on the game title screen.
|
||||
</text>
|
||||
<text top='130' left='50' width='412' height='53'>
|
||||
<text top='4' left='0' relative='pos-in pos' rel-anchor='prev' width='414'>
|
||||
You can also quickly launch your scenario using one of the Launch options in the Scenario menu of the editor.
|
||||
In the editor preferences menu, you can set a save file to be used as your debug party.
|
||||
</text>
|
||||
<text top='4' left='0' relative='pos-in pos' rel-anchor='prev' width='414'>
|
||||
When testing your scenario, one useful feature is debug mode.
|
||||
While playing the game, type 'D'.
|
||||
This will put you in Debug Mode.
|
||||
Monsters will no longer move or attack you, and you will be able to play much faster.
|
||||
Type '?' in debug mode for a list of many other quick actions you can perform to help with testing.
|
||||
</text>
|
||||
<text top='184' left='50' width='417' height='54'>
|
||||
When you make a change in a town, before testing it, be sure to leave the town and type '>'.
|
||||
<text top='4' left='0' relative='pos-in pos' rel-anchor='prev' width='414'>
|
||||
When you make a change in a town, before testing it, be sure to leave the town and type '>' in debug mode.
|
||||
This causes the game to forget everything you've done in that town.
|
||||
If you don't do this, your corrections may not be remembered properly.
|
||||
</text>
|
||||
<text top='239' left='50' width='418' height='41'>
|
||||
<text top='4' left='0' relative='pos-in pos' rel-anchor='prev' width='414'>
|
||||
Finally, if you edit your scenario while playing in it, whenever you save a change go back to the game and reload your save file.
|
||||
Otherwise, the game may not read the scenario data properly and crash.
|
||||
</text>
|
||||
<text top='4' left='50' width='312' height='16'>BLADES OF EXILE - TESTING YOUR SCENARIO</text>
|
||||
|
||||
<text top='4' left='0' relative='pos-in pos' rel-anchor='prev' width='414'>
|
||||
Before distributing your scenario, Playtest it from start to finish, and, if possible, have friends play it too!
|
||||
</text>
|
||||
<button name='okay' type='regular' relative='abs pos' rel-anchor='prev' top='4' left='403'>OK</button>
|
||||
</dialog>
|
||||
|
||||
@@ -7,6 +7,6 @@
|
||||
<button name='done' type='done' top='202' left='199'/>
|
||||
<button name='left' type='left' def-key='left' top='202' left='55'/>
|
||||
<button name='right' type='right' def-key='right' top='202' left='124'/>
|
||||
<text name='title' size='large' top='17' left='55' width='179' height='16'/>
|
||||
<text name='title' size='large' top='17' left='55' width='179' height='40'/>
|
||||
<text name='str' framed='true' top='55' left='17' width='238' height='129'/>
|
||||
</dialog>
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
<?xml-stylesheet href="dialog.xsl" type="text/xsl"?>
|
||||
<dialog escbtn='cancel'>
|
||||
<text size='large' top='9' left='130' width='126' height='17'>Start a Scenario:</text>
|
||||
<text top='9' left='240' width='190' height='40' name='tooltip'></text>
|
||||
<stack name='list'>
|
||||
<page>
|
||||
<!-- Prefab scenarios -->
|
||||
@@ -35,15 +36,33 @@
|
||||
<page default='true' template='scenarios'>
|
||||
<!-- Custom scenarios -->
|
||||
<pict type='dlog' num='16' top='10' left='10'/>
|
||||
|
||||
<pict name='pic1' type='scen' num='0' top='58' left='62'/>
|
||||
<text name='desc1' framed='true' top='34' left='104' width='292' height='80'/>
|
||||
<text outline='double' name='start1' top='32' left='59' width='342' height='84'/>
|
||||
<pict name='tag1-1' type='item' size='small' num='0' top='95' left='110'/>
|
||||
<pict name='tag1-2' type='item' size='small' num='0' top='95' left='134'/>
|
||||
<pict name='tag1-3' type='item' size='small' num='0' top='95' left='158'/>
|
||||
<pict name='tag1-4' type='item' size='small' num='0' top='95' left='182'/>
|
||||
<pict name='tag1-5' type='item' size='small' num='0' top='95' left='206'/>
|
||||
|
||||
<pict name='pic2' type='scen' num='0' top='145' left='62'/>
|
||||
<text name='desc2' framed='true' top='121' left='104' width='292' height='80'/>
|
||||
<text outline='double' name='start2' top='118' left='59' width='342' height='84'/>
|
||||
<pict name='tag2-1' type='item' size='small' num='0' top='181' left='110'/>
|
||||
<pict name='tag2-2' type='item' size='small' num='0' top='181' left='134'/>
|
||||
<pict name='tag2-3' type='item' size='small' num='0' top='181' left='158'/>
|
||||
<pict name='tag2-4' type='item' size='small' num='0' top='181' left='182'/>
|
||||
<pict name='tag2-5' type='item' size='small' num='0' top='181' left='206'/>
|
||||
|
||||
<pict name='pic3' type='scen' num='0' top='232' left='62'/>
|
||||
<text name='desc3' framed='true' top='208' left='104' width='292' height='80'/>
|
||||
<text outline='double' name='start3' top='205' left='59' width='342' height='84'/>
|
||||
<pict name='tag3-1' type='item' size='small' num='0' top='268' left='110'/>
|
||||
<pict name='tag3-2' type='item' size='small' num='0' top='268' left='134'/>
|
||||
<pict name='tag3-3' type='item' size='small' num='0' top='268' left='158'/>
|
||||
<pict name='tag3-4' type='item' size='small' num='0' top='268' left='182'/>
|
||||
<pict name='tag3-5' type='item' size='small' num='0' top='268' left='206'/>
|
||||
</page>
|
||||
</stack>
|
||||
|
||||
|
||||
@@ -8,12 +8,12 @@
|
||||
<led name='nosound' relative='pos-in pos' rel-anchor='prev' top='10' left='0'>No UI Sounds</led>
|
||||
<text name='scale-head' size='large' relative='neg pos' rel-anchor='prev' top='17' left='10' width='260' height='17'>Scale UI:</text>
|
||||
<group name='scaleui'>
|
||||
<led name='1' relative='pos-in pos' anchor='scale-head' top='4' left='15'>1</led>
|
||||
<led name='1_5' relative='pos-in pos' anchor='scale-head' top='4' left='55'>1.5</led>
|
||||
<led name='2' relative='pos-in pos' anchor='scale-head' top='4' left='95'>2</led>
|
||||
<led name='3' relative='pos-in pos' anchor='scale-head' top='4' left='135'>3</led>
|
||||
<led name='4' relative='pos-in pos' anchor='scale-head' top='4' left='175'>4</led>
|
||||
<led name='other' relative='pos-in pos' anchor='scale-head' top='4' left='215'/>
|
||||
<led name='1' relative='neg pos' anchor='scale-head' top='4' left='20'>1</led>
|
||||
<led name='1_5' relative='pos pos-in' rel-anchor='prev' top='0' left='3'>1.5</led>
|
||||
<led name='2' relative='pos pos-in' rel-anchor='prev' top='0' left='3'>2</led>
|
||||
<led name='3' relative='pos pos-in' rel-anchor='prev' top='0' left='3'>3</led>
|
||||
<led name='4' relative='pos pos-in' rel-anchor='prev' top='0' left='3'>4</led>
|
||||
<led name='other' relative='pos pos-in' rel-anchor='prev' top='0' left='3'/>
|
||||
</group>
|
||||
|
||||
<text name='debug-party-head' size='large' relative='pos pos-in' anchor='nosound' top='0' left='50'>Debug Party:</text>
|
||||
@@ -21,6 +21,10 @@
|
||||
<button name='choose-party' relative='pos neg' rel-anchor='prev' type='regular' top='3' left='2'>Choose</button>
|
||||
<led name='force-default-party' relative='pos-in pos' anchor='debug-party-head' top='2' left='0'>Force default party (ignore above)</led>
|
||||
|
||||
<button name='okay' relative='abs pos' anchor='scale-head' type='regular' top='7' left='354'>OK</button>
|
||||
<text name='image-editor-head' size='large' relative='pos-in pos-in' anchor='force-default-party' top='30' left='0'>Image Editor:</text>
|
||||
<field name='image-editor' type='text' relative='neg-in neg' rel-anchor='prev' top='2' left='5' width='100' height='15'/>
|
||||
<button name='choose-image-editor' relative='pos neg' rel-anchor='prev' type='regular' top='3' left='2'>Choose</button>
|
||||
|
||||
<button name='okay' relative='abs pos' anchor='scale-head' type='regular' top='37' left='354'>OK</button>
|
||||
<button name='cancel' relative='neg pos-in' anchor='okay' type='regular' top='0' left='73'>Cancel</button>
|
||||
</dialog>
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
<?xml version='1.0' encoding='UTF-8' standalone='no'?>
|
||||
<!-- NOTE: This file should be updated to use relative positioning the next time it changes. -->
|
||||
<!-- NOTE: This dialog is NOT used for the automap. It is used by Display Picture nodes. -->
|
||||
<?xml-stylesheet href="dialog.xsl" type="text/xsl"?>
|
||||
<dialog defbtn='okay' escbtn='okay'>
|
||||
<button name='okay' type='regular' top='276' left='232'>OK</button>
|
||||
<pict type='dlog' num='21' top='6' left='6'/>
|
||||
<pict name='icon' type='dlog' num='21' top='6' left='6'/>
|
||||
<text name='title' size='large' top='6' left='50' width='300' height='17'>Map of Somewhere:</text>
|
||||
<pict name='map' type='full' num='1400' top='28' left='50'/>
|
||||
</dialog>
|
||||
|
||||
9
rsrc/dialogs/start-valleydy.xml
Normal file
9
rsrc/dialogs/start-valleydy.xml
Normal file
@@ -0,0 +1,9 @@
|
||||
<?xml version='1.0' encoding='UTF-8' standalone='no'?>
|
||||
<!-- NOTE: This file should be updated to use relative positioning the next time it changes. -->
|
||||
<?xml-stylesheet href="dialog.xsl" type="text/xsl"?>
|
||||
<dialog defbtn='play'>
|
||||
<pict type='scen' size='large' num='0' top='9' left='9'/>
|
||||
<text name='prompt' top='5' left='80' width='250' height='32'>You've completed the tutorial! We recommend playing the first official scenario, The Valley of Dying Things, next.</text>
|
||||
<button name='cancel' type='regular' top='46' left='178'>Cancel</button>
|
||||
<button name='play' type='regular' def-key='esc' top='46' left='248'>Play</button>
|
||||
</dialog>
|
||||
17
rsrc/dialogs/tiny-button-panel.xml
Normal file
17
rsrc/dialogs/tiny-button-panel.xml
Normal file
@@ -0,0 +1,17 @@
|
||||
<?xml version='1.0' encoding='UTF-8' standalone='no'?>
|
||||
<?xml-stylesheet href="dialog.xsl" type="text/xsl"?>
|
||||
<dialog defbtn='done' escbtn='cancel'>
|
||||
<pict name='pic' type='dlog' num='16' top='8' left='8'/>
|
||||
<text name='title' size='large' top='6' left='50' width='256' height='14'>Select:</text>
|
||||
<!-- Column 1 -->
|
||||
<button type='tiny' name='button1' top='54' left='8'/>
|
||||
<button type='tiny' name='button2' relative='pos-in pos-in' rel-anchor='prev' top='15' left='0'/>
|
||||
<button type='tiny' name='button3' relative='pos-in pos-in' rel-anchor='prev' top='15' left='0'/>
|
||||
<button type='tiny' name='button4' relative='pos-in pos-in' rel-anchor='prev' top='15' left='0'/>
|
||||
<button type='tiny' name='button5' relative='pos-in pos-in' rel-anchor='prev' top='15' left='0'/>
|
||||
<button type='tiny' name='button6' relative='pos-in pos-in' rel-anchor='prev' top='15' left='0'/>
|
||||
<button name='left' type='left' def-key='left' relative='pos-in pos-in' anchor='button6' top='19' left='0'/>
|
||||
<button name='right' type='right' def-key='right' relative='pos-in pos-in' rel-anchor='prev' top='0' left='63'/>
|
||||
<button name='cancel' type='regular' relative='pos-in pos-in' rel-anchor='prev' top='0' left='101'>Cancel</button>
|
||||
<button name='done' type='regular' relative='pos-in pos-in' rel-anchor='prev' top='0' left='66'>OK</button>
|
||||
</dialog>
|
||||
@@ -9,10 +9,17 @@
|
||||
Spiderweb Software, created in 1997 and later released as
|
||||
Free Open-Source Software.
|
||||
</text>
|
||||
<text name='spidweb' relative='pos-in pos' rel-anchor='prev' top='3' left='16' colour='link' underline='true'>
|
||||
http://www.spidweb.com/blades/opensource.html
|
||||
<text relative='pos-in pos' rel-anchor='prev' top='2' left='0' width='413'>
|
||||
You're playing an Itch Edition release of OpenBoE. The Itch Edition
|
||||
was funded by many generous supporters through IndieGoGo, and is
|
||||
currently funded by donations on Patreon. Click below to follow the project
|
||||
and see the rewards for becoming a supporter!
|
||||
</text>
|
||||
<text relative='neg pos' rel-anchor='prev' top='3' left='16' width='413'>
|
||||
<text name='patreon' relative='pos-in pos' rel-anchor='prev' top='0' left='16' width='230' colour='link' underline='true'>
|
||||
http://patreon.com/blades_itch_edition
|
||||
</text>
|
||||
<pict type='item' num='17' relative='pos neg' rel-anchor='prev' top='15' left='2'/>
|
||||
<text relative='neg pos' anchor='patreon' top='3' left='16' width='413'>
|
||||
Three exciting original scenarios await you, filled
|
||||
with many hours of puzzles, fighting and adventure!
|
||||
In addition to these, hundreds more written by
|
||||
|
||||
@@ -880,6 +880,7 @@
|
||||
</object>
|
||||
<object class="NSMenuItem" id="441636068">
|
||||
<reference key="NSMenu" ref="374024848"/>
|
||||
<bool key="NSIsDisabled">YES</bool>
|
||||
<string key="NSTitle">Scenario Design Contest!</string>
|
||||
<string key="NSKeyEquiv"/>
|
||||
<int key="NSMnemonicLoc">2147483647</int>
|
||||
|
||||
1
rsrc/scenarios/custom
Submodule
1
rsrc/scenarios/custom
Submodule
Submodule rsrc/scenarios/custom added at 01e0ea01e9
@@ -30,6 +30,9 @@
|
||||
<intro-msg>
|
||||
<![CDATA[After months of scraping out a living, you start to get excited. At last, you can go out, have adventures, and fight evil!]]>
|
||||
</intro-msg>
|
||||
<first-time-help-extra>
|
||||
<![CDATA[For now, you should find Vonnegut and get your orders. Press the mouth button (or type 't') to talk to nearby people or creatures.]]>
|
||||
</first-time-help-extra>
|
||||
</text>
|
||||
<ratings>
|
||||
<content>PG</content>
|
||||
|
||||
BIN
rsrc/scenarios/tutorial/graphics/sheet0.png
Normal file
BIN
rsrc/scenarios/tutorial/graphics/sheet0.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 7.9 KiB |
BIN
rsrc/scenarios/tutorial/header.exs
Normal file
BIN
rsrc/scenarios/tutorial/header.exs
Normal file
Binary file not shown.
9078
rsrc/scenarios/tutorial/items.xml
Normal file
9078
rsrc/scenarios/tutorial/items.xml
Normal file
File diff suppressed because it is too large
Load Diff
4609
rsrc/scenarios/tutorial/monsters.xml
Normal file
4609
rsrc/scenarios/tutorial/monsters.xml
Normal file
File diff suppressed because it is too large
Load Diff
48
rsrc/scenarios/tutorial/out/out0~0.map
Normal file
48
rsrc/scenarios/tutorial/out/out0~0.map
Normal file
@@ -0,0 +1,48 @@
|
||||
2,2,2,4,2,2,2,2,3,2,2,2,2,2,2,2,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4,2
|
||||
2,2,2,2,4,2,2,2,2,4,2,2,2,2,2,4,3,2,2,2,2,3,2,2,2,2,2,2,2,4,2,4,4,2,2,2,2,2,3,2,2,2,3,2,2,2,2,2
|
||||
3,2,3,2,2,2,3,2,2,2,4,2,2,2,3,2,2,2,2,2,3,2,2,2,2,2,2,2,3,2,2,2,2,2,3,2,4,2,2,2,2,2,2,2,2,2,4,2
|
||||
2,3,2,2,2,3,2,2,2,2,2,2,2,4,4,2,2,3,2,2,2,2,4,3,2,2,2,2,2,3,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3
|
||||
2,2,2,2,4,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,3,2,3,2,2,2,2,4,3,2,2
|
||||
2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4,2,2,2,2,2,2,2,3,3,2,2,2,3,2,2,2,2,2,4,2,3,2,2,2,2,2,2,2,2,2,3
|
||||
4,2,2,3,2,2,3,3,4,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,3,3,2,2,4,4,2,4,2,2,4
|
||||
2,2,2,4,2,4,2,2,3,2,3,4,3,2,2,2,2,2,2,2,2,2,3,2,2,2,2,3,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4,2
|
||||
2,2,2,2,2,2,2,4,4*0,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2*1,2,4,3,2,2,2,2,2,2,2,2,2,2,4,2
|
||||
3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,4,2,4,2,2,2,4,2,4,2,2,2,2,4,3,2,2,2,2,4,2,4,4,2,3,2,2,2,2,4,2
|
||||
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4,2,2,2,2,2,3,4,4,2,2,2,2,2,2,2,2,3,2,2,2,2,4,2,2,3,2,2,2,3,2
|
||||
3,2,2,2,2,2,4,3,2,2,4,2,2,4,2,2,2,2,4,3,2,2,2,2,2,3,2,4,2,2,2,2,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,3
|
||||
2,3,2,2,2,2,2,2,2,2,3,4,2,3,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,3,2,4,2,2,2,2,2,2,2,2,2,2,3
|
||||
2,2,2,3,2,3,4,2,2,4,2,2,2,2,4,2,2,2,2,3,2,2,2,2,4,4,2,2,2,2,2,4,2,2,2,4,2,2,3,2,2,4,2,2,2,2,2,2
|
||||
2,2,2,2,3,3,2,3,2,3,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,4,2,2,2,2,2,3,3,2,2,2,2,2,2,2,3,2,2
|
||||
2,2,3,2,2,3,2,3,2,2,2,2,3,2,2,2,2,4,2,2,4,3,2,2,2,2,2,3,2,3,4,2,3,3,2,4,2,3,2,3,3,2,2,2,2,4,2,2
|
||||
2,2,2,2,2,2,2,3,2,3,2,4,4,2,4,3,2,2,2,2,2,2,2,2,2,2,3,3,2,4,2,2,2,2,2,2,2,2,2,3,3,2,2,3,2,2,2,2
|
||||
2,2,4,2,2,2,2,2,2,2,2,2,2,2,2,3,2,4,2,2,2,2,2,2,2,3,2,2,2,4,3,2,3,2,2,3,2,3,2,2,2,2,2,3,2,2,2,3
|
||||
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4,2,2,3,4,2,4,2,3,2,2,2,2,3,3,2,2,2,2,2,2
|
||||
2,2,2,2,2,2,3,2,3,2,2,3,2,2,2,2,2,2,2,2,2,2,4,3,3,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2
|
||||
3,2,2,2,3,2,2,2,2,2,2,4,3,2,2,3,4,3,2,2,3,2,3,2,2,2,2,2,2,2,2,4,2,2,3,2,2,4,2,2,2,4,2,2,2,2,2,4
|
||||
2,2,2,2,2,2,2,2,2,2,2,4,2,2,2,2,3,2,2,4,2,3,3,2,3,2,2,2,2,4,2,2,2,2,2,2,2,2,2,2,4,3,2,2,2,2,2,2
|
||||
2,4,2,3,2,2,2,2,2,2,2,2,3,2,2,3,4,4,4,2,2,3,112,112,112,112,112,3,3,2,2,3,2,2,2,2,2,2,2,2,3,4,2,2,2,2,2,2
|
||||
2,4,2,2,2,2,3,2,4,3,2,2,2,2,2,2,2,2,2,4,2,2,112,3,2,3,112,3,2,2,2,2,3,3,2,2,2,2,3,3,2,2,4,2,2,3,2,4
|
||||
2,2,4,2,2,2,4,2,4,2,3,4,3,2,2,2,3,2,2,3,2,2,112,2,242@1,2,112,2,3,3,2,2,2,3,2,2,2,2,2,2,4,2,2,3,3,3,2,2
|
||||
3,2,2,3,2,4,2,2,2,3,2,4,4,2,4,2,2,2,3,2,4,3,112,4,2&9:0,3,112,2,2,2,2,4,4,3,2,2,2,2,3,2,2,2,2,2,2,2,2,2
|
||||
2,2,2,2,2,4,2,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,2,2,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,2,2,3,2,2,2,2
|
||||
2,2,2,2,2,2,2,112,111,111,111,111,111,111,111,111,111,111,2,3,2,112,112,2&9:1,121!0,112,112,112,2,3,56,55,55,55,55,55,55,55,55,54,112,2,3,2,2,2,2,2
|
||||
2,2,2,2,4,2,2,112,111,2,111,111,111,2,3,111,111,111,2,3,2,112,112,2,2,112,112,112,3,2,57,50,62,51,51,59,50,50,50,53,112,2,2,2,2,4,2,2
|
||||
4,3,2,4,2,2,2,112,3,2,2,2,111,2,111,3,2,4,3&25,3&9&25:2,2&25,2&25,3&25,2&25,2&25,2&25,2&25,2&25,3&25,2&9&25:4,57,50,53,2,242@3,57,50,50,50,53,112,2,2,2,2,2,2,2
|
||||
2,3,2,2,2,2,3,112,3,4,2,111,2,3,111,111,111,111,2,2,2,2,2,2,2&25,2,2,2,3,4,57,50,53,2,2,57,50,50,50,53,112,2,2,3,2,2,2,2
|
||||
2,3,2,2,2,2,2,112,2,2,112,112,112,112,112,112,112,112,112,112,112,112,112,2,2&25,2,112,112,112,112,57,50,61,55,55,60,50,50,50,53,112,3,2,2,2,2,2,2
|
||||
2,2,2,2,2,2,2,112,2*2,112,112,2,3,2,2,2,2,4,2,3,2,2,112,2,2&9&25:3,3,112,56,55,55,60,50,50*3,50,50,50,50,50,50,53,112,2,2,2,2,2,3,3
|
||||
3,2,3,2,2,2,2,112,111,112,2,2,2,2,2,2,2,2,2,2,2,2,112,112,112,112,112,57,50,50,50,50,50,50,50,50,50,50,50,53,112,2,2,2,2,2,4,2
|
||||
2,2,3,2,2,3,2,112,111,112,2,2,3,2,2,3,2,3,2,2,2,2,112,3,3&25,2,112,57,50,50,50,50,50,62,51,51,51,51,51,52,112,3,2,2,3,3,3,2
|
||||
2,4,2,4,2,3,2,112,111,112,2,4,3,3,2,2,3,2,2,2,2,2,112,2,3&25,4,112,57,50,50,50,50,50,53,112,112,112,112,112,112,112,2,3,4,3,2,2,2
|
||||
2,2,2,2,2,3,2,112,242@0,112,2,3,2,2,2,2,2,2,2,2,3,2,112,2,2&25,2,112,57,50,50,50,50,50,53,112,2,2,2,2,2,3,2,4,2,2,2,2,3
|
||||
3,3,2,2,4,2,2,112,256,112,112,112,112,112,112,112,112,112,112,112,112,112,112,2,2&25,2,112,57,50,50,50,50,50,53,112,2,2,2,2,2,2,4,2,2,2,2,2,2
|
||||
2,3,2,4,2,2,2,112,2:7,2:7,2,2,111,2,2,2,2,2,2,4,2,2,2:6,3,2&25,2,112,57,50,50,50,50,50,53,112,2,2,2,2,2,2,2,4,2,2,3,2,2
|
||||
2,2,2,2,2,2,2,112,2,2,111,2,2,111,111,2,2,4,2,2,2,2,2:6,3,2&25,2,112,57,50,50,50,50,50,53,112,2,2,2,3,2,2,4,2,2,2,2,2,2
|
||||
2,2,4,2,2,2,4,112,4,111,2,111,3,111,2,2,2,2,2,2,2,2,2:6,2,2&25,2,112,57,50,50,50,50,50,53,112,2,2,2,4,2,2,2,3,2,2,2,2,2
|
||||
2,2,2,3,2,2,2,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,2,2&25,2,112,57,50,50,50,50,50,53,112,2,3,3,2,2,4,2,2,2,3,2,2,2
|
||||
2,2,2,2,2,2,3,2,3,2,2,2,2,2,3,2,2,2,3,3,2,2,112,4,2&25,56,55,60,50,50,50,50,50,53,112,2,2,2,3,2,2,2,3,2,2,2,2,2
|
||||
2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,112,3,242@2,57,50,50,50,50,50,50,50,53,112,3,2,4,2,2,2,2,2,2,2,3,2,3
|
||||
2,2,4,2,3,2,2,4,2,4,2,2,2,2,2,2,2,3,2,4,2,2,112,112,112,58,51,51,51,51,51,51,51,52,112,2,2,2,2,2,2,3,2,3,2,2,2,2
|
||||
2,2,2,2,3,2,2,4,2,4,2,2,2,2,2,2,2,3,4,2,2,2,2,2,112,112,112,112,112,112,112,112,112,112,112,2,2,2,2,4,2,2,2,2,2,2,2,2
|
||||
2,2,2,3,2,3,3,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,4,2,2,2,2,2,4,4,2,2,2,2,2,2,4,2,2,2,2,2,2,2,2,2
|
||||
2,2,3,2,2,2,2,2,4,2,3,4,2,2,2,2,2,2,2,2,3,2,2,2,2,3,2,3,2,2,2,2,2,2,2,2,3,2,2,3,2,2,2,3,2,3,2,2
|
||||
56
rsrc/scenarios/tutorial/out/out0~0.spec
Normal file
56
rsrc/scenarios/tutorial/out/out0~0.spec
Normal file
@@ -0,0 +1,56 @@
|
||||
@once-dlog = 0
|
||||
sdf -1, -1
|
||||
msg 0, -1, 1
|
||||
pic 21, 4
|
||||
ex1 -1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto -1
|
||||
@disp-msg = 1
|
||||
sdf -1, -1
|
||||
msg 6, 7, -1
|
||||
pic 0, 4
|
||||
ex1 -1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto -1
|
||||
@once-dlog = 2
|
||||
sdf -1, -1
|
||||
msg 8, -1, 1
|
||||
pic 29, 4
|
||||
ex1 -1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto -1
|
||||
@disp-msg = 3
|
||||
sdf -1, -1
|
||||
msg 14, -1, -1
|
||||
pic 0, 4
|
||||
ex1 -1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto -1
|
||||
@if-sdf = 4
|
||||
sdf 200, 0
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto 5
|
||||
@disp-msg = 5
|
||||
sdf -1, -1
|
||||
msg 15, -1, -1
|
||||
pic 0, 4
|
||||
ex1 -1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto -1
|
||||
@once-disp-msg = 6
|
||||
sdf 200, 1
|
||||
msg 16, -1, -1
|
||||
pic 0, 4
|
||||
ex1 -1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto -1
|
||||
@once-dlog = 7
|
||||
sdf 200, 2
|
||||
msg 17, -1, 1
|
||||
pic 0, 4
|
||||
ex1 -1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto -1
|
||||
49
rsrc/scenarios/tutorial/out/out0~0.xml
Normal file
49
rsrc/scenarios/tutorial/out/out0~0.xml
Normal file
@@ -0,0 +1,49 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||
<sector boes="2.0.0">
|
||||
<name>Part 2: Exploration</name>
|
||||
<comment>Comment</comment>
|
||||
<sign id="0">
|
||||
<![CDATA[West - Marshy Tower|East - Lake Tower|South - Vault Tower]]>
|
||||
</sign>
|
||||
<area top="25" left="6" bottom="36" right="21">Path to Marshy Tower</area>
|
||||
<area top="37" left="7" bottom="41" right="22">Backwoods</area>
|
||||
<area top="31" left="23" bottom="43" right="25">Road to Vault Tower</area>
|
||||
<area top="27" left="26" bottom="30" right="29">Road to Lake Tower</area>
|
||||
<string id="0">
|
||||
<![CDATA[You're now exploring the great outdoors! When outdoors, each tile on the map represents a larger space, so each move you make takes more in-game time.]]>
|
||||
</string>
|
||||
<string id="1">
|
||||
<![CDATA[In the outdoors, you'll find entrances to towns or dungeons like the tower from which you're emerging now.]]>
|
||||
</string>
|
||||
<string id="2">
|
||||
<![CDATA[Clearing many BoE scenarios usually requires a thorough exploration of the outdoors and every town or dungeon you can find. First of all, you should open your minimap to help keep track of where you've been! Type 'a' to do so.]]>
|
||||
</string>
|
||||
<string id="6">
|
||||
<![CDATA[To read a sign, use the Look command. You can do this by typing 'l' or clicking the button of the eye. You have to be standing next to things like signs or books to investigate them closely.]]>
|
||||
</string>
|
||||
<string id="7">
|
||||
<![CDATA[You can also look by right-clicking.]]>
|
||||
</string>
|
||||
<string id="8">
|
||||
<![CDATA[The terrain is getting wilder as you make your way westward. You should move diagonally to avoid dangerous terrain where possible, but this might not always be possible.]]>
|
||||
</string>
|
||||
<string id="14">
|
||||
<![CDATA[It seems like this road leads to one of the towers you need to visit, but the woods have overgrown the path. There must be another way around.]]>
|
||||
</string>
|
||||
<string id="15">
|
||||
<![CDATA[You can see a tower across the water, but there's no ferry or bridge to take you across. Frustrating.]]>
|
||||
</string>
|
||||
<string id="16">
|
||||
<![CDATA[You have found your way back onto the overgrown road to Vault Tower!]]>
|
||||
</string>
|
||||
<string id="17">
|
||||
<![CDATA[In the outdoors, if you're not poisoned and you have enough food, you can rest to recover your health and spell points.]]>
|
||||
</string>
|
||||
<string id="18">
|
||||
<![CDATA[Type 'r', or click the button of a tent, to do this.]]>
|
||||
</string>
|
||||
<string id="19">
|
||||
<![CDATA[If you're ever low on food, Michael has a priest spell (Manna) which will summon some!]]>
|
||||
</string>
|
||||
<string id="22" />
|
||||
</sector>
|
||||
42
rsrc/scenarios/tutorial/scenario.spec
Normal file
42
rsrc/scenarios/tutorial/scenario.spec
Normal file
@@ -0,0 +1,42 @@
|
||||
@select-pc = 0
|
||||
sdf -1, -1
|
||||
msg 0, 1, -1
|
||||
pic 0, 4
|
||||
ex1 0, -1, 7
|
||||
ex2 1, -1, -1
|
||||
goto 2
|
||||
@change-ter = 1
|
||||
sdf -1, -1
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 -10, -11, -1
|
||||
ex2 259, -1, -1
|
||||
goto -1
|
||||
@status = 2
|
||||
sdf -1, -1
|
||||
msg 0, 1, -1
|
||||
pic 0, 4
|
||||
ex1 3, 1, 7
|
||||
ex2 258, -1, -1
|
||||
goto 1
|
||||
@once-dlog = 3
|
||||
sdf 3, 3
|
||||
msg 2, -1, 1
|
||||
pic 74, 3
|
||||
ex1 -1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto -1
|
||||
@once-dlog = 4
|
||||
sdf 3, 2
|
||||
msg 8, -1, 1
|
||||
pic 55, 3
|
||||
ex1 -1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto -1
|
||||
@once-dlog = 5
|
||||
sdf 3, 4
|
||||
msg 14, -1, 1
|
||||
pic 58, 3
|
||||
ex1 -1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto -1
|
||||
164
rsrc/scenarios/tutorial/scenario.xml
Normal file
164
rsrc/scenarios/tutorial/scenario.xml
Normal file
@@ -0,0 +1,164 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||
<scenario boes="2.0.0">
|
||||
<title>Tutorial</title>
|
||||
<icon>13</icon>
|
||||
<id></id>
|
||||
<version>1.0.0</version>
|
||||
<language>en-US</language>
|
||||
<author>
|
||||
<name>OpenBoE</name>
|
||||
<email></email>
|
||||
</author>
|
||||
<feature-flags>
|
||||
<door-town-difficulty>fixed</door-town-difficulty>
|
||||
<resurrection-balm>required</resurrection-balm>
|
||||
<scenario-meta-format>V2</scenario-meta-format>
|
||||
</feature-flags>
|
||||
<text>
|
||||
<teaser>An exciting adventure!</teaser>
|
||||
<teaser></teaser>
|
||||
<icon>0</icon>
|
||||
<first-time-help-extra>
|
||||
<![CDATA[To move through the tutorial, click in any direction (starting with east, out of this hallway).]]>
|
||||
</first-time-help-extra>
|
||||
</text>
|
||||
<ratings>
|
||||
<content>G</content>
|
||||
<difficulty>1</difficulty>
|
||||
</ratings>
|
||||
<flags>
|
||||
<adjust-difficulty>true</adjust-difficulty>
|
||||
<legacy>false</legacy>
|
||||
<custom-graphics>false</custom-graphics>
|
||||
</flags>
|
||||
<creator>
|
||||
<type>oboe</type>
|
||||
<version>2.0.0</version>
|
||||
</creator>
|
||||
<game>
|
||||
<num-towns>4</num-towns>
|
||||
<out-width>1</out-width>
|
||||
<out-height>1</out-height>
|
||||
<start-town>1</start-town>
|
||||
<town-start x="5" y="7" />
|
||||
<outdoor-start x="0" y="0" />
|
||||
<sector-start x="24" y="24" />
|
||||
<special-item start-with="false" useable="false" special="-1">
|
||||
<name>Marshy Artifact Piece</name>
|
||||
<description>
|
||||
<![CDATA[One of the three pieces you need to use the exit portal!]]>
|
||||
</description>
|
||||
</special-item>
|
||||
<special-item start-with="false" useable="false" special="-1">
|
||||
<name>Vault Artifact Piece</name>
|
||||
<description>
|
||||
<![CDATA[The second piece!]]>
|
||||
</description>
|
||||
</special-item>
|
||||
<special-item start-with="false" useable="false" special="-1">
|
||||
<name>Lake Artifact Piece</name>
|
||||
<description>
|
||||
<![CDATA[The last piece!]]>
|
||||
</description>
|
||||
</special-item>
|
||||
<shop>
|
||||
<name>Healing</name>
|
||||
<type>dead</type>
|
||||
<prompt>heal</prompt>
|
||||
<face>41</face>
|
||||
<entries>
|
||||
<heal>0</heal>
|
||||
<heal>1</heal>
|
||||
<heal>2</heal>
|
||||
<heal>4</heal>
|
||||
<heal>9</heal>
|
||||
<heal>5</heal>
|
||||
<heal>6</heal>
|
||||
<heal>7</heal>
|
||||
<heal>8</heal>
|
||||
</entries>
|
||||
</shop>
|
||||
<shop>
|
||||
<name>Shady Guard's Wares</name>
|
||||
<type>live</type>
|
||||
<prompt>shop</prompt>
|
||||
<face>10</face>
|
||||
<entries>
|
||||
<item quantity="2">171</item>
|
||||
</entries>
|
||||
</shop>
|
||||
<string id="0">
|
||||
<![CDATA[You carefully remove the ornaments from this altar.]]>
|
||||
</string>
|
||||
<string id="1">
|
||||
<![CDATA[Lo and behold, the gods are petty!]]>
|
||||
</string>
|
||||
<string id="2">
|
||||
<![CDATA[Ah, an imp! These tricky little things (and all other infernal creatures, like demons) are immune to fire damage, so your Flame and Fireball spells won't do any good.]]>
|
||||
</string>
|
||||
<string id="3">
|
||||
<![CDATA[Different monsters have different resistances and vulnerabilities. You can learn them through trial and error, or you can use a mage spell, Scry Monsters, to learn them directly. When you scry a monster, you keep its information to read whenever you want in the 'Monsters' menu.]]>
|
||||
</string>
|
||||
<string id="8">
|
||||
<![CDATA[Aargh! A zombie!]]>
|
||||
</string>
|
||||
<string id="9">
|
||||
<![CDATA[Zombies and other undead creatures are immune to cold damage. Your priest spell casters, Feodoric and Michael, have a spell (Turn Undead) which is quite good at returning these things to the afterlife.]]>
|
||||
</string>
|
||||
<string id="14">
|
||||
<![CDATA[Ghasts are bad news. These undead creatures will attack you many times in the same turn, and stun you so you can't defend yourself.]]>
|
||||
</string>
|
||||
<string id="15">
|
||||
<![CDATA[With extra-fatal enemies like these, it's smart to wipe them out before you deal with lower-priority targets. You can also use the mage spell 'Slow' to prevent them from acting on their turn. Don't forget about that one!]]>
|
||||
</string>
|
||||
<string id="19" />
|
||||
</game>
|
||||
<editor>
|
||||
<default-ground>2</default-ground>
|
||||
<graphics>
|
||||
<pic index="0">terrain</pic>
|
||||
<pic index="1">terrain</pic>
|
||||
<pic index="2">terrain</pic>
|
||||
</graphics>
|
||||
<item-class id="1">lockpicks</item-class>
|
||||
<sdf row="0" col="0">entrance message</sdf>
|
||||
<sdf row="0" col="1">supplies message</sdf>
|
||||
<sdf row="0" col="2">dining hall message</sdf>
|
||||
<sdf row="0" col="3">pantry message</sdf>
|
||||
<sdf row="0" col="4"># spiders killed</sdf>
|
||||
<sdf row="0" col="5">party cleaned webs</sdf>
|
||||
<sdf row="0" col="6">spider combat done</sdf>
|
||||
<sdf row="0" col="7">gave piece</sdf>
|
||||
<sdf row="0" col="8">archery message</sdf>
|
||||
<sdf row="0" col="9">mage spells message</sdf>
|
||||
<sdf row="0" col="10">priest spells combat message</sdf>
|
||||
<sdf row="0" col="11">spell help message</sdf>
|
||||
<sdf row="0" col="12">looked through portcullis</sdf>
|
||||
<sdf row="1" col="0">looked at book</sdf>
|
||||
<sdf row="1" col="1">book node</sdf>
|
||||
<sdf row="1" col="2">entry message</sdf>
|
||||
<sdf row="1" col="3">exit message</sdf>
|
||||
<sdf row="1" col="4">artifact pieces</sdf>
|
||||
<sdf row="2" col="0">piece given</sdf>
|
||||
<sdf row="2" col="1">guard patrol direction</sdf>
|
||||
<sdf row="2" col="2">guard patrol dy</sdf>
|
||||
<sdf row="2" col="3">guard patrol start</sdf>
|
||||
<sdf row="2" col="4">close the door!</sdf>
|
||||
<sdf row="2" col="5">stopped by window guard</sdf>
|
||||
<sdf row="2" col="6">know to ask about patrol</sdf>
|
||||
<sdf row="2" col="7">past tired guard</sdf>
|
||||
<sdf row="2" col="8">guard paid off</sdf>
|
||||
<sdf row="2" col="9">seen boat</sdf>
|
||||
<sdf row="3" col="0">piece given</sdf>
|
||||
<sdf row="3" col="1">death message</sdf>
|
||||
<sdf row="3" col="2">learned about zombies</sdf>
|
||||
<sdf row="3" col="3">learned about imp</sdf>
|
||||
<sdf row="3" col="4">learned about ghast</sdf>
|
||||
<sdf row="3" col="5">party loop index</sdf>
|
||||
<sdf row="3" col="6">saw skill trainer</sdf>
|
||||
<sdf row="3" col="7">death gone</sdf>
|
||||
<sdf row="200" col="0">found boat</sdf>
|
||||
<sdf row="200" col="1">exit backwoods message</sdf>
|
||||
<sdf row="200" col="2">resting message</sdf>
|
||||
</editor>
|
||||
</scenario>
|
||||
6420
rsrc/scenarios/tutorial/terrain.xml
Normal file
6420
rsrc/scenarios/tutorial/terrain.xml
Normal file
File diff suppressed because it is too large
Load Diff
63
rsrc/scenarios/tutorial/towns/talk0.xml
Normal file
63
rsrc/scenarios/tutorial/towns/talk0.xml
Normal file
@@ -0,0 +1,63 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||
<dialogue boes="2.0.0">
|
||||
<personality id="0">
|
||||
<title>Unused</title>
|
||||
<look></look>
|
||||
<name></name>
|
||||
<job></job>
|
||||
</personality>
|
||||
<personality id="1">
|
||||
<title>Unused</title>
|
||||
<look></look>
|
||||
<name></name>
|
||||
<job></job>
|
||||
</personality>
|
||||
<personality id="2">
|
||||
<title>Unused</title>
|
||||
<look></look>
|
||||
<name></name>
|
||||
<job></job>
|
||||
</personality>
|
||||
<personality id="3">
|
||||
<title>Unused</title>
|
||||
<look></look>
|
||||
<name></name>
|
||||
<job></job>
|
||||
</personality>
|
||||
<personality id="4">
|
||||
<title>Unused</title>
|
||||
<look></look>
|
||||
<name></name>
|
||||
<job></job>
|
||||
</personality>
|
||||
<personality id="5">
|
||||
<title>Unused</title>
|
||||
<look></look>
|
||||
<name></name>
|
||||
<job></job>
|
||||
</personality>
|
||||
<personality id="6">
|
||||
<title>Unused</title>
|
||||
<look></look>
|
||||
<name></name>
|
||||
<job></job>
|
||||
</personality>
|
||||
<personality id="7">
|
||||
<title>Unused</title>
|
||||
<look></look>
|
||||
<name></name>
|
||||
<job></job>
|
||||
</personality>
|
||||
<personality id="8">
|
||||
<title>Unused</title>
|
||||
<look></look>
|
||||
<name></name>
|
||||
<job></job>
|
||||
</personality>
|
||||
<personality id="9">
|
||||
<title>Unused</title>
|
||||
<look></look>
|
||||
<name></name>
|
||||
<job></job>
|
||||
</personality>
|
||||
</dialogue>
|
||||
63
rsrc/scenarios/tutorial/towns/talk1.xml
Normal file
63
rsrc/scenarios/tutorial/towns/talk1.xml
Normal file
@@ -0,0 +1,63 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||
<dialogue boes="2.0.0">
|
||||
<personality id="10">
|
||||
<title>Unused</title>
|
||||
<look></look>
|
||||
<name></name>
|
||||
<job></job>
|
||||
</personality>
|
||||
<personality id="11">
|
||||
<title>Unused</title>
|
||||
<look></look>
|
||||
<name></name>
|
||||
<job></job>
|
||||
</personality>
|
||||
<personality id="12">
|
||||
<title>Unused</title>
|
||||
<look></look>
|
||||
<name></name>
|
||||
<job></job>
|
||||
</personality>
|
||||
<personality id="13">
|
||||
<title>Unused</title>
|
||||
<look></look>
|
||||
<name></name>
|
||||
<job></job>
|
||||
</personality>
|
||||
<personality id="14">
|
||||
<title>Unused</title>
|
||||
<look></look>
|
||||
<name></name>
|
||||
<job></job>
|
||||
</personality>
|
||||
<personality id="15">
|
||||
<title>Unused</title>
|
||||
<look></look>
|
||||
<name></name>
|
||||
<job></job>
|
||||
</personality>
|
||||
<personality id="16">
|
||||
<title>Unused</title>
|
||||
<look></look>
|
||||
<name></name>
|
||||
<job></job>
|
||||
</personality>
|
||||
<personality id="17">
|
||||
<title>Unused</title>
|
||||
<look></look>
|
||||
<name></name>
|
||||
<job></job>
|
||||
</personality>
|
||||
<personality id="18">
|
||||
<title>Unused</title>
|
||||
<look></look>
|
||||
<name></name>
|
||||
<job></job>
|
||||
</personality>
|
||||
<personality id="19">
|
||||
<title>Unused</title>
|
||||
<look></look>
|
||||
<name></name>
|
||||
<job></job>
|
||||
</personality>
|
||||
</dialogue>
|
||||
165
rsrc/scenarios/tutorial/towns/talk2.xml
Normal file
165
rsrc/scenarios/tutorial/towns/talk2.xml
Normal file
@@ -0,0 +1,165 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||
<dialogue boes="2.0.0">
|
||||
<personality id="20">
|
||||
<title>Shady Guard</title>
|
||||
<look>
|
||||
<![CDATA[This guard looks more than a little disgruntled. If you can keep her ire directed at her boss, that might be a great advantage.]]>
|
||||
</look>
|
||||
<name>
|
||||
<![CDATA["Who even cares? If you must, call me G."]]>
|
||||
</name>
|
||||
<job>
|
||||
<![CDATA["Guarding this vault. But one good heist could pay me off better than the wages, that's for sure."]]>
|
||||
</job>
|
||||
<unknown>
|
||||
<![CDATA["Just leave the planning to me, okay?"]]>
|
||||
</unknown>
|
||||
</personality>
|
||||
<personality id="21">
|
||||
<title>Tired Guard</title>
|
||||
<look>
|
||||
<![CDATA[This guard looks tired of doing his job, but also too tired to defy his boss.]]>
|
||||
</look>
|
||||
<name>
|
||||
<![CDATA["Like I'm telling you that, intruder!"]]>
|
||||
</name>
|
||||
<job>
|
||||
<![CDATA["I guard the place."]]>
|
||||
</job>
|
||||
<unknown>
|
||||
<![CDATA["Stop trying to confuse me."]]>
|
||||
</unknown>
|
||||
</personality>
|
||||
<personality id="22">
|
||||
<title>G</title>
|
||||
<look>
|
||||
<![CDATA[It's your old pal G, the conniving guard. "Looks like we're stuck at a dead end, hm?"]]>
|
||||
</look>
|
||||
<name>
|
||||
<![CDATA["It's just G."]]>
|
||||
</name>
|
||||
<job>
|
||||
<![CDATA["My job now is to get the two of us out of here with the treasure! But I'm afraid we're stuck."]]>
|
||||
</job>
|
||||
<unknown>
|
||||
<![CDATA["I'll take that gold, now."]]>
|
||||
</unknown>
|
||||
</personality>
|
||||
<personality id="23">
|
||||
<title>Unused</title>
|
||||
<look></look>
|
||||
<name></name>
|
||||
<job></job>
|
||||
</personality>
|
||||
<personality id="24">
|
||||
<title>Unused</title>
|
||||
<look></look>
|
||||
<name></name>
|
||||
<job></job>
|
||||
</personality>
|
||||
<personality id="25">
|
||||
<title>Unused</title>
|
||||
<look></look>
|
||||
<name></name>
|
||||
<job></job>
|
||||
</personality>
|
||||
<personality id="26">
|
||||
<title>Unused</title>
|
||||
<look></look>
|
||||
<name></name>
|
||||
<job></job>
|
||||
</personality>
|
||||
<personality id="27">
|
||||
<title>Unused</title>
|
||||
<look></look>
|
||||
<name></name>
|
||||
<job></job>
|
||||
</personality>
|
||||
<personality id="28">
|
||||
<title>Unused</title>
|
||||
<look></look>
|
||||
<name></name>
|
||||
<job></job>
|
||||
</personality>
|
||||
<personality id="29">
|
||||
<title>Unused</title>
|
||||
<look></look>
|
||||
<name></name>
|
||||
<job></job>
|
||||
</personality>
|
||||
<node for="20">
|
||||
<keyword>heis</keyword>
|
||||
<keyword>vaul</keyword>
|
||||
<type>if-sdf</type>
|
||||
<param>2</param>
|
||||
<param>5</param>
|
||||
<param>0</param>
|
||||
<text>
|
||||
<![CDATA["So you want in, huh?" She smirks. "Well the next door will require more sophistication than the one you busted down like an impatient troll. I have the tools you need, but they'll cost you."]]>
|
||||
</text>
|
||||
<text>
|
||||
<![CDATA["So, the guard in the hallway is giving you trouble, huh? I have an idea for that."]]>
|
||||
</text>
|
||||
</node>
|
||||
<node for="20">
|
||||
<keyword>tool</keyword>
|
||||
<keyword>purc</keyword>
|
||||
<type>shop</type>
|
||||
<param>3</param>
|
||||
<param>1</param>
|
||||
<text>
|
||||
<![CDATA[Shady Guard's Wares]]>
|
||||
</text>
|
||||
<text>
|
||||
<![CDATA["Sorry, bud. That's all I've got."]]>
|
||||
</text>
|
||||
</node>
|
||||
<node for="20">
|
||||
<keyword>idea</keyword>
|
||||
<type>set-sdf</type>
|
||||
<param>2</param>
|
||||
<param>6</param>
|
||||
<text>
|
||||
<![CDATA["He's supposed to patrol between two lookout points. He gets lazy sometimes, but if you ask him about patrol duty, he has to do it! That's when you slip past."]]>
|
||||
</text>
|
||||
</node>
|
||||
<node for="21">
|
||||
<keyword>patr</keyword>
|
||||
<keyword>duty</keyword>
|
||||
<type>set-sdf</type>
|
||||
<param>2</param>
|
||||
<param>3</param>
|
||||
<text>
|
||||
<![CDATA["Blast! You're right. I've been slacking off. Now move along so I can do my job."]]>
|
||||
</text>
|
||||
<text>
|
||||
<![CDATA[Every once in a while, this guard will now switch locations. You can wait for a turn by clicking your main character, or typing '5' on the number pad.]]>
|
||||
</text>
|
||||
</node>
|
||||
<node for="22">
|
||||
<keyword>stuc</keyword>
|
||||
<keyword>dead</keyword>
|
||||
<type>reg</type>
|
||||
<text>
|
||||
<![CDATA["Well, I'll be honest. I know the way out, but you're not going anywhere without giving me the gold you found in the vault."]]>
|
||||
</text>
|
||||
<text>
|
||||
<![CDATA[Technically, there is another option. You could start combat mode with 'f' and move to attack. Attacking friendly characters can be a very bad idea, but this is a role-playing game, so it's up to you. (This guard doesn't seem so tough.)]]>
|
||||
</text>
|
||||
</node>
|
||||
<node for="22">
|
||||
<keyword>purc</keyword>
|
||||
<keyword>givi</keyword>
|
||||
<type>buy-sdf</type>
|
||||
<param>400</param>
|
||||
<param>2</param>
|
||||
<param>8</param>
|
||||
<param>1</param>
|
||||
<text>
|
||||
<![CDATA["Your cooperation is much appreciated. So long, suckers!"|Well, you managed to keep at least a chunk of the gold secret, so that's nice.]]>
|
||||
</text>
|
||||
<text>
|
||||
<![CDATA[You don't have enough gold. Did you loot the chest in the vault room?]]>
|
||||
</text>
|
||||
</node>
|
||||
</dialogue>
|
||||
198
rsrc/scenarios/tutorial/towns/talk3.xml
Normal file
198
rsrc/scenarios/tutorial/towns/talk3.xml
Normal file
@@ -0,0 +1,198 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||
<dialogue boes="2.0.0">
|
||||
<personality id="30">
|
||||
<title>Death</title>
|
||||
<look>
|
||||
<![CDATA[For centuries, people have lived with their unanswered questions about Death. It's your lucky day to get those questions answered by the very embodiment of the idea itself!]]>
|
||||
</look>
|
||||
<name>
|
||||
<![CDATA["Death."]]>
|
||||
</name>
|
||||
<job>
|
||||
<![CDATA["I tend to lost souls."]]>
|
||||
</job>
|
||||
<unknown>
|
||||
<![CDATA["Don't make this any more complicated than it is."]]>
|
||||
</unknown>
|
||||
</personality>
|
||||
<personality id="31">
|
||||
<title>Healer</title>
|
||||
<look>
|
||||
<![CDATA[This healer is certainly in odd company.]]>
|
||||
</look>
|
||||
<name>
|
||||
<![CDATA["That's not important right now. I'm here to help fix your situation."]]>
|
||||
</name>
|
||||
<job>
|
||||
<![CDATA["I'm one half of what you might call the ultimate good cop, bad cop routine. Let me heal your companion, then we'll move along."]]>
|
||||
</job>
|
||||
<unknown>
|
||||
<![CDATA["What do you mean?"]]>
|
||||
</unknown>
|
||||
</personality>
|
||||
<personality id="32">
|
||||
<title>Trainer</title>
|
||||
<look>
|
||||
<![CDATA[This person exists solely to train adventurers.]]>
|
||||
</look>
|
||||
<name>
|
||||
<![CDATA["Trainer."]]>
|
||||
</name>
|
||||
<job>
|
||||
<![CDATA["Training. You give me gold and skill points, I make you good at things."]]>
|
||||
</job>
|
||||
<unknown>
|
||||
<![CDATA["What was that?"]]>
|
||||
</unknown>
|
||||
</personality>
|
||||
<personality id="33">
|
||||
<title>Merchant</title>
|
||||
<look>
|
||||
<![CDATA[This merchant looks apologetic. "I promise I'm the last person getting between you and a real adventure!"]]>
|
||||
</look>
|
||||
<name>
|
||||
<![CDATA["Stephen." (Stephen Merchant?)]]>
|
||||
</name>
|
||||
<job>
|
||||
<![CDATA["I can identify your items, and you can sell me the ones you don't want! It's always smart to have your items identified. I can tell you right now that one of the items in these boxes is cursed."]]>
|
||||
</job>
|
||||
<unknown>
|
||||
<![CDATA["Huh?"]]>
|
||||
</unknown>
|
||||
</personality>
|
||||
<personality id="34">
|
||||
<title>Unused</title>
|
||||
<look></look>
|
||||
<name></name>
|
||||
<job></job>
|
||||
</personality>
|
||||
<personality id="35">
|
||||
<title>Unused</title>
|
||||
<look></look>
|
||||
<name></name>
|
||||
<job></job>
|
||||
</personality>
|
||||
<personality id="36">
|
||||
<title>Unused</title>
|
||||
<look></look>
|
||||
<name></name>
|
||||
<job></job>
|
||||
</personality>
|
||||
<personality id="37">
|
||||
<title>Unused</title>
|
||||
<look></look>
|
||||
<name></name>
|
||||
<job></job>
|
||||
</personality>
|
||||
<personality id="38">
|
||||
<title>Unused</title>
|
||||
<look></look>
|
||||
<name></name>
|
||||
<job></job>
|
||||
</personality>
|
||||
<personality id="39">
|
||||
<title>Unused</title>
|
||||
<look></look>
|
||||
<name></name>
|
||||
<job></job>
|
||||
</personality>
|
||||
<node for="30">
|
||||
<keyword>deat</keyword>
|
||||
<keyword>lost</keyword>
|
||||
<type>reg</type>
|
||||
<text>
|
||||
<![CDATA["There are three types of death you need to be concerned about: the normal kind, petrification, and dusting."]]>
|
||||
</text>
|
||||
</node>
|
||||
<node for="30">
|
||||
<keyword>conc</keyword>
|
||||
<type>reg</type>
|
||||
<text>
|
||||
<![CDATA["When you're dead, you're not much help to your party. If you're the only one who can unlock doors, for example, your teammates might be completely stuck without you!"]]>
|
||||
</text>
|
||||
<text>
|
||||
<![CDATA["And you don't gain experience, either."]]>
|
||||
</text>
|
||||
</node>
|
||||
<node for="30">
|
||||
<keyword>norm</keyword>
|
||||
<keyword>kind</keyword>
|
||||
<type>reg</type>
|
||||
<text>
|
||||
<![CDATA["Some deaths are just death. Not much else to say about those, but a Raise Dead spell will sort you out. Probably. Actually, casting those yourself, you run the risk of dusting the target. And if they do come back, they won't be as strong as before. That's a high risk operation when you're inexperienced."]]>
|
||||
</text>
|
||||
<text>
|
||||
<![CDATA["You're probably better off paying a professional healer like my associate here to fix your deaths when you're getting started on your adventures."]]>
|
||||
</text>
|
||||
</node>
|
||||
<node for="30">
|
||||
<keyword>petr</keyword>
|
||||
<keyword>ston</keyword>
|
||||
<type>reg</type>
|
||||
<text>
|
||||
<![CDATA["Watch out for basilisks and the like. They can stone you with just a glance, which is just annoying. Stoning's cheaper to reverse than your average death, but you won't learn that spell for yourself until later."]]>
|
||||
</text>
|
||||
</node>
|
||||
<node for="30">
|
||||
<keyword>dust</keyword>
|
||||
<type>reg</type>
|
||||
<text>
|
||||
<![CDATA["Dusting is the worst kind of death. It's very expensive to get sorted. It happens when you take a hit so big it quite simply blows you away. You get obliterated. It can also happen if you mess up trying to Raise a normally dead person."]]>
|
||||
</text>
|
||||
<text>
|
||||
<![CDATA["At a low level, if you have multiple party members dead, frankly, there's no coming back from it. Especially if it's your magic casters. Sometimes you're better off deleting your companions and making new ones in a major town. But between you and me, the easiest thing is to save often so you can just reload."]]>
|
||||
</text>
|
||||
</node>
|
||||
<node for="31">
|
||||
<keyword>situ</keyword>
|
||||
<keyword>heal</keyword>
|
||||
<type>shop</type>
|
||||
<param>0</param>
|
||||
<param>0</param>
|
||||
<text>
|
||||
<![CDATA[Healer]]>
|
||||
</text>
|
||||
<text>
|
||||
<![CDATA["You're clear to go. We won't keep you any longer."]]>
|
||||
</text>
|
||||
</node>
|
||||
<node for="30">
|
||||
<keyword>save</keyword>
|
||||
<keyword>relo</keyword>
|
||||
<type>reg</type>
|
||||
<text>
|
||||
<![CDATA["Type 'Control+s', or 'Command+s' on a Mac, to save your game. I do it all the time, it's how I'm basically immortal. Then it's 'Control+o' or 'Command+o' to reload."]]>
|
||||
</text>
|
||||
<text>
|
||||
<![CDATA["Once you've created your own save file, the game will also make autosaves for you. Those can come in handy."]]>
|
||||
</text>
|
||||
</node>
|
||||
<node for="31">
|
||||
<keyword>keep</keyword>
|
||||
<keyword>clea</keyword>
|
||||
<type>call-local</type>
|
||||
<param>23</param>
|
||||
<text />
|
||||
</node>
|
||||
<node for="32">
|
||||
<keyword>trai</keyword>
|
||||
<keyword>purc</keyword>
|
||||
<type>train</type>
|
||||
<text />
|
||||
</node>
|
||||
<node for="33">
|
||||
<keyword>iden</keyword>
|
||||
<type>id</type>
|
||||
<param>50</param>
|
||||
<text>
|
||||
<![CDATA["Potions, scrolls, wands... it's best to know what they do before you use them."]]>
|
||||
</text>
|
||||
</node>
|
||||
<node for="33">
|
||||
<keyword>curs</keyword>
|
||||
<type>reg</type>
|
||||
<text>
|
||||
<![CDATA["Yeah, cursed weapons and armor will really getcha. Equip one, and you won't be able to get rid of it until the curse is removed!"]]>
|
||||
</text>
|
||||
</node>
|
||||
</dialogue>
|
||||
48
rsrc/scenarios/tutorial/towns/town0.map
Normal file
48
rsrc/scenarios/tutorial/towns/town0.map
Normal file
@@ -0,0 +1,48 @@
|
||||
112,112,112,112,112,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111
|
||||
112,112,112,112,112,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,112,112,112,112,112
|
||||
112,112,112,112,112,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,112,112,112,112,112
|
||||
112,112,112,112,112,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,112,112,112,112,112
|
||||
112,112,112,112,112,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,2v,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,112,112,112,112,112
|
||||
112,112,112,112,112,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,111,111,111,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,112,112,112,112,112
|
||||
112,112,112,112,112,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,122,111,111,111,122,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,112,112,112,112,112
|
||||
112,112,112,112,112,170,170,170,170,170,170,170,170,170,170,170,170,170,122,122,122,122,122,122,131:1&9,122,122,122,122,122,122,170,170,170,170,170,170,170,170,170,170,170,170,112,112,112,112,112
|
||||
112,112,112,112,112,170,170,170,170,170,170,170,170,170,170,170,170,170,136,177@0,176@1,194@4,138,170:3,170:3,170:3,138,194@7,178@2,177@3,136,170,170,170,170,170,170,170,170,170,170,170,170,112,112,112,112,112
|
||||
112,112,112,112,112,170,170,170,170,170,170,170,170,170,170,170,170,170,122,170,170,170:5,133:50,170,170,170,122,170,170,170,122,170,170,170,170,170,170,170,170,170,170,170,170,112,112,112,112,112
|
||||
112,112,112,112,112,170,170,170,170,170,170,170,170,170,170,170,170,170,136,170,170,170:5,138,170,170:6&9,170,138,170,170,170,136,170,170,170,170,170,170,170,170,170,170,170,170,112,112,112,112,112
|
||||
112,112,112,112,112,170,170,170,170,170,170,170,170,122,122,122,122,122,122,125,122,122,122,122,130,122,122,122,122,125,122,122,122,122,122,122,170,170,170,170,170,170,170,112,112,112,112,112
|
||||
112,112,112,112,112,170,122,122,122,122,122,122,122,122,174,170,170,170,170,170,170,170,170,170,170,170,170,257,170,170,170,170,170,170,174,122,170,170,170,170,170,170,170,112,112,112,112,112
|
||||
112,112,112,112,112,170,122,170,197,197,170,170,170,125:7,170,170,170,170,170,170,170,170,170,170,170:49&9,170,170,257,170,170,170,170,170,170,170,122,170,170,170,170,170,170,170,112,112,112,112,112
|
||||
112,112,112,112,112,170,122,198,185,183,170,197,197,122,170,170,174,122,122,122,122,122,122,136,130,136,122,122,122,122,122,122,174,170,170,122,170,170,170,170,170,170,170,112,112,112,112,112
|
||||
112,112,112,112,112,170,122,170,195,195,170,185,183,122,257,257,170,122,2,2,2,115,2,111,2,2,3,111,111,2,111,122,170,170,170,122,170,170,170,170,170,170,170,112,112,112,112,112
|
||||
112,112,112,112,112,170,122,170,170,170,170,195,195,122,170,257,257,122,111,2,111,2,2,2,3,111,2,3,114,115,111,122,170,170,170,122,170,170,170,170,170,170,170,112,112,112,112,112
|
||||
112,112,112,112,112,170,122,122,129:8,122,122,122,122,122,170,170,170,122,114,3,3,111,2,115,2,2,111,2,111,2,114,122,170,170,170,122,170,170,170,170,170,170,170,112,112,112,112,112
|
||||
112,112,112,112,112,170,122,171:37,171:37,171:37&10,178@5,177,177,122,170,170,170,122,111,2,111,56,55,55,55,68,55,55,55,54,111,122,170,170,170,122,170,170,170,170,170,170,170,112,112,112,112,112
|
||||
112,112,112,112,112,170,122,170,170&10,170,170&10,170$1,170$2,122,170:48,170,170,122,2,111,2,57,50,50,62,70,59,50,50,53,2,122,170,170,170,122,170,170,170,170,170,170,170,112,112,112,112,112
|
||||
112,112,112,112,112,170,122,170,202,202,170@6$0,170&10,170:19&10&9,134,170:48,170,170,122,2,2,111,57,50,50,53,2:24&9,58,59,50,53,111,122,170,170,170,122,170,170,170,170,170,170,170,112,112,112,112,112
|
||||
112,112,112,112,112,170,122,122,122,122,122,122,122,122,170:48,170,170,122,111,111,2,58,51,51,52,111,111,58,51,52,2,122,170,170,170,122,170,170,170,170,170,170,170,112,112,112,112,112
|
||||
112,112,112,112,112,170,170,170,170,170,170,170,170,122,170,170,170,122,114,2,111,2,2,111,2,111,2,2,111,2,2,122,170,170,170,122,170,170,170,170,170,170,170,112,112,112,112,112
|
||||
112,112,112,112,112,170,170,170,170,170,170,170,170,122,170,170,170,122,2,111,2,2,111,2,111,2,2,2,2,2,111,122,170,170,170,122,170,170,170,170,170,170,170,112,112,112,112,112
|
||||
112,112,112,112,112>,170,170,170,170,170,170,170,170,122,170,170,174,122,122,122,122,122,122,122,136,130,136,122,122,122,122,122,174,170,170,122,170,170,170,170,170,170,170,112<,112,112,112,112
|
||||
112,112,112,112,112,170,170,170,170,170,170,170,170,122,170,170,170,170,170,170,170,170,170,170,208:28,170:25&9,170,170,170,170,170,170,170,170,170,122,170,170,170,170,170,170,170,112,112,112,112,112
|
||||
112,112,112,112,112,170,170,170,170,170,170,170,170,122,174,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,174,122,170,170,170,170,170,170,170,112,112,112,112,112
|
||||
112,112,112,112,112,170,170,170,170,170,170,170,170,122,122,122,122,122,122,122,122,122,122,122,122,125,122,122,122,122,122,122,122,122,122,122,170,170,170,170,170,170,170,112,112,112,112,112
|
||||
112,112,112,112,112,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,122,204:30,170:30,204:30,122,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,112,112,112,112,112
|
||||
112,112,112,112,112,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,137,204,170,204,137,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,112,112,112,112,112
|
||||
112,112,112,112,112,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,122,204,170,204,122,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,112,112,112,112,112
|
||||
112,112,112,112,112,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,137,186:32,193,186:33,137,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,112,112,112,112,112
|
||||
112,112,112,112,112,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,112,122,122,258:34,122,122,112,170,170,170,170,170,170,170,170,170,170,170,170,170,170,112,112,112,112,112
|
||||
112,112,112,112,112,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,112,112,2,2,2^,2,2,112,112,170,170,170,170,170,170,170,170,170,170,170,170,170,112,112,112,112,112
|
||||
112,112,112,112,112,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,112,2,2,2,2,2,2,2,112,170,170,170,170,170,170,170,170,170,170,170,170,170,112,112,112,112,112
|
||||
112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,2,2,2,2,2,2,2,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112
|
||||
112,112,112,112,112,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,112,112,112,112,112
|
||||
112,112,112,112,112,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,112,112,112,112,112
|
||||
112,112,112,112,112,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,112,112,112,112,112
|
||||
112,112,112,112,112,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,112,112,112,112,112
|
||||
112,112,112,112,112,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,112,112,112,112,112
|
||||
112,112,112,112,112,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,112,112,112,112,112
|
||||
112,112,112,112,112,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,112,112,112,112,112
|
||||
112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112
|
||||
112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112
|
||||
112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112
|
||||
112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112
|
||||
112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112
|
||||
357
rsrc/scenarios/tutorial/towns/town0.spec
Normal file
357
rsrc/scenarios/tutorial/towns/town0.spec
Normal file
@@ -0,0 +1,357 @@
|
||||
@once-dlog = 0
|
||||
sdf -1, -1
|
||||
msg 2, -1, 1
|
||||
pic 92, 1
|
||||
ex1 -1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto 4
|
||||
@if-status = 1
|
||||
sdf -1, -1
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 2, 2, -1
|
||||
ex2 1, 0, 2
|
||||
goto -1
|
||||
@block-move = 2
|
||||
sdf -1, -1
|
||||
msg 0, -1, -1
|
||||
pic 0, 4
|
||||
ex1 1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto -1
|
||||
@once-disp-msg = 3
|
||||
sdf 0, 0
|
||||
msg 1, 45, -1
|
||||
pic 0, 4
|
||||
ex1 -1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto 29
|
||||
@once-dlog = 4
|
||||
sdf -1, -1
|
||||
msg 8, -1, 1
|
||||
pic 95, 1
|
||||
ex1 -1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto -1
|
||||
@once-disp-msg = 5
|
||||
sdf 0, 1
|
||||
msg 14, -1, -1
|
||||
pic 0, 4
|
||||
ex1 -1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto -1
|
||||
@if-ter = 6
|
||||
sdf -1, -1
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 22, 9, -1
|
||||
ex2 133, 0, -1
|
||||
goto -1
|
||||
@once-disp-msg = 7
|
||||
sdf 0, 2
|
||||
msg 15, -1, -1
|
||||
pic 0, 4
|
||||
ex1 -1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto -1
|
||||
@once-dlog = 8
|
||||
sdf 0, 3
|
||||
msg 16, -1, 1
|
||||
pic 102, 3
|
||||
ex1 -1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto -1
|
||||
@inc-sdf = 9
|
||||
sdf 0, 4
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 1, 0, -1
|
||||
ex2 -1, -1, -1
|
||||
goto 10
|
||||
@if-sdf = 10
|
||||
sdf 0, 4
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 3, 16, -1
|
||||
ex2 -1, -1, -1
|
||||
goto -1
|
||||
@once-dlog = 11
|
||||
sdf -1, -1
|
||||
msg 22, -1, 1
|
||||
pic 0, 4
|
||||
ex1 -1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto -1
|
||||
@if-status = 12
|
||||
sdf -1, -1
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 6, 14, -1
|
||||
ex2 1, 0, 2
|
||||
goto 15
|
||||
@if-sdf = 13
|
||||
sdf 0, 4
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 3, 12, -1
|
||||
ex2 -1, -1, -1
|
||||
goto -1
|
||||
@if-sdf = 14
|
||||
sdf 0, 5
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto 11
|
||||
@set-sdf = 15
|
||||
sdf 0, 5
|
||||
msg 28, -1, -1
|
||||
pic 0, 4
|
||||
ex1 1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto 17
|
||||
@disp-msg = 16
|
||||
sdf -1, -1
|
||||
msg 29, -1, -1
|
||||
pic 0, 4
|
||||
ex1 -1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto 18
|
||||
@set-sdf = 17
|
||||
sdf 0, 4
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 0, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto -1
|
||||
@set-sdf = 18
|
||||
sdf 0, 6
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto -1
|
||||
@if-sdf = 19
|
||||
sdf 0, 6
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 1, 20, -1
|
||||
ex2 -1, -1, -1
|
||||
goto -1
|
||||
@if-ter = 20
|
||||
sdf -1, -1
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 13, 20, -1
|
||||
ex2 134, 21, -1
|
||||
goto -1
|
||||
@once-dlog = 21
|
||||
sdf -1, -1
|
||||
msg 31, -1, 1
|
||||
pic 96, 1
|
||||
ex1 -1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto -1
|
||||
@if-spec-item = 22
|
||||
sdf -1, -1
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 0, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto 23
|
||||
@disp-msg = 23
|
||||
sdf -1, -1
|
||||
msg 37, -1, -1
|
||||
pic 0, 4
|
||||
ex1 -1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto -1
|
||||
@once-give-spec-item = 24
|
||||
sdf 0, 7
|
||||
msg 38, 46, -1
|
||||
pic 0, 4
|
||||
ex1 0, 0, -1
|
||||
ex2 -1, -1, -1
|
||||
goto 36
|
||||
@if-ter = 25
|
||||
sdf -1, -1
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 25, 24, -1
|
||||
ex2 130, 26, -1
|
||||
goto -1
|
||||
@once-dlog = 26
|
||||
sdf -1, -1
|
||||
msg 39, -1, 1
|
||||
pic 214, 1
|
||||
ex1 -1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto -1
|
||||
@change-ter = 27
|
||||
sdf -1, -1
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 25, 24, -1
|
||||
ex2 131, -1, -1
|
||||
goto -1
|
||||
@lever-generic = 28
|
||||
sdf -1, -1
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 -1, 27, -1
|
||||
ex2 -1, -1, -1
|
||||
goto -1
|
||||
@change-ter = 29
|
||||
sdf -1, -1
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 24, 7, -1
|
||||
ex2 130, -1, -1
|
||||
goto -1
|
||||
@if-spec-item = 30
|
||||
sdf -1, -1
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 0, 31, -1
|
||||
ex2 -1, -1, -1
|
||||
goto 35
|
||||
@once-dlog = 31
|
||||
sdf -1, -1
|
||||
msg 47, -1, 1
|
||||
pic 137, 1
|
||||
ex1 -1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto -1
|
||||
@spell-priest = 32
|
||||
sdf -1, -1
|
||||
msg 55, -1, -1
|
||||
pic 0, 4
|
||||
ex1 18, 0, -1
|
||||
ex2 -1, -1, -1
|
||||
goto -1
|
||||
@spell-priest = 33
|
||||
sdf -1, -1
|
||||
msg 56, -1, -1
|
||||
pic 0, 4
|
||||
ex1 27, 0, -1
|
||||
ex2 -1, -1, -1
|
||||
goto -1
|
||||
@disp-msg = 34
|
||||
sdf -1, -1
|
||||
msg 53, -1, -1
|
||||
pic 0, 4
|
||||
ex1 -1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto -1
|
||||
@block-move = 35
|
||||
sdf -1, -1
|
||||
msg 54, -1, -1
|
||||
pic 0, 4
|
||||
ex1 1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto -1
|
||||
@inc-sdf = 36
|
||||
sdf 1, 4
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 1, 0, -1
|
||||
ex2 -1, -1, -1
|
||||
goto -1
|
||||
@if-context = 37
|
||||
sdf -1, -1
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 2, -1, 45
|
||||
ex2 -1, -1, -1
|
||||
goto 46
|
||||
@if-statistic = 38
|
||||
sdf -1, -1
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 2, 39, -1
|
||||
ex2 9, -1, -1
|
||||
goto 40
|
||||
@once-dlog = 39
|
||||
sdf 0, 9
|
||||
msg 57, -1, 1
|
||||
pic 25, 4
|
||||
ex1 -1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto 42
|
||||
@if-statistic = 40
|
||||
sdf -1, -1
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 4, 41, -1
|
||||
ex2 7, -1, -1
|
||||
goto 43
|
||||
@once-dlog = 41
|
||||
sdf 0, 8
|
||||
msg 63, -1, 1
|
||||
pic 57, 7
|
||||
ex1 -1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto -1
|
||||
@nop = 42
|
||||
sdf -1, -1
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 -1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto -1
|
||||
@if-statistic = 43
|
||||
sdf -1, -1
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 3, 44, -1
|
||||
ex2 10, -1, -1
|
||||
goto -1
|
||||
@once-dlog = 44
|
||||
sdf 0, 10
|
||||
msg 69, -1, 1
|
||||
pic 26, 4
|
||||
ex1 -1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto -1
|
||||
@block-move = 45
|
||||
sdf -1, -1
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 0, -1, -1
|
||||
ex2 1, -1, -1
|
||||
goto 38
|
||||
@if-sdf = 46
|
||||
sdf 0, 6
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto 47
|
||||
@block-move = 47
|
||||
sdf -1, -1
|
||||
msg 75, -1, -1
|
||||
pic 0, 4
|
||||
ex1 1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto -1
|
||||
@once-dlog = 48
|
||||
sdf 0, 11
|
||||
msg 76, -1, 1
|
||||
pic 14, 4
|
||||
ex1 -1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto -1
|
||||
@once-disp-msg = 49
|
||||
sdf 0, 12
|
||||
msg 82, -1, -1
|
||||
pic 0, 4
|
||||
ex1 -1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto -1
|
||||
@if-ter = 50
|
||||
sdf -1, -1
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 22, 9, -1
|
||||
ex2 133, 4, -1
|
||||
goto -1
|
||||
181
rsrc/scenarios/tutorial/towns/town0.xml
Normal file
181
rsrc/scenarios/tutorial/towns/town0.xml
Normal file
@@ -0,0 +1,181 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||
<town boes="2.0.0">
|
||||
<size>48</size>
|
||||
<name>Marshy Tower</name>
|
||||
<comment>Comment 1</comment>
|
||||
<comment>Comment 2</comment>
|
||||
<comment>Comment 3</comment>
|
||||
<bounds top="3" left="3" bottom="34" right="47" />
|
||||
<difficulty>0</difficulty>
|
||||
<lighting>lit</lighting>
|
||||
<timer freq="2">13</timer>
|
||||
<timer freq="0">0</timer>
|
||||
<flags>
|
||||
<chop kills="30000" />
|
||||
</flags>
|
||||
<item id="0">
|
||||
<type>109</type>
|
||||
</item>
|
||||
<item id="1">
|
||||
<type>103</type>
|
||||
</item>
|
||||
<item id="2">
|
||||
<type>106</type>
|
||||
</item>
|
||||
<item id="3">
|
||||
<type>106</type>
|
||||
</item>
|
||||
<item id="4">
|
||||
<type>155</type>
|
||||
<contained>true</contained>
|
||||
</item>
|
||||
<item id="5">
|
||||
<type>19</type>
|
||||
</item>
|
||||
<item id="6">
|
||||
<type>19</type>
|
||||
</item>
|
||||
<item id="7">
|
||||
<type>0</type>
|
||||
<charges>50</charges>
|
||||
<contained>true</contained>
|
||||
</item>
|
||||
<creature id="0">
|
||||
<type>118</type>
|
||||
<attitude>hostile-a</attitude>
|
||||
<mobility>1</mobility>
|
||||
<personality>-1</personality>
|
||||
<face>0</face>
|
||||
<onkill>9</onkill>
|
||||
</creature>
|
||||
<creature id="1">
|
||||
<type>118</type>
|
||||
<attitude>hostile-a</attitude>
|
||||
<mobility>1</mobility>
|
||||
<personality>-1</personality>
|
||||
<face>0</face>
|
||||
<onkill>9</onkill>
|
||||
</creature>
|
||||
<creature id="2">
|
||||
<type>118</type>
|
||||
<attitude>hostile-a</attitude>
|
||||
<mobility>1</mobility>
|
||||
<personality>-1</personality>
|
||||
<face>0</face>
|
||||
<onkill>9</onkill>
|
||||
</creature>
|
||||
<string id="0">
|
||||
<![CDATA[Your priest, Michael, stops the party. "Let's not go in anywhere dangerous while any of us are poisoned. I'll cure us by pressing 'p' or the ankh button to open the Priest Spells menu, choosing myself as the caster, choosing Cure Poison, then choosing a target, and pressing 'cast.'"]]>
|
||||
</string>
|
||||
<string id="1">
|
||||
<![CDATA[This tower is slowly sinking into the marsh. Not fast enough to be of concern for you, though.]]>
|
||||
</string>
|
||||
<string id="2">
|
||||
<![CDATA[Your expedition has hit another snag. This abandoned security checkpoint shows no way of opening from the outside.]]>
|
||||
</string>
|
||||
<string id="8">
|
||||
<![CDATA[Michael points to a crack in the wall. "I can break that with another Priest spell!"]]>
|
||||
</string>
|
||||
<string id="9">
|
||||
<![CDATA[You can also cast Priest spells using the 'Cast Priest' menu at the top of the screen. First, click Michael's name in the 'Party Stats' panel in the upper right, to select him.]]>
|
||||
</string>
|
||||
<string id="10">
|
||||
<![CDATA[Then, cast the Priest spell 'Move Mountains' and select the cracked wall to destroy it.]]>
|
||||
</string>
|
||||
<string id="14">
|
||||
<![CDATA[Whenever this tower was last occupied, some supplies were left here for guards on duty. You can search containers by looking at them with 'l'/right-click, and you can take items you find lying around by pressing 'g' or the hand button.]]>
|
||||
</string>
|
||||
<string id="15">
|
||||
<![CDATA[With no way around the rubble in the main hall, you wander into the dining hall. Maybe it connects with another part of the tower.]]>
|
||||
</string>
|
||||
<string id="16">
|
||||
<![CDATA[Oh, no! This pantry has been infested with giant spiders.]]>
|
||||
</string>
|
||||
<string id="17">
|
||||
<![CDATA[Press 'f' to enter combat mode. ]]>
|
||||
</string>
|
||||
<string id="22">
|
||||
<![CDATA[Now that the spiders are dead, you probably want to clean off their webs. Control+w, or Command+w on a Mac, will make the party rest for a short time in town or a dungeon, long enough to clean off any webs. You can also select 'Wait 80 Moves' in the Action menu.]]>
|
||||
</string>
|
||||
<string id="28">
|
||||
<![CDATA[You can also clean webs off of map tiles by clicking the 'Use' button (or typing 'u') and selecting a tile with webs on it.]]>
|
||||
</string>
|
||||
<string id="29">
|
||||
<![CDATA[Press 'f' again, or click the Sword button, to end combat mode.]]>
|
||||
</string>
|
||||
<string id="30">
|
||||
<![CDATA[timer called]]>
|
||||
</string>
|
||||
<string id="31">
|
||||
<![CDATA[Once again, Michael recognizes a weakened spot in the wall where mold has grown through the bricks. Casting Move Mountains here will make the opening you need to explore further.]]>
|
||||
</string>
|
||||
<string id="32">
|
||||
<![CDATA[(When building your own party, you should probably always give at least one of your characters 2 levels of Priest Spells skill! Some older scenarios assume you will be able to cast Move Mountains, and to recognize vulnerable walls. You can get stuck without it.)]]>
|
||||
</string>
|
||||
<string id="37">
|
||||
<![CDATA[Through the gate, you see what remains of a courtyard. The first artifact piece is in there! Too bad the gate won't open.]]>
|
||||
</string>
|
||||
<string id="38">
|
||||
<![CDATA[You collect the first piece of the artifact! It's wet....]]>
|
||||
</string>
|
||||
<string id="39">
|
||||
<![CDATA[Finally! A mechanism for opening one of these gates.]]>
|
||||
</string>
|
||||
<string id="40">
|
||||
<![CDATA[You can operate most levers by using, looking, or moving onto them.]]>
|
||||
</string>
|
||||
<string id="45">
|
||||
<![CDATA[More concerning, is how the portcullis clangs shut behind you!]]>
|
||||
</string>
|
||||
<string id="46">
|
||||
<![CDATA[Well, with the front gate now closed, you'll need to find another way out.]]>
|
||||
</string>
|
||||
<string id="47">
|
||||
<![CDATA[You see a window high in the southern wall of this chapel. Maybe you could crawl through it, if only you could stand on something tall.]]>
|
||||
</string>
|
||||
<string id="48">
|
||||
<![CDATA[Like that altar! The gods won't mind if you move their idols aside... probably.]]>
|
||||
</string>
|
||||
<string id="49">
|
||||
<![CDATA[Click the 'Use' button, or type 'u', then select a tile to use it.]]>
|
||||
</string>
|
||||
<string id="53">
|
||||
<![CDATA[Disease is an extremely unpleasant status to have. Michael has a priest spell, Cure Disease, that can fix it.]]>
|
||||
</string>
|
||||
<string id="54">
|
||||
<![CDATA[There appears to be a small chapel here. Maybe you can look into it after searching the courtyard to the north.]]>
|
||||
</string>
|
||||
<string id="55">
|
||||
<![CDATA[This book describes how to cast a new priest spell: Disease.]]>
|
||||
</string>
|
||||
<string id="56">
|
||||
<![CDATA[This book describes how to cast a new priest spell: Cure Disease.]]>
|
||||
</string>
|
||||
<string id="57">
|
||||
<![CDATA[Adrianna and Feodoric can cast mage spells. Press 'm' on their turn, use the 'Cast Mage' menu item, or click the flaming orb button to do so. Lots of mage spells are useful in combat! Try Flame or Fireball for wiping out enemies early on.]]>
|
||||
</string>
|
||||
<string id="63">
|
||||
<![CDATA[Frrrrrr comes prepared with a bow and arrow. To fire, type 's' or click the button of an arrow, then select a tile with an enemy on it.]]>
|
||||
</string>
|
||||
<string id="64">
|
||||
<![CDATA[You'll want to keep stocked up on arrows, but Frrrrrr can also wield melee weapons if you find an extra for them.]]>
|
||||
</string>
|
||||
<string id="69">
|
||||
<![CDATA[Priests are useful in combat, too! They have spells like Wound for dealing damage, Stumble for disabling enemies, or Charm Foe for turning enemies against each other.]]>
|
||||
</string>
|
||||
<string id="70">
|
||||
<![CDATA[Most importantly, though, they can heal your party when someone's injured!]]>
|
||||
</string>
|
||||
<string id="71">
|
||||
<![CDATA[(Feodoric can also cast some priest spells.)]]>
|
||||
</string>
|
||||
<string id="75">
|
||||
<![CDATA[Start combat mode before going in there!]]>
|
||||
</string>
|
||||
<string id="76">
|
||||
<![CDATA[There are MANY other spells in Blades of Exile! To learn how any other spell works, open the Mage or Priest spells menu, then hold the Alt key (or Option key on a Mac) while clicking on the spell.]]>
|
||||
</string>
|
||||
<string id="82">
|
||||
<![CDATA[Through this portcullis, you can see the next piece of the artifact. But you can't get it open.]]>
|
||||
</string>
|
||||
</town>
|
||||
24
rsrc/scenarios/tutorial/towns/town1.map
Normal file
24
rsrc/scenarios/tutorial/towns/town1.map
Normal file
@@ -0,0 +1,24 @@
|
||||
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2
|
||||
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2
|
||||
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2
|
||||
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2
|
||||
2,2,2,2,2,2,2,2,122,136,122,136,122,136,122,136,122,2,2,2,2,2,2,2
|
||||
2,2,2,2,2,2,122,122,122,186:5,122,186:18,122,186:8,122,186:21,122,122,122,2,2,2,2,2
|
||||
2,2,2,2,122,122,136,206:0,170,204,170,204,170,204,170,204,170,207,136,2,2,2,2,2
|
||||
2,2,2,2,122,170,170,170:0,170,170,170,170,170,170,170,170,170,251:24,122,2,2,2,2,2
|
||||
2,2,2,2,122,122,136,206:0,170,170,170,170,170,170,170,170,170,207,136,2,2,2,2,2
|
||||
2,2,2,2,2,2,122,122,122,136,122,136,122,136,122,136,122,122,122,2,2,2,2,2
|
||||
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2
|
||||
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2
|
||||
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2
|
||||
2,2,2,2,2,2,2,2,2,2,122,122,122,122,122,2,2,2,2,2,2,2,2,2
|
||||
2,2,2,2,2,2,2,2,2,122,122,170,251,170,122,122,122,122,2,2,2,2,2,2
|
||||
2,2,2,2,2,2,2,2,2,122,187,170,170,170,187,122,122,122,2,2,2,2,2,2
|
||||
2,2,2,2,2,2,2,2,2,122,206,170,170,170,170,173:29,251:31,122,2,2,2,2,2,2
|
||||
2,2,2,2,2,2,2,2,2,122,122,170,170,170,122,132!0,122,122,2,2,2,2,2,2
|
||||
2,2,2,2,2,2,2,2,2,2,122,122,170:27&9,122,122,2,2,2,2,2,2,2,2,2
|
||||
2,2,2,2,2,2,2,2,2,2,2,122,131v<^>,122,2,2,2,2,2,2,2,2,2,2
|
||||
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2
|
||||
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2
|
||||
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2
|
||||
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2
|
||||
224
rsrc/scenarios/tutorial/towns/town1.spec
Normal file
224
rsrc/scenarios/tutorial/towns/town1.spec
Normal file
@@ -0,0 +1,224 @@
|
||||
@once-disp-msg = 0
|
||||
sdf 1, 2
|
||||
msg 0, 1, -1
|
||||
pic 0, 4
|
||||
ex1 -1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto 3
|
||||
@if-look = 1
|
||||
sdf -1, -1
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 -1, -1, 2
|
||||
ex2 -1, -1, -1
|
||||
goto -1
|
||||
@set-sdf = 2
|
||||
sdf 1, 0
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto -100
|
||||
@set-ptr = 3
|
||||
sdf 1, 1
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 100, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto -1
|
||||
@nop = 4
|
||||
sdf -1, -1
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 -1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto -1
|
||||
@set-sdf = 5
|
||||
sdf 1, 1
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 6, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto 1
|
||||
@once-dlog = 6
|
||||
sdf -1, -1
|
||||
msg 3, -1, 1
|
||||
pic 24, 4
|
||||
ex1 34, 7, -1
|
||||
ex2 -1, -1, -1
|
||||
goto -1
|
||||
@story-dlog = 7
|
||||
sdf -1, -1
|
||||
msg 3, 10, 14
|
||||
pic 24, 4
|
||||
ex1 -1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto -1
|
||||
@set-sdf = 8
|
||||
sdf 1, 1
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 9, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto 1
|
||||
@once-dlog = 9
|
||||
sdf -1, -1
|
||||
msg 15, -1, 1
|
||||
pic 24, 4
|
||||
ex1 34, 10, -1
|
||||
ex2 -1, -1, -1
|
||||
goto -1
|
||||
@title-msg = 10
|
||||
sdf -1, -1
|
||||
msg 21, -1, 25
|
||||
pic 17, 4
|
||||
ex1 -1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto 14
|
||||
@title-msg = 11
|
||||
sdf -1, -1
|
||||
msg 24, 32, 23
|
||||
pic 85, 3
|
||||
ex1 -1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto 13
|
||||
@title-msg = 12
|
||||
sdf -1, -1
|
||||
msg 22, 31, 9
|
||||
pic 22, 4
|
||||
ex1 -1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto 11
|
||||
@title-msg = 13
|
||||
sdf -1, -1
|
||||
msg 34, 35, 33
|
||||
pic 28, 4
|
||||
ex1 -1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto 17
|
||||
@title-msg = 14
|
||||
sdf -1, -1
|
||||
msg 27, 28, 26
|
||||
pic 38, 3
|
||||
ex1 -1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto 15
|
||||
@title-msg = 15
|
||||
sdf -1, -1
|
||||
msg 30, -1, 29
|
||||
pic 45, 3
|
||||
ex1 -1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto 12
|
||||
@nop = 16
|
||||
sdf -1, -1
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 -1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto -1
|
||||
@title-msg = 17
|
||||
sdf -1, -1
|
||||
msg 37, 38, 36
|
||||
pic 2, 4
|
||||
ex1 -1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto -1
|
||||
@set-sdf = 18
|
||||
sdf 1, 1
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 19, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto 1
|
||||
@once-dlog = 19
|
||||
sdf -1, -1
|
||||
msg 39, -1, 1
|
||||
pic 24, 4
|
||||
ex1 34, 20, -1
|
||||
ex2 -1, -1, -1
|
||||
goto -1
|
||||
@once-dlog = 20
|
||||
sdf -1, -1
|
||||
msg 45, -1, 1
|
||||
pic 24, 4
|
||||
ex1 -1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto -1
|
||||
@set-sdf = 21
|
||||
sdf 1, 1
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 22, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto 1
|
||||
@once-dlog = 22
|
||||
sdf -1, -1
|
||||
msg 51, -1, 1
|
||||
pic 24, 4
|
||||
ex1 34, 23, -1
|
||||
ex2 -1, -1, -1
|
||||
goto -1
|
||||
@once-dlog = 23
|
||||
sdf -1, -1
|
||||
msg 57, -1, 1
|
||||
pic 24, 4
|
||||
ex1 -1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto -1
|
||||
@if-sdf = 24
|
||||
sdf 1, 0
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 1, 25, -1
|
||||
ex2 -1, -1, -1
|
||||
goto 26
|
||||
@portal-generic = 25
|
||||
sdf -1, -1
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 12, 14, -1
|
||||
ex2 -1, -1, -1
|
||||
goto -1
|
||||
@disp-msg = 26
|
||||
sdf -1, -1
|
||||
msg 63, 64, -1
|
||||
pic 0, 4
|
||||
ex1 -1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto -1
|
||||
@once-dlog = 27
|
||||
sdf 1, 3
|
||||
msg 65, -1, 1
|
||||
pic 0, 4
|
||||
ex1 -1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto -1
|
||||
@block-move = 28
|
||||
sdf -1, -1
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto -1
|
||||
@if-sdf = 29
|
||||
sdf 1, 4
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 3, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto 30
|
||||
@block-move = 30
|
||||
sdf -1, -1
|
||||
msg 71, -1, -1
|
||||
pic 0, 4
|
||||
ex1 1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto -1
|
||||
@end-scen = 31
|
||||
sdf -1, -1
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 -1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto -1
|
||||
155
rsrc/scenarios/tutorial/towns/town1.xml
Normal file
155
rsrc/scenarios/tutorial/towns/town1.xml
Normal file
@@ -0,0 +1,155 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||
<town boes="2.0.0">
|
||||
<size>24</size>
|
||||
<name>Part 1: Lore</name>
|
||||
<comment>Comment 1</comment>
|
||||
<comment>Comment 2</comment>
|
||||
<comment>Comment 3</comment>
|
||||
<bounds top="3" left="3" bottom="20" right="20" />
|
||||
<difficulty>0</difficulty>
|
||||
<lighting>lit</lighting>
|
||||
<flags>
|
||||
<chop kills="30000" />
|
||||
</flags>
|
||||
<sign id="0">
|
||||
<![CDATA[To exit, gather the 3 pieces of the artifact!]]>
|
||||
</sign>
|
||||
<string id="0">
|
||||
<![CDATA[This room contains multiple books explaining the almost 30-year history of Blades of Exile! To read one, you must be standing next to it. Then, either right-click its space, or click the eye button in your hotbar (hotkey: 'l' for look) before selecting its space.]]>
|
||||
</string>
|
||||
<string id="1">
|
||||
<![CDATA[Try glancing at at least one of them before you rush off through the portal to the east.]]>
|
||||
</string>
|
||||
<string id="2">
|
||||
<![CDATA[happened]]>
|
||||
</string>
|
||||
<string id="3">
|
||||
<![CDATA["What in the world is a Role-Playing Game?"]]>
|
||||
</string>
|
||||
<string id="4">
|
||||
<![CDATA[A primer for the TRULY uninitiated.]]>
|
||||
</string>
|
||||
<string id="9">
|
||||
<![CDATA[Exile: Escape from the Pit]]>
|
||||
</string>
|
||||
<string id="10">
|
||||
<![CDATA[Do you remember being young and pretending you were a knight or a wizard or a space explorer? Or maybe you pretended to be one of those things just yesterday. Whenever it last happened, you were role-playing.]]>
|
||||
</string>
|
||||
<string id="11">
|
||||
<![CDATA[Role-Playing Games are structured ways to imagine being someone, somewhere, or someTHING else. People play RPGs to experience relief from normal, restrictive life, or to process intense subjects that might feel inappropriate in a casual conversation. Sometimes both at the same time!]]>
|
||||
</string>
|
||||
<string id="12">
|
||||
<![CDATA[Fantasy RPGs like this one set up a rich and often magical environment where you get to be the hero. With enough training and tactical know-how, you can stand up to any threat you come across.]]>
|
||||
</string>
|
||||
<string id="13">
|
||||
<![CDATA[In Blades of Exile you will control a party of adventurers fighting monsters, exploring treacherous dungeons, and navigating political intrigue. All of that can get pretty complicated, especially because this game was created in 1997, a time when you could be expected to read an entire manual BEFORE launching anything on your computer.]]>
|
||||
</string>
|
||||
<string id="14">
|
||||
<![CDATA[We (the small group of volunteers working to preserve this game) want as many people as possible to enjoy it, and that includes you! Even if you've never played an RPG before. This tutorial is our best effort at helping you get started.]]>
|
||||
</string>
|
||||
<string id="15">
|
||||
<![CDATA["What Do I Need to Know About the world of Exile?"]]>
|
||||
</string>
|
||||
<string id="16">
|
||||
<![CDATA[A really quick lore dump.]]>
|
||||
</string>
|
||||
<string id="21">
|
||||
<![CDATA[The continent of Valorim is ruled by the Empire, a tyrannical regime that controls almost everything on its surface. The Empire wiped almost every magical or non-human form of life out of existence, banishing the rest to a prison colony, Exile, in a vast network of inhospitable caves.]]>
|
||||
</string>
|
||||
<string id="22">
|
||||
<![CDATA[In Exile I, you are thrown into the Pit for your disobedience. There, you discover an entire society of people the Empire tried to cast aside, imperiled by war with the sliths. You achieve glory as the adventurers who kill their leader Sss-Thsss, ending that war.]]>
|
||||
</string>
|
||||
<string id="23">
|
||||
<![CDATA[Exile II: Crystal Souls]]>
|
||||
</string>
|
||||
<string id="24">
|
||||
<![CDATA[In Exile II, peace has been attained with the sliths, but the Empire wages a retaliatory war against Exile, threatening to wipe out the fragile civilization that has developed in the caves over centuries. In so doing, they uncover an ancient alien race known as the Vahnatai, and plunder their sacred artifacts known as Crystal Souls. Each Crystal Soul contains a revered, immortalized Vahnatai.]]>
|
||||
</string>
|
||||
<string id="25">
|
||||
<![CDATA[The Empire]]>
|
||||
</string>
|
||||
<string id="26">
|
||||
<![CDATA[Nephilim]]>
|
||||
</string>
|
||||
<string id="27">
|
||||
<![CDATA[Among the creatures the Empire nearly eradicated, there was an entire species with its own culture and customs. This is one of them, a nephil. Feline humanoids, nephilim tend to be more dextrous than humans.]]>
|
||||
</string>
|
||||
<string id="28">
|
||||
<![CDATA[Most surviving nephilim live underground, where they were either banished or fled.]]>
|
||||
</string>
|
||||
<string id="29">
|
||||
<![CDATA[Slithzerikai]]>
|
||||
</string>
|
||||
<string id="30">
|
||||
<![CDATA[Slithzerikai, or sliths, are humanoid lizards who occupied the caves of Exile before the Empire started throwing its subjects down there. As exiled humans and nephilim expanded their underground society, a drawn-out war with the slithzerikai ensued.]]>
|
||||
</string>
|
||||
<string id="31">
|
||||
<![CDATA[Then, joining with a group of powerful and angry rebel mages, you find a way back to the surface and strike a vengeful blow by killing the Emperor Hawthorne.]]>
|
||||
</string>
|
||||
<string id="32">
|
||||
<![CDATA[The Vahnatai, wary of the exiled humans and nephils who have encroached on their caves, make a pact with the people of Exile, to fight together against the Empire's war of domination. Together, you recover the Crystal Souls and repel the invasion.]]>
|
||||
</string>
|
||||
<string id="33">
|
||||
<![CDATA[Exile III: Ruined World]]>
|
||||
</string>
|
||||
<string id="34">
|
||||
<![CDATA[In Exile III, people of the underground nation have begun emerging from their long captivity. What they find, however, is a surface world stricken by destruction, with its lumbering Empire unable to prevent a verging collapse. ]]>
|
||||
</string>
|
||||
<string id="35">
|
||||
<![CDATA[Moving quickly, you heal the plagues of the land and uncover a conspiracy led by Rentar-Ihrno, a vengeful Vahnatai, who seeks to destroy the surface civilization for its theft of the Crystal Souls.]]>
|
||||
</string>
|
||||
<string id="36">
|
||||
<![CDATA[Blades of Exile]]>
|
||||
</string>
|
||||
<string id="37">
|
||||
<![CDATA[BoE came with 3 new scenarios, self-contained adventures taking place at various places and times before, after, or during the events of the Exile trilogy.]]>
|
||||
</string>
|
||||
<string id="38">
|
||||
<![CDATA[More importantly, BoE came with an accessible construction kit for making UNLIMITED custom scenarios. Fans of the Exile Trilogy formed a thriving community around BoE, which produced almost 300 scenarios (that we know of) over the course of several years.]]>
|
||||
</string>
|
||||
<string id="39">
|
||||
<![CDATA["What is Blades of Exile?"]]>
|
||||
</string>
|
||||
<string id="45">
|
||||
<![CDATA[Blades of Exile is an RPG created by Spiderweb Software in 1997. It's part of the Exile series along with 3 other games. We call it BoE for short.]]>
|
||||
</string>
|
||||
<string id="46">
|
||||
<![CDATA[We're still keeping BoE alive because it did something very special: it gave players complete access to the editor for designing new adventures in the Exile universe. Along with the official adventures made by Spiderweb Software, you can play literally HUNDREDS of adventures created by the player community. The archive of BoE scenarios is vast, and is extremely sentimental for anyone who dove into this game at the height of its popularity.]]>
|
||||
</string>
|
||||
<string id="47">
|
||||
<![CDATA[The next book will fill you in on the other Exile games' storylines, which will help you understand BoE and its scenarios much better. If you've played the Exile series, or Spiderweb Software's modern remakes, Avernum 1-3, you might want to skip it.]]>
|
||||
</string>
|
||||
<string id="48">
|
||||
<![CDATA[The final book explains how you're playing BoE almost 30 years after its creation.]]>
|
||||
</string>
|
||||
<string id="51">
|
||||
<![CDATA["Open Blades of Exile 2.0"]]>
|
||||
</string>
|
||||
<string id="52">
|
||||
<![CDATA[The story of a modern restoration by dozens of devoted fans.]]>
|
||||
</string>
|
||||
<string id="57">
|
||||
<![CDATA["Open Blades of Exile 2.0"]]>
|
||||
</string>
|
||||
<string id="58">
|
||||
<![CDATA[Making computer games is extremely hard! It was in the 1990s, and it still is now. Blades of Exile was made by an extremely small team with only one person, Jeff Vogel, doing the writing, design, and programming.]]>
|
||||
</string>
|
||||
<string id="59">
|
||||
<![CDATA[Games don't last forever without someone updating or preserving them--and that takes hundreds of hours of labor. Jeff Vogel maintained Blades of Exile for as long as he could, but eventually (and understandably!) had to move on. In 2007, he released the original source code to allow the game's fans to pick up where he left off.]]>
|
||||
</string>
|
||||
<string id="60">
|
||||
<![CDATA[You're now playing Open Blades of Exile, the result of dozens of BoE fans' hard work since 2007!]]>
|
||||
</string>
|
||||
<string id="63">
|
||||
<![CDATA[Before leaving this floor, you should read at least one of these books!]]>
|
||||
</string>
|
||||
<string id="64">
|
||||
<![CDATA[Remember, stand next to a book and right-click it to read.]]>
|
||||
</string>
|
||||
<string id="65">
|
||||
<![CDATA[The next part of the tutorial will teach you how to explore new worlds in Blades of Exile! To complete it, you must find three artifact pieces hidden across a small world map. (Don't worry, you'll be guided along the way.)]]>
|
||||
</string>
|
||||
<string id="71">
|
||||
<![CDATA[The portal on the other side of this rune must be your way out of the tutorial. But the rune seems to be looking for something you don't have. You can't cross it.]]>
|
||||
</string>
|
||||
</town>
|
||||
48
rsrc/scenarios/tutorial/towns/town2.map
Normal file
48
rsrc/scenarios/tutorial/towns/town2.map
Normal file
@@ -0,0 +1,48 @@
|
||||
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,57,50,50,50
|
||||
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,57,50,50,50
|
||||
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,57,50,50,50
|
||||
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,57,50,50,50
|
||||
2,2,2,2,2,2,2,2,2,122,122,122,122,122,122,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,112,112,112,112,112,112,112,57,50,50,50
|
||||
2,2,2,2,2,2,2,2,2,122,170,170,170,170$0,122,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,57,50,50,50
|
||||
2,2,2,2,2,2,2,2,2:2,132!0,170:19,170,170,170,122,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,57,50,50,50
|
||||
2,2,2,2,2,2,2,2v<^>,2:2,126,170:19,170,170,170,122,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,57,50,50,50
|
||||
2,2,2,2,2,2,2,2,2:2,122,170:19,170,170,170,122,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,57,50,50,50
|
||||
2,2,2,2,122,122,122,122,122,122,170:4,170:4,170:4,170,122,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,57,50,50,50
|
||||
2,2,2,2,122,2,2,2,2,122,122,260,122,122,122,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,57,50,50,50
|
||||
2,2,2,2,122,2,2,2,2,122,170:12,170:12,170:12,170,122,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,57,50,50,50
|
||||
2,2,2,2,2,2,2,2,2,122,170,170,170,170,122,122,122,122,122,122,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,57,50,50,50
|
||||
2,2,2,2,2,2,2,2,2,122,170,170,170,170,138,170$1,170,170,170,122,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,57,50,50,50
|
||||
2,2,2,2,2,2,2,2,2,122,170:20,170:20,170:20,170:20,122,170,170,170,170,122,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,57,50,50,50
|
||||
2,2,2,2,2,2,2,2,2,122,170,170,170,170,122,170,170,170,170,122,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,57,50,50,50
|
||||
2,2,2,2,2,2,2,2,2,122,170,170,170,170,122,170,170,170,170,122,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,112,112,112,112,112,57,50,50,50
|
||||
2,2,2,2,2,2,2,2,2,122,170,170,170,170,122,170,170,170,170,122,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,112,112,2,2,2,2,57,50,50,50
|
||||
2,2,2,2,2,2,2,2,2,122,170,170,170,170,122,122,122,138,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,112,2,2,2,2,2,57,50,50,50
|
||||
2,2,2,2,2,2,2,2,2,122,170,170,170,170,170,170,170,170,170:21,170:26,170,170,170:29,122,170,194@0,170,122,170,170,170,170,170,170,170,170,122,122,2:35,2,56,55,55,55,60,50,50,50
|
||||
2,2,2,2,2,2,2,2,2,122,170,170,170,170,170,170,170,170,170:27,170:26,170,170,170:29,127,170,170:0&9,170,130,170,170,170,170,170,170,170,170,170$2,123,2:35,2,58b1,51,51,51,59,50,50,50
|
||||
2,2,2,2,2,2,2,2,2,122,170,170,170,170,170,170,170,170,170:21,170:26,170,170,170:29,122,170,170,170,122,170,170,170,170,170,170,170,170,122,122,2:35,2,2,2,2,2,57,50,50,50
|
||||
2,2,2,2,2,2,2,2,2,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,112,2,2,2,2,2,57,50,50,50
|
||||
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,112,112,112,2,2,2,57,50,50,50
|
||||
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,112,112,112,112,57,50,50,50
|
||||
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,57,50,50,50
|
||||
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,57,50,50,50
|
||||
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,57,50,50,50
|
||||
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,57,50,50,50
|
||||
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,57,50,50,50
|
||||
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,57,50,50,50
|
||||
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,57,50,50,50
|
||||
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,57,50,50,50
|
||||
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,57,50,50,50
|
||||
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,57,50,50,50
|
||||
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,57,50,50,50
|
||||
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,57,50,50,50
|
||||
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,57,50,50,50
|
||||
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,57,50,50,50
|
||||
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,57,50,50,50
|
||||
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,57,50,50,50
|
||||
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,57,50,50,50
|
||||
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,57,50,50,50
|
||||
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,57,50,50,50
|
||||
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,57,50,50,50
|
||||
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,57,50,50,50
|
||||
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,57,50,50,50
|
||||
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,57,50,50,50
|
||||
259
rsrc/scenarios/tutorial/towns/town2.spec
Normal file
259
rsrc/scenarios/tutorial/towns/town2.spec
Normal file
@@ -0,0 +1,259 @@
|
||||
@once-give-spec-item = 0
|
||||
sdf 2, 0
|
||||
msg 0, 34, -1
|
||||
pic 0, 4
|
||||
ex1 1, 0, -1
|
||||
ex2 -1, -1, -1
|
||||
goto 1
|
||||
@inc-sdf = 1
|
||||
sdf 1, 4
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 1, 0, -1
|
||||
ex2 -1, -1, -1
|
||||
goto 31
|
||||
@if-ter = 2
|
||||
sdf -1, -1
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 9, 7, -1
|
||||
ex2 126, 3, -1
|
||||
goto -1
|
||||
@once-dlog = 3
|
||||
sdf -1, -1
|
||||
msg 1, -1, 1
|
||||
pic 90, 1
|
||||
ex1 -1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto -1
|
||||
@if-ter = 4
|
||||
sdf -1, -1
|
||||
msg 7, -1, 1
|
||||
pic 18, 3
|
||||
ex1 9, 7, -1
|
||||
ex2 129, 5, -1
|
||||
goto 6
|
||||
@block-move = 5
|
||||
sdf -1, -1
|
||||
msg 13, 10, -1
|
||||
pic 0, 4
|
||||
ex1 1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto -1
|
||||
@if-ter = 6
|
||||
sdf -1, -1
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 11, 10, -1
|
||||
ex2 260, 8, -1
|
||||
goto -1
|
||||
@once-dlog = 7
|
||||
sdf -1, -1
|
||||
msg 14, -1, 1
|
||||
pic 18, 3
|
||||
ex1 -1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto -1
|
||||
@if-item-class = 8
|
||||
sdf -1, -1
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 1, 9, -1
|
||||
ex2 -1, -1, -1
|
||||
goto 7
|
||||
@if-item-class-equip = 9
|
||||
sdf -1, -1
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto 10
|
||||
@once-dlog = 10
|
||||
sdf -1, -1
|
||||
msg 20, -1, 1
|
||||
pic 18, 3
|
||||
ex1 -1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto -1
|
||||
@relocate = 11
|
||||
sdf -1, -1
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 2, 4, -1
|
||||
ex2 101, -101, -1
|
||||
goto 16
|
||||
@set-ptr = 12
|
||||
sdf 2, 1
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 101, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto 13
|
||||
@set-sdf = 13
|
||||
sdf 2, 1
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto -1
|
||||
@set-sdf = 14
|
||||
sdf 2, 1
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 3, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto -1
|
||||
@if-sdf = 15
|
||||
sdf 2, 1
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 3, 13, -1
|
||||
ex2 -1, -1, -1
|
||||
goto 14
|
||||
@disp-sm-msg = 16
|
||||
sdf -1, -1
|
||||
msg 26, -1, -1
|
||||
pic 0, 4
|
||||
ex1 -1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto 15
|
||||
@block-move = 17
|
||||
sdf -1, -1
|
||||
msg 27, 28, -1
|
||||
pic 0, 4
|
||||
ex1 1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto 22
|
||||
@if-sdf = 18
|
||||
sdf 2, 3
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 1, 11, -1
|
||||
ex2 -1, -1, -1
|
||||
goto -1
|
||||
@once-dlog = 19
|
||||
sdf 2, 4
|
||||
msg 7, -1, 1
|
||||
pic 18, 3
|
||||
ex1 -1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto -1
|
||||
@if-sdf = 20
|
||||
sdf 2, 1
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 3, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto 17
|
||||
@if-sdf = 21
|
||||
sdf 2, 1
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 3, 17, -1
|
||||
ex2 -1, -1, -1
|
||||
goto -1
|
||||
@set-sdf = 22
|
||||
sdf 2, 5
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto -1
|
||||
@if-sdf = 23
|
||||
sdf 2, 6
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 1, 24, -1
|
||||
ex2 -1, -1, -1
|
||||
goto -1
|
||||
@disp-msg = 24
|
||||
sdf -1, -1
|
||||
msg 29, 30, -1
|
||||
pic 0, 4
|
||||
ex1 -1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto 25
|
||||
@start-talk = 25
|
||||
sdf -1, -1
|
||||
msg -1, -1, -1
|
||||
pic 71, 4
|
||||
ex1 21, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto -1
|
||||
@set-sdf = 26
|
||||
sdf 2, 7
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto -1
|
||||
@if-sdf = 27
|
||||
sdf 2, 7
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 1, 28, -1
|
||||
ex2 -1, -1, -1
|
||||
goto 21
|
||||
@block-move = 28
|
||||
sdf -1, -1
|
||||
msg 31, -1, -1
|
||||
pic 0, 4
|
||||
ex1 1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto -1
|
||||
@if-ter = 29
|
||||
sdf -1, -1
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 23, 20, -1
|
||||
ex2 127, 30, -1
|
||||
goto -1
|
||||
@disp-msg = 30
|
||||
sdf -1, -1
|
||||
msg 32, 33, -1
|
||||
pic 0, 4
|
||||
ex1 -1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto -1
|
||||
@change-ter = 31
|
||||
sdf -1, -1
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 27, 20, -1
|
||||
ex2 131, -1, -1
|
||||
goto -1
|
||||
@if-sdf = 32
|
||||
sdf 2, 8
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 1, 33, -1
|
||||
ex2 -1, -1, -1
|
||||
goto -1
|
||||
@destroy-monst = 33
|
||||
sdf -1, -1
|
||||
msg 35, 36, -1
|
||||
pic 0, 4
|
||||
ex1 36, 20, -1
|
||||
ex2 -1, -1, -1
|
||||
goto 34
|
||||
@set-sdf = 34
|
||||
sdf 2, 8
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 0, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto -1
|
||||
@once-dlog = 35
|
||||
sdf 2, 9
|
||||
msg 37, -1, 1
|
||||
pic 0, 19
|
||||
ex1 -1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto -1
|
||||
@disp-msg = 36
|
||||
sdf -1, -1
|
||||
msg 43, 36, -1
|
||||
pic 0, 4
|
||||
ex1 -1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto -1
|
||||
129
rsrc/scenarios/tutorial/towns/town2.xml
Normal file
129
rsrc/scenarios/tutorial/towns/town2.xml
Normal file
@@ -0,0 +1,129 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||
<town boes="2.0.0">
|
||||
<size>48</size>
|
||||
<name>Vault Tower</name>
|
||||
<comment>Comment 1</comment>
|
||||
<comment>Comment 2</comment>
|
||||
<comment>Comment 3</comment>
|
||||
<bounds top="3" left="3" bottom="44" right="44" />
|
||||
<difficulty>0</difficulty>
|
||||
<lighting>lit</lighting>
|
||||
<timer freq="10">18</timer>
|
||||
<timer freq="2">32</timer>
|
||||
<flags>
|
||||
<chop kills="30000" />
|
||||
</flags>
|
||||
<item id="0">
|
||||
<type>0</type>
|
||||
<charges>500</charges>
|
||||
<property>true</property>
|
||||
<contained>true</contained>
|
||||
</item>
|
||||
<creature id="0">
|
||||
<type>19</type>
|
||||
<attitude>friendly</attitude>
|
||||
<mobility>0</mobility>
|
||||
<personality>20</personality>
|
||||
<face>10</face>
|
||||
</creature>
|
||||
<creature id="1">
|
||||
<type>19</type>
|
||||
<attitude>friendly</attitude>
|
||||
<mobility>0</mobility>
|
||||
<personality>21</personality>
|
||||
<face>71</face>
|
||||
<ontalk>23</ontalk>
|
||||
</creature>
|
||||
<creature id="2">
|
||||
<type>19</type>
|
||||
<attitude>friendly</attitude>
|
||||
<mobility>0</mobility>
|
||||
<personality>22</personality>
|
||||
<face>10</face>
|
||||
<onkill>36</onkill>
|
||||
</creature>
|
||||
<sign id="0">
|
||||
<![CDATA[Vault Tower -|NO BREAKING AND ENTERING]]>
|
||||
</sign>
|
||||
<string id="0">
|
||||
<![CDATA[This appears to be the central chamber of the vault! And right here, is the artifact piece you're looking for.]]>
|
||||
</string>
|
||||
<string id="1">
|
||||
<![CDATA[You've reached Vault Tower. This building is in better repair than the last one, and the front door is locked. Thissa says, "I can break thissss!"]]>
|
||||
</string>
|
||||
<string id="2">
|
||||
<![CDATA[It may be rude, but the life of an adventurer involves breaking the rules (and other people's property) sometimes. When you try to open a locked door, you'll have the option to bash it down. When asked, choose your physically strongest character, and give it your best shot.]]>
|
||||
</string>
|
||||
<string id="7">
|
||||
<![CDATA["Whoa there!"]]>
|
||||
</string>
|
||||
<string id="8">
|
||||
<![CDATA[Oops. Of course this place is guarded.]]>
|
||||
</string>
|
||||
<string id="9">
|
||||
<![CDATA["The boss will make me pay for that door, you know! Fix it or I'll have to follow the 'violent repulsion' protocol."]]>
|
||||
</string>
|
||||
<string id="10">
|
||||
<![CDATA[You can close doors behind you with the Use command, which might come in handy for sneaking around. Type 'u' or click the 'Use' button, and see if you can get this door back on its hinges.]]>
|
||||
</string>
|
||||
<string id="13">
|
||||
<![CDATA["Oi! I said, fix the door."]]>
|
||||
</string>
|
||||
<string id="14">
|
||||
<![CDATA["I'll tell you what. I wouldn't mind a piece of the boss's treasure. Listen to me, and I'll tell you how to get in. We can split the stash."]]>
|
||||
</string>
|
||||
<string id="15">
|
||||
<![CDATA[Press 't', or the button with a mouth on it, then select a creature to start a conversation.]]>
|
||||
</string>
|
||||
<string id="20">
|
||||
<![CDATA["Hey hotshot! You'll want to give those lockpicks to your wiliest thief and equip them by clicking on them in the items panel."]]>
|
||||
</string>
|
||||
<string id="21">
|
||||
<![CDATA[To view a different character's inventory, click their name in the stats panel at the top-right. If Frrrrrr isn't holding the lockpicks, select whoever is. ]]>
|
||||
</string>
|
||||
<string id="22">
|
||||
<![CDATA[To give an item from one character to another click the button with a 'G' next to the lockpicks. Select Frrrrrr, who is your best lockpicker right now. Then make sure they're equipped.]]>
|
||||
</string>
|
||||
<string id="26">
|
||||
<![CDATA[The guard changes positions.]]>
|
||||
</string>
|
||||
<string id="27">
|
||||
<![CDATA[The guard watching through this window stops you. "Hey! Move any further and I'll shoot."]]>
|
||||
</string>
|
||||
<string id="28">
|
||||
<![CDATA[Maybe your buddy in the first room can help with this. (People might respond differently to the same questions after something specific happens.)]]>
|
||||
</string>
|
||||
<string id="29">
|
||||
<![CDATA[You can ask people about things that aren't shown as buttons in the dialog window. Click 'Ask About' or type 'a' to do so, then type what you want to ask about.]]>
|
||||
</string>
|
||||
<string id="30">
|
||||
<![CDATA[This guard will respond to the words 'patrol' or 'duty'!]]>
|
||||
</string>
|
||||
<string id="31">
|
||||
<![CDATA[No sense in turning around now!]]>
|
||||
</string>
|
||||
<string id="32">
|
||||
<![CDATA[Adrianna examines this door closely. "The lock is sealed magically," she observes. "I have a spell for that."]]>
|
||||
</string>
|
||||
<string id="33">
|
||||
<![CDATA[Cast the mage spell 'Unlock Doors' as a third option for tricky doors where bashing or picking doesn't cut it!]]>
|
||||
</string>
|
||||
<string id="34">
|
||||
<![CDATA[You take it, and the gate opens.]]>
|
||||
</string>
|
||||
<string id="35">
|
||||
<![CDATA[The sneaky guard turns and flees from your presence, passing right through the wall to the east!]]>
|
||||
</string>
|
||||
<string id="36">
|
||||
<![CDATA[(If you're ever stuck in a scenario, try moving into suspicious walls. Even if they're not breakable with magic, you might find a hidden door!) ]]>
|
||||
</string>
|
||||
<string id="37">
|
||||
<![CDATA[Excellent! A boat. This should take you along the water to the final Tower!]]>
|
||||
</string>
|
||||
<string id="38">
|
||||
<![CDATA[Move onto the boat to board it.]]>
|
||||
</string>
|
||||
<string id="43">
|
||||
<![CDATA[Having struck down your duplicitous collaborator, you notice something strange about the wall to the east.]]>
|
||||
</string>
|
||||
</town>
|
||||
48
rsrc/scenarios/tutorial/towns/town3.map
Normal file
48
rsrc/scenarios/tutorial/towns/town3.map
Normal file
@@ -0,0 +1,48 @@
|
||||
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5
|
||||
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5
|
||||
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5
|
||||
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5
|
||||
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5
|
||||
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5
|
||||
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5
|
||||
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5
|
||||
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5
|
||||
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,21,6,6,6,6,6,6,18,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5
|
||||
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,21,8,0,0,98,0,0,0,17,18,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5
|
||||
5,5,5,5,5,5,5,5,5,5,5,5,5,5,21,6,6,8,0,0,0$6,0,1,0,0,0,17,18,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5
|
||||
5,5,5,5,5,5,5,5,5,5,21,6,6,6,8,0,0,0,0,0,0,0,0,0,0,0,0,17,18,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5
|
||||
5,5,5,5,5,5,5,5,21,6,8,0,0,0,0,0,0,0,0,0$2,0,0,0,1,0$8,0,0,98,17,18,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5
|
||||
5,5,5,5,5,5,5,21,8,0,0,1,1,0,0,0$1,0,0,1,0,0,0,0,0,1,0,261,261,261,17,18,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5
|
||||
5,5,5,5,5,5,5,9,0,98,0,0,1,0,0,0,98,0,0,0,0,0$7,0,0,0,1,261,0,0,1,15,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5
|
||||
5,5,5,5,5,5,5,9,0,0,1,0,0,0,0,14,12,12,12,12,11,0,0,261,261,261,261,0,0,101@0,15,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5
|
||||
5,5,5,5,5,5,5,9,0,0,1,1,0,1,0,15,5,5,5,5,20,12,11,261,0,1,0,0:4&9,0,0,15,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5
|
||||
5,5,5,5,5,5,5,9,0,0,0,0,0,14,12,19,5,5,5,5,5,5,20,12,11,0,98,0,0$3,1$4,17,18,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5
|
||||
5,5,5,5,5,5,5,9,1,0,0$0,98,0,15,5,5,5,5,5,5,5,5,5,5,20,12,12,12,12,11,0,17,18,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5
|
||||
5,5,5,5,5,5,5,9,0,0,0,0,14,19,5,5,5,5,5,5,5,5,5,5,5,5,21,6,6,8,0,0,15,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5
|
||||
5,5,5,5,5,5,21,8,0,0,1,14,19,5,5,5,5,5,5,5,5,5,5,5,5,21,8,0,1,0:28,0:28,0:28,15,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5
|
||||
6,6,6,6,6,6,8,1,0,0,0,15,5,5,5,5,5,5,5,5,5,5,5,5,5,9,0,0,0,0,0,0,15,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5
|
||||
0,0,0,0,0,0,98,0,0,0,14,19,5,5,5,5,5,5,5,5,5,5,5,5,21,8,0,0,0,0$5,0,98,15,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5
|
||||
0,0,0,0,0v<^>,0,0,0,0,0,15,5,5,5,5,5,5,5,5,5,5,5,5,21,8,0,0,0,0,0,0,0,15,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5
|
||||
0,0,0,1,0,0,0,0,1,14,19,5,5,5,5,5,5,5,5,5,5,5,21,8,0,98,0,0,0,0,0,0,15,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5
|
||||
12,12,12,12,12,12,12,12,12,19,5,5,5,5,5,5,5,5,5,5,5,5,9,0,0,0,0,0,1,0,0,0,15,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5
|
||||
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,9,0,0,0,0,0,0,0,0,14,19,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5
|
||||
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,9,0,0,0,0,0,0,98,0,15,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5
|
||||
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,9,0,0,0,0,0,0,0,14,19,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5
|
||||
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,21,8,98,0,0,0,0,0,0,15,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5
|
||||
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,21,8,0,0,0,0,0,0,0,14,19,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5
|
||||
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,21,6,8,0,0,0,0,0,0,1,0,15,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5
|
||||
5,5,5,5,5,5,5,5,5,5,5,5,5,5,21,6,6,6,8,101@1@2,0,0,0,0,0,0,0,0,14,19,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5
|
||||
5,5,5,5,5,5,5,5,5,5,5,5,5,21,8,0,101@3@10@11@12,0,98,0,0,0,0,0,0,0,98,0,15,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5
|
||||
5,5,5,5,5,5,5,5,5,5,21,6,18,9,101@4@5,0,1,1,0$9,0,0,0,0,1,0,0,0,1,15,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5
|
||||
6,6,6,6,6,6,6,6,6,6,8,0,16,10,0,0:0&9,0,0,0,1,1,0,0,14,12,12,12,12,19,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,15,9,101@6@7,107!0,101@8,98,0,1,101@9,0,0,15,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5
|
||||
12,12,12,12,12,12,12,12,12,12,12,12,19,20,12,12,12,12,12,12,12,12,12,19,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5
|
||||
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5
|
||||
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5
|
||||
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5
|
||||
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5
|
||||
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5
|
||||
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5
|
||||
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5
|
||||
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5
|
||||
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5
|
||||
224
rsrc/scenarios/tutorial/towns/town3.spec
Normal file
224
rsrc/scenarios/tutorial/towns/town3.spec
Normal file
@@ -0,0 +1,224 @@
|
||||
@once-give-spec-item = 0
|
||||
sdf 3, 0
|
||||
msg 0, -1, -1
|
||||
pic 0, 4
|
||||
ex1 2, 0, -1
|
||||
ex2 -1, -1, -1
|
||||
goto 1
|
||||
@inc-sdf = 1
|
||||
sdf 1, 4
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 1, 0, -1
|
||||
ex2 -1, -1, -1
|
||||
goto -1
|
||||
@once-dlog = 2
|
||||
sdf -1, -1
|
||||
msg 1, -1, 1
|
||||
pic 19, 4
|
||||
ex1 -1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto 3
|
||||
@force-give = 3
|
||||
sdf -1, -1
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 25, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto -1
|
||||
@if-monsters-alive = 4
|
||||
sdf -1, -1
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 0, -1, -1
|
||||
ex2 1, -1, -1
|
||||
goto 16
|
||||
@once-dlog = 5
|
||||
sdf -1, -1
|
||||
msg 7, -1, 1
|
||||
pic 60, 3
|
||||
ex1 -1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto 6
|
||||
@set-ptr = 6
|
||||
sdf 3, 1
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 103, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto 19
|
||||
@if-alive = 7
|
||||
sdf -1, -1
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 0, 8, -1
|
||||
ex2 -1, -1, -1
|
||||
goto 21
|
||||
@set-sdf = 8
|
||||
sdf 3, 1
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 13, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto 10
|
||||
@set-sdf = 9
|
||||
sdf 3, 1
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 14, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto 11
|
||||
@disp-msg = 10
|
||||
sdf -1, -1
|
||||
msg 15, -103, -1
|
||||
pic 0, 4
|
||||
ex1 -1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto -1
|
||||
@select-pc = 11
|
||||
sdf -1, -1
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 0, -1, -1
|
||||
ex2 1, -1, -1
|
||||
goto 12
|
||||
@death = 12
|
||||
sdf -1, -1
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 0, 1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto 10
|
||||
@call-global = 13
|
||||
sdf -1, -1
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 -1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto 3
|
||||
@call-global = 14
|
||||
sdf -1, -1
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 -1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto 4
|
||||
@call-global = 15
|
||||
sdf -1, -1
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 -1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto 5
|
||||
@if-sdf = 16
|
||||
sdf 3, 1
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 1, 30, -1
|
||||
ex2 -1, -1, -1
|
||||
goto 5
|
||||
@disp-msg = 17
|
||||
sdf -1, -1
|
||||
msg 16, -1, -1
|
||||
pic 0, 4
|
||||
ex1 -1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto -1
|
||||
@select-pc = 18
|
||||
sdf -1, -1
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 1, -1, -1
|
||||
ex2 2, -104, -1
|
||||
goto 7
|
||||
@set-ptr = 19
|
||||
sdf 3, 5
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 104, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto 18
|
||||
@nop = 20
|
||||
sdf -1, -1
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 -1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto -1
|
||||
@inc-sdf = 21
|
||||
sdf 3, 5
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 1, 0, -1
|
||||
ex2 -1, -1, -1
|
||||
goto 22
|
||||
@if-sdf = 22
|
||||
sdf 3, 5
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 6, 9, -1
|
||||
ex2 -1, -1, -1
|
||||
goto 18
|
||||
@block-move = 23
|
||||
sdf -1, -1
|
||||
msg 17, -1, -1
|
||||
pic 0, 4
|
||||
ex1 1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto 24
|
||||
@destroy-monst = 24
|
||||
sdf -1, -1
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 29, 18, -1
|
||||
ex2 -1, -1, -1
|
||||
goto 25
|
||||
@destroy-monst = 25
|
||||
sdf -1, -1
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 28, 18, -1
|
||||
ex2 -1, -1, -1
|
||||
goto 29
|
||||
@select-pc = 26
|
||||
sdf -1, -1
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 2, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto 27
|
||||
@skill-pts = 27
|
||||
sdf -1, -1
|
||||
msg 18, 19, -1
|
||||
pic 0, 4
|
||||
ex1 10, 0, -1
|
||||
ex2 -1, -1, -1
|
||||
goto 31
|
||||
@if-sdf = 28
|
||||
sdf 3, 6
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto 26
|
||||
@set-sdf = 29
|
||||
sdf 3, 7
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 -1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto -1
|
||||
@if-sdf = 30
|
||||
sdf 3, 7
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto 17
|
||||
@set-sdf = 31
|
||||
sdf 3, 6
|
||||
msg -1, -1, -1
|
||||
pic 0, 4
|
||||
ex1 1, -1, -1
|
||||
ex2 -1, -1, -1
|
||||
goto -1
|
||||
186
rsrc/scenarios/tutorial/towns/town3.xml
Normal file
186
rsrc/scenarios/tutorial/towns/town3.xml
Normal file
@@ -0,0 +1,186 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||
<town boes="2.0.0">
|
||||
<size>48</size>
|
||||
<name>Lake Tower</name>
|
||||
<comment>Comment 1</comment>
|
||||
<comment>Comment 2</comment>
|
||||
<comment>Comment 3</comment>
|
||||
<bounds top="3" left="3" bottom="44" right="44" />
|
||||
<difficulty>0</difficulty>
|
||||
<lighting>dark</lighting>
|
||||
<onenter condition="alive">2</onenter>
|
||||
<flags>
|
||||
<chop kills="30000" />
|
||||
</flags>
|
||||
<item id="0">
|
||||
<type>0</type>
|
||||
<charges>1500</charges>
|
||||
<contained>true</contained>
|
||||
</item>
|
||||
<item id="1">
|
||||
<type>261</type>
|
||||
<contained>true</contained>
|
||||
</item>
|
||||
<item id="2">
|
||||
<type>262</type>
|
||||
<contained>true</contained>
|
||||
</item>
|
||||
<item id="3">
|
||||
<type>201</type>
|
||||
<contained>true</contained>
|
||||
</item>
|
||||
<item id="4">
|
||||
<type>103</type>
|
||||
<contained>true</contained>
|
||||
</item>
|
||||
<item id="5">
|
||||
<type>115</type>
|
||||
<contained>true</contained>
|
||||
</item>
|
||||
<item id="6">
|
||||
<type>96</type>
|
||||
<contained>true</contained>
|
||||
</item>
|
||||
<item id="7">
|
||||
<type>51</type>
|
||||
<contained>true</contained>
|
||||
</item>
|
||||
<item id="8">
|
||||
<type>122</type>
|
||||
<contained>true</contained>
|
||||
</item>
|
||||
<item id="9">
|
||||
<type>245</type>
|
||||
<contained>true</contained>
|
||||
</item>
|
||||
<item id="10">
|
||||
<type>3</type>
|
||||
<charges>4</charges>
|
||||
<contained>true</contained>
|
||||
</item>
|
||||
<item id="11">
|
||||
<type>1</type>
|
||||
<charges>6</charges>
|
||||
<contained>true</contained>
|
||||
</item>
|
||||
<item id="12">
|
||||
<type>2</type>
|
||||
<charges>5</charges>
|
||||
<contained>true</contained>
|
||||
</item>
|
||||
<creature id="0">
|
||||
<type>84</type>
|
||||
<attitude>hostile-a</attitude>
|
||||
<mobility>1</mobility>
|
||||
<personality>-1</personality>
|
||||
<face>0</face>
|
||||
<onkill>13</onkill>
|
||||
</creature>
|
||||
<creature id="1">
|
||||
<type>60</type>
|
||||
<attitude>hostile-a</attitude>
|
||||
<mobility>1</mobility>
|
||||
<personality>-1</personality>
|
||||
<face>0</face>
|
||||
<onkill>14</onkill>
|
||||
</creature>
|
||||
<creature id="2">
|
||||
<type>63</type>
|
||||
<attitude>hostile-a</attitude>
|
||||
<mobility>1</mobility>
|
||||
<personality>-1</personality>
|
||||
<face>0</face>
|
||||
<onkill>15</onkill>
|
||||
</creature>
|
||||
<creature id="3">
|
||||
<type>67</type>
|
||||
<attitude>docile</attitude>
|
||||
<mobility>0</mobility>
|
||||
<personality>30</personality>
|
||||
<face>21</face>
|
||||
</creature>
|
||||
<creature id="4">
|
||||
<type>22</type>
|
||||
<attitude>docile</attitude>
|
||||
<mobility>0</mobility>
|
||||
<personality>31</personality>
|
||||
<face>41</face>
|
||||
</creature>
|
||||
<creature id="5">
|
||||
<type>15</type>
|
||||
<attitude>docile</attitude>
|
||||
<mobility>0</mobility>
|
||||
<personality>32</personality>
|
||||
<face>12</face>
|
||||
</creature>
|
||||
<creature id="6">
|
||||
<type>82</type>
|
||||
<attitude>hostile-a</attitude>
|
||||
<mobility>1</mobility>
|
||||
<personality>-1</personality>
|
||||
<face>0</face>
|
||||
</creature>
|
||||
<creature id="7">
|
||||
<type>82</type>
|
||||
<attitude>hostile-a</attitude>
|
||||
<mobility>1</mobility>
|
||||
<personality>-1</personality>
|
||||
<face>0</face>
|
||||
</creature>
|
||||
<creature id="8">
|
||||
<type>82</type>
|
||||
<attitude>hostile-a</attitude>
|
||||
<mobility>1</mobility>
|
||||
<personality>-1</personality>
|
||||
<face>0</face>
|
||||
</creature>
|
||||
<creature id="9">
|
||||
<type>2</type>
|
||||
<attitude>docile</attitude>
|
||||
<mobility>0</mobility>
|
||||
<personality>33</personality>
|
||||
<face>8</face>
|
||||
</creature>
|
||||
<sign id="0">
|
||||
<![CDATA[Remember to check often for secret doors and passages! (There might be a shortcut to get out of here.)]]>
|
||||
</sign>
|
||||
<string id="0">
|
||||
<![CDATA[You found the last piece of the artifact! All that's left now is to return to the very first tower and cross the rune to get to the exit portal.]]>
|
||||
</string>
|
||||
<string id="1">
|
||||
<![CDATA[When you enter the last tower, you find only a stairway spiraling down, down, and down. Eventually the walls give way to raw cave stone, and nothing lights your way.]]>
|
||||
</string>
|
||||
<string id="2">
|
||||
<![CDATA[Searching through your pack, with great luck, you find some torches! To use a torch, click the 'U' button next to it in the items panel.]]>
|
||||
</string>
|
||||
<string id="3">
|
||||
<![CDATA[Adrianna and Feodoric can also both cast the mage spell 'Light', another way to help you see where you're going.]]>
|
||||
</string>
|
||||
<string id="4">
|
||||
<![CDATA[Alternatively, you might choose to keep the lights off! Harder for the monsters to see you, that way.]]>
|
||||
</string>
|
||||
<string id="7">
|
||||
<![CDATA[Your path is blocked by a priest, and Death itself.]]>
|
||||
</string>
|
||||
<string id="13">
|
||||
<![CDATA["I see you have lost someone! I'm here to explain the intricacies of your situation."]]>
|
||||
</string>
|
||||
<string id="14">
|
||||
<![CDATA["Congratulations on getting this far without suffering loss! However, it's time for a lesson in mortality."]]>
|
||||
</string>
|
||||
<string id="15">
|
||||
<![CDATA[Death points its finger at you.]]>
|
||||
</string>
|
||||
<string id="16">
|
||||
<![CDATA["We'll get out of your way after we get all your people breathing again."]]>
|
||||
</string>
|
||||
<string id="17">
|
||||
<![CDATA[Death and its ironic companion leave you, opening the way.]]>
|
||||
</string>
|
||||
<string id="18">
|
||||
<![CDATA[Around the corner is another person trying to teach you something. This time, it's a trainer!]]>
|
||||
</string>
|
||||
<string id="19">
|
||||
<![CDATA[Here are some free skill points. Try talking to them.]]>
|
||||
</string>
|
||||
</town>
|
||||
@@ -27,6 +27,9 @@
|
||||
<intro-msg>
|
||||
<![CDATA[You've just stayed the night in your room at the fort, and have had a good night's sleep and a good meal. Time to go out and be heroes!]]>
|
||||
</intro-msg>
|
||||
<first-time-help-extra>
|
||||
<![CDATA[For now, you should get equipment, explore this fort, and get your orders. Press the hand button (or type 'g') to pick up the nearby items.]]>
|
||||
</first-time-help-extra>
|
||||
</text>
|
||||
<ratings>
|
||||
<content>G</content>
|
||||
|
||||
@@ -90,16 +90,6 @@
|
||||
<item id="19">
|
||||
<type>155</type>
|
||||
</item>
|
||||
<item id="20">
|
||||
<type>-1</type>
|
||||
<always>true</always>
|
||||
<property>true</property>
|
||||
</item>
|
||||
<item id="21">
|
||||
<type>-1</type>
|
||||
<always>true</always>
|
||||
<property>true</property>
|
||||
</item>
|
||||
<item id="22">
|
||||
<type>20</type>
|
||||
<contained>true</contained>
|
||||
@@ -213,10 +203,6 @@
|
||||
<item id="50">
|
||||
<type>171</type>
|
||||
</item>
|
||||
<item id="51">
|
||||
<type>-1</type>
|
||||
<property>true</property>
|
||||
</item>
|
||||
<item id="52">
|
||||
<type>165</type>
|
||||
<property>true</property>
|
||||
|
||||
@@ -226,24 +226,15 @@
|
||||
<item id="55">
|
||||
<type>11</type>
|
||||
</item>
|
||||
<item id="56">
|
||||
<type>-1</type>
|
||||
</item>
|
||||
<item id="57">
|
||||
<type>10</type>
|
||||
</item>
|
||||
<item id="58">
|
||||
<type>-1</type>
|
||||
</item>
|
||||
<item id="59">
|
||||
<type>11</type>
|
||||
</item>
|
||||
<item id="60">
|
||||
<type>9</type>
|
||||
</item>
|
||||
<item id="61">
|
||||
<type>-1</type>
|
||||
</item>
|
||||
<item id="62">
|
||||
<type>12</type>
|
||||
</item>
|
||||
|
||||
@@ -33,6 +33,9 @@
|
||||
<intro-msg>
|
||||
<![CDATA[She will tell you what your mission is, should you choose to accept it. All you know is that the stakes are incredibly high, and time is of the essence ...]]>
|
||||
</intro-msg>
|
||||
<first-time-help-extra>
|
||||
<![CDATA[For now, you should explore this fort, and get your orders.]]>
|
||||
</first-time-help-extra>
|
||||
</text>
|
||||
<ratings>
|
||||
<content>G</content>
|
||||
|
||||
@@ -50,6 +50,7 @@
|
||||
<xs:element name="teaser" minOccurs="0" maxOccurs="2" type="xs:string"/>
|
||||
<xs:element name="icon" type="scenIcon" minOccurs="0"/>
|
||||
<xs:element name="intro-msg" minOccurs="0" maxOccurs="6" type="xs:string"/>
|
||||
<xs:element name="first-time-help-extra" minOccurs="0" type="xs:string"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
<xs:complexType name="ratings">
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
Welcome to Blades of Exile. These windows will pop up occasionally to explain what is going on. If they annoy you, they can be turned off in the Preferences screen (access from Options menu).
|
||||
In general, you can get help by clicking on the '?' buttons or typing '?'. For now, you should get equipment, explore this fort, and get your orders. Press the hand buttons (or type 'g') to pick up the nearby items.
|
||||
Welcome to Blades of Exile. These windows will pop up occasionally to explain what is going on. If they annoy you, they can be turned off in the Preferences screen (access from the {which-menu} menu).
|
||||
In general, you can get help by clicking on the '?' buttons or typing '?'. {scen-extra}
|
||||
|
||||
|
||||
Everyone responds to 'Look', 'Name', and 'Job' (use the buttons at the bottom). To ask about something people mention, click on the word (click on 'Demon' to ask about demons). Certain people respond to 'Buy' and 'Sell', which puts you in shopping mode.
|
||||
Shortcuts: To get previous response, press the Back button (or hit space). You can press any of the bottom buttons by typing the first letter in the word. Hit Record to write notes in journal, and hit Bye (or type Escape) to stop talking.
|
||||
Shortcuts: To get previous response, press the Back button (or hit space). You can press any of the bottom buttons by typing the first letter in the word. Hit Record to write notes in journal, and hit Done (or type Escape) to stop talking.
|
||||
To cast a spell, first click on the number of the person to cast (to the upper left). Then click on the button by the spell to cast (hit Space to see other spells). Finally, if it's a spell cast on a party member, click on the correct Target button.
|
||||
Shortcut: Typing the letter after a spell picks the spell, and typing '1'-'6' picks a caster. Option clicking a spell button brings up a spell description. Finally, you can often cast spells faster using the Mage Spells and Priest spells menus.
|
||||
Shortcut: Typing the letter before a spell picks the spell (case-sensitive), and typing '1'-'6' picks a caster. Option clicking a spell button brings up a spell description. Finally, you can often cast spells faster using the Mage Spells and Priest spells menus.
|
||||
This menu always contains all the spells an active PC can cast. Click on the name of a PC to make them active. Then select a spell from this menu to cast. Then, if you need to pick someone to cast the spell on, a window will come up for you to do so.
|
||||
This is where you improve a character's skills when creating or training them. Press the '+' button to buy a skill, and the '-' button to undo the choice. The Cancel button undoes your work, and Keep keeps your choices.
|
||||
Option-click the buttons by a skill to get a description of the skill and advice on how much to buy. When training a character, you need both gold and skill points (which you get by killing things and getting experience).
|
||||
@@ -59,7 +59,7 @@ You've just written what this special encounter says down in your adventure jour
|
||||
One of your characters has just been cursed. That character will function worse in combat, be hit more easily, and take more damage from blows for a while. Curses wear off fairly quickly.
|
||||
You have mounted a horse. A horse doubles your speed when moving outdoors: you'll spend much less time moving from town to town and will have an easier time evading monsters. To dismount, pause (by clicking on your party or hitting '5' on the keypad).
|
||||
You have just boarded a boat. Steer the boat onto land to get out. Certain boats can pass over lava. When using a boat outdoors, you can enter towns on the shore by steering the boat into them.
|
||||
This command bring up a map of the area you're in. Generally, maps of dungeons and the outdoors will be remembered. However, if a town undergoes some sort of major change, you'll lose your map for that town.
|
||||
This command brings up a map of the area you're in. Generally, maps of dungeons and the outdoors will be remembered. However, if a town undergoes some sort of major change, you'll lose your map for that town.
|
||||
Your health is a measure of how much punishment you can take before dying - the more the better. Whenever you get hit, you lose some health. Taking damage when your health is down to 0 will kill you.
|
||||
Your spell points are what you expend to cast spells. Each spell drains away some of your spell points. Time and rest restore them. When creating a character, you get 3 bonus spell points for every level of Mage and Priest Spells skill you buy.
|
||||
Some doors can't be opened no matter what you try. For example, portcullises can almost never be opened by picking locks or bashing.
|
||||
@@ -68,12 +68,12 @@ This character will, for a fee, recharge some of your items whose charges have b
|
||||
A special node just triggered, and since you previously enabled it, you are now in step-through mode. Take a look at the transcript - it gives you the node that is about to execute, together with the type and number (useful if you need to locate it in the editor).
|
||||
To execute that node, simply press any key (or click the mouse button). After the node has executed, if it calls another one, you will see it in the transcript. Keep pressing a key to step through the nodes. If you wish to exit step-through mode in the middle of a node sequence, simply press Escape.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
One of your characters has just died. Their items will be dropped where they were standing and you will be unable to use any of their abilities. You may want to reload an earlier save, or delete this character and make a new one—but there are other options to reverse this unfortunate condition.
|
||||
If you find a healer, they may be able to bring this character back to life for a hefty price. At higher levels, your priests may also cast 'Raise Dead.' At low levels, death is a very big deal.
|
||||
One of your characters has just been turned to stone. Their items will be dropped where they were standing and you will be unable to use any of their abilities. You may want to reload an earlier save, or delete this character and make a new one—but there are other options to reverse this unfortunate condition.
|
||||
If you find a healer, they may be able to un-petrify this character—at a reasonable price. At higher levels, your priests may also cast 'Destone.'
|
||||
One of your characters has just been turned to dust. Their items will be dropped where they were standing and you will be unable to use any of their abilities. You may want to reload an earlier save, or delete this character and make a new one—but there are other options to reverse this unfortunate condition.
|
||||
If you find a healer, they may be able to resurrect this character—at an enormous price. At higher levels, your priests may also cast 'Resurrection.' At low levels, you probably can't afford to save a dusted character.
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@ Makes the selected PC more skilled for a short time. Works like the priest spell
|
||||
Decreases the morale of the victim. Casting this on a weak foe will make the foe flee. Even if the monster doesn't flee, later castings have a higher chance of success.
|
||||
This spell fills the selected space with a short-lasting wall of fire.
|
||||
This draining spell identifies all the unidentified items being held by your characters.
|
||||
This spell is cast during combat. When cast, you receive information about the monster you target: current health, spell points, morale, etc.
|
||||
This spell is cast during combat. When cast, you receive information about the monster you target: current health, resistances, spell points, morale, etc.
|
||||
This spell covers the target with sticky goo, slowing it down and interfering with its attacks.
|
||||
This spell lets you see everything in a short radius around you, even spaces blocked off by walls. It's useful for finding secret passages, for example.
|
||||
Poisons the target creature. This does a fair amount of damage, but it takes time to happen.
|
||||
|
||||
@@ -13,4 +13,8 @@ Missile
|
||||
Dialog Icon (large)
|
||||
Scenario Icon (large)
|
||||
Terrain Map Icon
|
||||
Status Icon
|
||||
Status Icon
|
||||
|
||||
|
||||
Vehicle
|
||||
Vehicle (Occupied)
|
||||
@@ -158,7 +158,7 @@ if-num-response
|
||||
if-boat
|
||||
if-horse
|
||||
if-quest
|
||||
|
||||
if-monsters-alive
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -110,7 +110,7 @@ Unused
|
||||
Unused
|
||||
PC Status
|
||||
0 - raise dead, 1 - hurt
|
||||
Unused
|
||||
0 - no saving throw, 1 - saving throw allowed
|
||||
Unused
|
||||
Unused
|
||||
Unused
|
||||
|
||||
@@ -415,7 +415,7 @@ Unused
|
||||
Unused
|
||||
Unused
|
||||
Number of large (full-sheet) pic to display
|
||||
Unused
|
||||
Number of small icon to display (-1: a map)
|
||||
Unused
|
||||
Unused
|
||||
Unused
|
||||
|
||||
@@ -397,14 +397,14 @@ Unused
|
||||
Unused
|
||||
Unused
|
||||
Unused
|
||||
If the party has this much of the stat ...
|
||||
If the party/current PC has this much of the stat ...
|
||||
Call this special ...
|
||||
Unused
|
||||
Which statistic
|
||||
Check mode
|
||||
Unused
|
||||
Otherwise call this special
|
||||
Result depends on whether a particular skill in the party is high enough.
|
||||
Result depends on whether a particular skill in the party or current PC is high enough.
|
||||
--------------------
|
||||
Text Response?
|
||||
Unused
|
||||
@@ -525,3 +525,19 @@ Unused
|
||||
Otherwise call this special
|
||||
Result depends on the status of a quest.
|
||||
--------------------
|
||||
If Monster(s) Alive?
|
||||
Unused
|
||||
Unused
|
||||
Unused
|
||||
Unused
|
||||
Unused
|
||||
Unused
|
||||
Unused
|
||||
First monster
|
||||
Last monster
|
||||
Specific attitude?
|
||||
If at least this many are alive ...
|
||||
Call this special ...
|
||||
Unused
|
||||
Otherwise call this special
|
||||
Result depends on how many monsters within the given range of townpeople are alive and present.
|
||||
@@ -6,8 +6,8 @@ Second part of message
|
||||
Unused
|
||||
Unused
|
||||
Unused
|
||||
First monster to affect (negative counts back from last)
|
||||
Last monster to affect (negative counts back from last)
|
||||
First monster
|
||||
Last monster
|
||||
Unused
|
||||
New Attitude
|
||||
Unused
|
||||
@@ -299,7 +299,7 @@ X coordinate to go to
|
||||
Y coordinate to go to
|
||||
Unused
|
||||
Number of town to place party in
|
||||
What text? (0 - up, 1 - down)
|
||||
What text? (0 - up, 1 - down, 8+ - instant)
|
||||
Trigger Limitations
|
||||
Special to Call in New Town
|
||||
A dialog box comes up saying the party has found a stairway, and asking if they want to climb it. The dialog buttons are Climb and Leave. If the Leave button is pressed, the Jump To special is used, and the party is not allowed to enter the space. If the Climb button is pushed, the party is moved to another town.
|
||||
|
||||
@@ -37,7 +37,7 @@ Human is the default species in Blades of Exile. Humans have skins of a variety
|
||||
Nephilim
|
||||
The Nephilim are a race of feline humanoids. Once common on the surface world, they have been hunted to near extinction, although some now remain in Exile. Nephilim characters start with better dexterity, and are much better at using missile weapons.
|
||||
Slithzerikai
|
||||
The Slithzerikai (sliths for short) are a race of lizard men, both strong and smart. Once unknown on the surface world, they are starting to appear there. Slith characters get bonuses to strength and intelligence, and are better at using pole weapons.
|
||||
The Slithzerikai (sliths for short) are a race of humanoid lizards, both strong and smart. Once unknown on the surface world, they are starting to appear there. Slith characters get bonuses to strength and intelligence, and are better at using pole weapons.
|
||||
Vahnatai
|
||||
The Vahnatai are a frail and spindly yet intelligent subterranean race. They get a penalty to strength and can't carry as much, but also receive a bonus to intelligence and are better at casting mage spells.
|
||||
Reptile
|
||||
|
||||
@@ -63,8 +63,8 @@ cThreeChoice::cThreeChoice
|
||||
if(j < 0) buttonDefs[i++] = null_btn;
|
||||
else buttonDefs[i++] = basic_buttons[j];
|
||||
}
|
||||
init_buttons(buttonDefs[0], buttonDefs[1], buttonDefs[2]);
|
||||
init_pict(pic);
|
||||
init_buttons(buttonDefs[0], buttonDefs[1], buttonDefs[2]);
|
||||
parentDlog.recalcRect();
|
||||
}
|
||||
|
||||
@@ -155,6 +155,13 @@ void cThreeChoice::init_buttons(cBasicButtonType btn1, cBasicButtonType btn2, cB
|
||||
me->add(btn, cur_btn_rect, sout.str());
|
||||
cur_btn_rect.right = cur_btn_rect.left - 4;
|
||||
}
|
||||
// Add a record button and hide it
|
||||
cButton* record = new cButton(*me);
|
||||
record->setText("Record");
|
||||
record->attachClickHandler(std::bind(&cThreeChoice::onRecord, this, _2));
|
||||
cur_btn_rect = {buttons_top,10,buttons_top + 23,buttons_right};
|
||||
me->add(record, cur_btn_rect, "record");
|
||||
record->hide();
|
||||
}
|
||||
|
||||
void cThreeChoice::init_pict(pic_num_t pic){
|
||||
@@ -164,6 +171,7 @@ void cThreeChoice::init_pict(pic_num_t pic){
|
||||
pic_ctrl->setPict(pic,type);
|
||||
pic_ctrl->recalcRect();
|
||||
me->add(pic_ctrl, pic_ctrl->getBounds(), "pict");
|
||||
buttons_top = max(buttons_top, pic_ctrl->getBounds().bottom + 8);
|
||||
}
|
||||
|
||||
std::string cThreeChoice::show(){
|
||||
@@ -174,7 +182,7 @@ std::string cThreeChoice::show(){
|
||||
return "**ERROR**"; // shouldn't be reached
|
||||
}
|
||||
|
||||
short custom_choice_dialog(std::array<std::string, 6>& strs,short pic_num,ePicType pic_type,std::array<short, 3>& buttons,bool anim_pict,short anim_loops, int anim_fps, cDialog* parent) {
|
||||
short custom_choice_dialog(std::array<std::string, 6>& strs,short pic_num,ePicType pic_type,std::array<short, 3>& buttons,bool anim_pict,short anim_loops, int anim_fps, cUniverse* univ, cDialog* parent) {
|
||||
set_cursor(sword_curs);
|
||||
|
||||
std::vector<std::string> vec(strs.begin(), strs.end());
|
||||
@@ -185,6 +193,28 @@ short custom_choice_dialog(std::array<std::string, 6>& strs,short pic_num,ePicTy
|
||||
if(anim_pict)
|
||||
setup_dialog_pict_anim(*(customDialog.operator->()), "pict", anim_loops, anim_fps);
|
||||
|
||||
if(univ != nullptr){
|
||||
customDialog.setRecordHandler([vec, univ](cDialog& dlg) -> void {
|
||||
std::string combined;
|
||||
for(std::string msg : vec){
|
||||
if(!msg.empty()){
|
||||
if(!combined.empty()){
|
||||
combined += " ||";
|
||||
}
|
||||
combined += msg;
|
||||
}
|
||||
}
|
||||
// It's not necessarily a NOTE_SCEN and location shouldn't be empty,
|
||||
// but these things aren't actually shown to the party in the encounter notes dialog.
|
||||
if(univ->party.record(NOTE_SCEN, combined, "")){
|
||||
give_help(58,0,dlg);
|
||||
// TODO ASB is only in game source, but this function is in common source so the scenario editor can preview dialogs :(
|
||||
/*
|
||||
add_string_to_buf("Added to encounter notes.");
|
||||
*/
|
||||
}
|
||||
});
|
||||
}
|
||||
std::string item_hit = customDialog.show();
|
||||
|
||||
for(int i = 0; i < 3; i++) {
|
||||
@@ -195,14 +225,18 @@ short custom_choice_dialog(std::array<std::string, 6>& strs,short pic_num,ePicTy
|
||||
return -1;
|
||||
}
|
||||
|
||||
short once_dialog(cUniverse& univ, cSpecial& spec, eSpecCtxType cur_type, cDialog* parent) {
|
||||
short once_dialog(cUniverse& univ, cSpecial& spec, eSpecCtxType cur_type, std::array<short, 3> buttons, cDialog* parent) {
|
||||
std::array<std::string, 6> strs;
|
||||
std::array<short, 3> buttons = {-1,-1,-1};
|
||||
|
||||
if(spec.m1 < 0)
|
||||
return -1;
|
||||
|
||||
univ.get_strs(strs, cur_type, spec.m1);
|
||||
return custom_choice_dialog(strs, spec.pic, ePicType(spec.pictype), buttons, true, spec.ex1c, spec.ex2c, &univ, parent);
|
||||
}
|
||||
|
||||
short once_dialog(cUniverse& univ, cSpecial& spec, eSpecCtxType cur_type, cDialog* parent) {
|
||||
std::array<short, 3> buttons = {-1,-1,-1};
|
||||
if(spec.m3 > 0) {
|
||||
// The first button defaults to OK if toggle is on
|
||||
buttons[0] = 1;
|
||||
@@ -220,5 +254,23 @@ short once_dialog(cUniverse& univ, cSpecial& spec, eSpecCtxType cur_type, cDialo
|
||||
showError("Dialog box ended up with no buttons.");
|
||||
return -1;
|
||||
}
|
||||
return custom_choice_dialog(strs, spec.pic, ePicType(spec.pictype), buttons, true, spec.ex1c, spec.ex2c, parent);
|
||||
return once_dialog(univ, spec, cur_type, buttons, parent);
|
||||
}
|
||||
|
||||
cThreeChoice& cThreeChoice::setRecordHandler(record_callback_t rec){
|
||||
if(rec == nullptr){
|
||||
hasRecord = false;
|
||||
dlg["record"].hide();
|
||||
}else{
|
||||
hasRecord = true;
|
||||
rec_f = rec;
|
||||
dlg["record"].show();
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
bool cThreeChoice::onRecord(std::string id){
|
||||
if(hasRecord) rec_f(dlg);
|
||||
else dlg[id].hide();
|
||||
return hasRecord;
|
||||
}
|
||||
@@ -37,6 +37,9 @@ namespace {cBasicButtonType null_btn = boost::none;}
|
||||
extern bbtt basic_buttons[71];
|
||||
#endif
|
||||
|
||||
/// The signature of a record handler for cThreeChoice.
|
||||
typedef std::function<void(cDialog&)> record_callback_t;
|
||||
|
||||
/// A choice dialog with several strings and up to three buttons.
|
||||
/// This is the class used for dialogs generated by special nodes.
|
||||
/// It generates the dialog dynamically from the given input.
|
||||
@@ -48,6 +51,9 @@ class cThreeChoice : public cChoiceDlog {
|
||||
void init_buttons(cBasicButtonType btn1, cBasicButtonType btn2, cBasicButtonType btn3);
|
||||
void init_pict(pic_num_t pic);
|
||||
const ePicType type;
|
||||
record_callback_t rec_f;
|
||||
bool hasRecord;
|
||||
bool onRecord(std::string id);
|
||||
public:
|
||||
/// Create a dialog with just one button.
|
||||
/// @param strings A list of the strings to place in the dialog.
|
||||
@@ -70,12 +76,22 @@ public:
|
||||
/// @param t The type of the icon.
|
||||
/// @param parent Optionally, a parent dialog.
|
||||
cThreeChoice(std::vector<std::string>& strings, std::array<short, 3>& buttons, pic_num_t pic, ePicType t, cDialog* parent = nullptr);
|
||||
/// Set a record handler.
|
||||
/// @param rec The handler.
|
||||
/// @return This object, for method-call chaining.
|
||||
/// @note Only one record handler can be set at a time. To remove it, set it to null.
|
||||
/// @note The presence of the Record button is determined entirely by the presence of a record handler.
|
||||
///
|
||||
/// A record handler should take one parameter, which is a reference to the dialog.
|
||||
/// (That's the cDialog, not the cThreeChoice.) It should return void.
|
||||
cThreeChoice& setRecordHandler(record_callback_t rec);
|
||||
/// @copydoc cChoiceDlog::show()
|
||||
/// @note The unique key in this case is the label specified in the button specification.
|
||||
std::string show();
|
||||
};
|
||||
|
||||
short custom_choice_dialog(std::array<std::string, 6>& strs,short pic_num,ePicType pic_type,std::array<short, 3>& buttons, bool anim_pict = false, short anim_loops = -1, int anim_fps = -1, cDialog* parent = nullptr);
|
||||
short custom_choice_dialog(std::array<std::string, 6>& strs,short pic_num,ePicType pic_type,std::array<short, 3>& buttons, bool anim_pict = false, short anim_loops = -1, int anim_fps = -1, cUniverse* univ = nullptr, cDialog* parent = nullptr);
|
||||
short once_dialog(cUniverse& univ, cSpecial& spec, eSpecCtxType cur_type, std::array<short, 3> buttons, cDialog* parent = nullptr);
|
||||
short once_dialog(cUniverse& univ, cSpecial& spec, eSpecCtxType cur_type, cDialog* parent = nullptr);
|
||||
|
||||
#endif
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user