Compare commits

..

521 commits

Author SHA1 Message Date
Hendrik Brummermann
fcd8330db0
Merge pull request #769 from arianne/dependabot/npm_and_yarn/npm_and_yarn-53cbaf2a5b
Some checks failed
CodeQL / Analyze (push) Has been cancelled
Java CI / build (push) Has been cancelled
Bump esbuild from 0.27.2 to 0.28.1 in the npm_and_yarn group across 1 directory
2026-07-12 06:51:38 +02:00
dependabot[bot]
98864f3802
Bump esbuild in the npm_and_yarn group across 1 directory
Some checks failed
Java CI / build (push) Has been cancelled
Bumps the npm_and_yarn group with 1 update in the / directory: [esbuild](https://github.com/evanw/esbuild).


Updates `esbuild` from 0.27.2 to 0.28.1
- [Release notes](https://github.com/evanw/esbuild/releases)
- [Changelog](https://github.com/evanw/esbuild/blob/main/CHANGELOG-2025.md)
- [Commits](https://github.com/evanw/esbuild/compare/v0.27.2...v0.28.1)

---
updated-dependencies:
- dependency-name: esbuild
  dependency-version: 0.28.1
  dependency-type: direct:development
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-14 11:54:18 +00:00
dimitris
0dff60f98e Guard external link launch against ActivityNotFoundException 2026-06-04 15:04:24 -07:00
Hendrik Brummermann
246d9ce288 converted BarehandAttackSprite and RangedAttackSprite to ImageBitmap 2026-03-01 23:04:12 +01:00
Hendrik Brummermann
31d417e31f code cleanup 2026-03-01 23:04:12 +01:00
Hendrik Brummermann
60d20f593b use ImageBitmap for SkillEffect 2026-03-01 23:04:11 +01:00
Hendrik Brummermann
f44e519104
Merge pull request #762 from arianne/dependabot/npm_and_yarn/npm_and_yarn-fb4fae9948
Bump minimatch from 9.0.5 to 9.0.9 in the npm_and_yarn group across 1 directory
2026-03-01 12:54:22 +01:00
dependabot[bot]
70dc2ded31
Bump minimatch in the npm_and_yarn group across 1 directory
Some checks failed
Java CI / build (push) Has been cancelled
Bumps the npm_and_yarn group with 1 update in the / directory: [minimatch](https://github.com/isaacs/minimatch).


Updates `minimatch` from 9.0.5 to 9.0.9
- [Changelog](https://github.com/isaacs/minimatch/blob/main/changelog.md)
- [Commits](https://github.com/isaacs/minimatch/compare/v9.0.5...v9.0.9)

---
updated-dependencies:
- dependency-name: minimatch
  dependency-version: 9.0.9
  dependency-type: indirect
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-01 10:34:11 +00:00
Hendrik Brummermann
542f4524db converted StatusIconDrawer to ImageBitmap 2026-02-28 18:55:14 +01:00
Hendrik Brummermann
0d25beefa8 refactored singleton class StatusIconDrawer out of RPEntity 2026-02-28 03:14:24 +01:00
Hendrik Brummermann
3a478f341d use HeldObjectManager.get() 2026-02-28 02:30:16 +01:00
Hendrik Brummermann
c9f865a894 slightly reduce size of drag icon to so players focus cursor position 2026-02-23 22:26:32 +01:00
Hendrik Brummermann
afd5329fcc Item uses ImageBitmap instead of HTMLImageElement 2026-02-23 22:08:35 +01:00
Hendrik Brummermann
b8edcfb252 code cleanup 2026-02-22 19:48:41 +01:00
Hendrik Brummermann
bebce66517 use ImageBitmap in DomesticAnimal 2026-02-22 19:32:51 +01:00
Hendrik Brummermann
6f58eef4f5 updated marauroa.jar to set _rpclass before init() 2026-02-22 19:29:26 +01:00
Hendrik Brummermann
4d2925aa4b cleaned up HTMLImageStorage usage 2026-02-22 10:53:57 +01:00
Hendrik Brummermann
fb2ae76fc5 renamed SpriteStore to HTMLImageStore and access it directly 2026-02-22 09:59:37 +01:00
Hendrik Brummermann
aadec09b5d clean up factory class 2026-02-22 09:16:33 +01:00
Hendrik Brummermann
9fd4316d0f removed stendhal.data.sprites variable 2026-02-22 09:09:49 +01:00
Hendrik Brummermann
e1d01dea79 replaced stendhal.ui.gamewindow and stendhal.ui.viewport 2026-02-12 23:52:30 +01:00
Hendrik Brummermann
dd500a36e5 replaced stendhal.zone with Zone.get() 2026-02-12 22:29:45 +01:00
Hendrik Brummermann
8b2727f392 converted stendhal.ui.html into static class HTMLUtil 2026-02-12 21:59:12 +01:00
Hendrik Brummermann
d350c2b494 invoke singleton get-methods instead of SingletonRepo 2026-02-12 21:27:15 +01:00
Hendrik Brummermann
2022b28b76 access OutfitStore singleton directly 2026-02-12 01:42:32 +01:00
Hendrik Brummermann
1f9242ae6f converted to image bitmap 2026-02-10 23:24:15 +01:00
Hendrik Brummermann
03654e4459 prevent path traversal 2026-02-09 22:32:04 +01:00
Hendrik Brummermann
fcadfcdbd3 use ImageBitmap 2026-02-09 22:28:39 +01:00
Hendrik Brummermann
581ffc886a use ImageBitmap and ImageManager 2026-02-09 00:32:54 +01:00
Hendrik Brummermann
e2146721d1 use ImageBitmap in ActivityIndicatorSprite 2026-02-08 22:02:29 +01:00
Hendrik Brummermann
c6a51ffcf3 converted Blood from SpriteStore to ImageManager 2026-02-08 18:45:22 +01:00
Hendrik Brummermann
d846fa5818 created an ImageSprite class for ImageManager ImageRefs and use it 2026-02-08 18:45:05 +01:00
Hendrik Brummermann
13fc7f6b1a deleted unused classes EmptySprite, ImageSprite, Sprite, Tileset 2026-02-08 16:45:36 +01:00
Hendrik Brummermann
86cf9c0959 deleted class ImageSprite 2026-02-08 15:19:16 +01:00
Hendrik Brummermann
7c5cef1181 fixed ctrl direction change 2026-02-08 00:27:36 +01:00
Hendrik Brummermann
72f23a7bc1 call super.destroy() 2026-02-07 22:24:24 +01:00
Hendrik Brummermann
404263a1ef code cleanup 2026-02-07 22:23:33 +01:00
Hendrik Brummermann
b479ec3d52 use ImageManager instead of SpriteStore for weather images 2026-02-07 02:04:40 +01:00
Hendrik Brummermann
b796ba36b0 use ImageManager instead of SpriteStore 2026-02-07 02:01:55 +01:00
Hendrik Brummermann
07a41fddfe cache tileset-images to speed up zone changes 2026-02-07 02:01:21 +01:00
Hendrik Brummermann
97ea5ab442 use ImageManager 2026-02-05 22:09:59 +01:00
Hendrik Brummermann
659c155a36 apply preferences to own outfit 2026-02-05 22:09:39 +01:00
Hendrik Brummermann
0f3ecbd3dd code cleanup 2026-02-05 22:08:12 +01:00
Hendrik Brummermann
535e7f5727 use ImageManager images for preview of outfit parts into Outfit Dialog 2026-02-04 22:57:48 +01:00
Hendrik Brummermann
1bf34316fb support ImageRef.free() without going through the ImageManager 2026-02-04 22:57:01 +01:00
Hendrik Brummermann
c7befd2fe1 support cleanup of ImageManager 2026-02-04 22:15:01 +01:00
Hendrik Brummermann
230b25e5fa added support for filtered images 2026-02-02 22:10:18 +01:00
Hendrik Brummermann
3b6d652aa8 dont return the image in waitFor because it might have expired 2026-02-02 22:04:07 +01:00
Hendrik Brummermann
41604ca00e code cleanup 2026-02-02 21:59:34 +01:00
Hendrik Brummermann
7e0fbe0f16 split ImageRef and ImageRefImpl to hide management methods 2026-02-02 20:54:03 +01:00
Hendrik Brummermann
2bd16f0307 implemented ImageRef.waitFor() 2026-02-01 22:43:01 +01:00
Hendrik Brummermann
afb06b8f97 started to work on ImageManager and ImageRef 2026-02-01 22:25:24 +01:00
Hendrik Brummermann
95f373bd1c removed reference to global stendhal object 2026-02-01 22:25:06 +01:00
Hendrik Brummermann
e58e6a54cb do not use failsave sprite for drag image 2026-01-31 23:11:37 +01:00
Hendrik Brummermann
f109b551f5 optimized image creation 2026-01-31 23:10:42 +01:00
Hendrik Brummermann
5f4d9d9460 moved SpriteStore.getAreaOf() to HTMLImageElementUtil 2026-01-31 21:28:43 +01:00
Hendrik Brummermann
61f047a955 prevent negative positions of dialogs 2026-01-31 17:18:58 +01:00
Hendrik Brummermann
3534bf384f close outfit dialog preview ImageBitmap 2026-01-31 17:06:49 +01:00
Hendrik Brummermann
6b1296e059 renamed MultilayerImage to MultilayerImageLoader 2026-01-31 15:50:39 +01:00
Hendrik Brummermann
c19e4b0627 added filter support to MultilayerImage 2026-01-31 15:50:19 +01:00
Hendrik Brummermann
72d569343a implemented MultilayerImage loader 2026-01-31 14:55:56 +01:00
Hendrik Brummermann
a6708ee0c2 removed references to stendhal.data.map and SingletonRepo.getMap() 2026-01-25 23:43:17 +01:00
Hendrik Brummermann
e0dce1a242 access TileMap directly without referencing stendhal.data.map 2026-01-25 23:33:25 +01:00
Hendrik Brummermann
55e802b988 changed module and moduleResolution for better compatibility 2026-01-25 23:09:08 +01:00
Hendrik Brummermann
d24e452f59 inlined LandscapeRender.ts into CombinedTilesetRenderingStrategy.ts 2026-01-25 23:08:26 +01:00
Hendrik Brummermann
8fc173d923 replaced tileset loader "ImagePreloader" as ImageCache using ImageBitmap 2026-01-25 20:01:31 +01:00
Hendrik Brummermann
1484f872da code cleanup 2026-01-25 19:59:25 +01:00
Hendrik Brummermann
93a99c9c10 moved CombinedTilesetRenderingStrategy out of LandscapeRenderingStrategy 2026-01-25 01:53:13 +01:00
Hendrik Brummermann
79ba39a030 fixed moduleResolution setting 2026-01-25 01:41:35 +01:00
Hendrik Brummermann
1c50a2a454 moved sprite/image/ImageFilter out of data/SpriteStore 2026-01-25 01:40:28 +01:00
Hendrik Brummermann
4feb1e628a use OffscreenCanvas to create outfit sprite 2026-01-24 23:13:03 +01:00
Hendrik Brummermann
662aab6ded use ImageBitmap for minimap static collisions 2026-01-24 18:39:35 +01:00
Hendrik Brummermann
f9fc0230f5 use OffscreenCanvas 2026-01-24 15:13:40 +01:00
Hendrik Brummermann
ba6d507924 inlined DrawingStage into Outfit 2026-01-23 23:00:04 +01:00
Hendrik Brummermann
e121d44356 added TODOs and fixed compiler warnings 2026-01-23 22:47:34 +01:00
Hendrik Brummermann
8b61de02e6 converted Singleton DrawingStage to instance and use Offscreen 2026-01-23 22:47:17 +01:00
Hendrik Brummermann
1ca1f0e47e fixed undefined _hsMap() error 2026-01-23 21:31:57 +01:00
Jordan Irwin
3026afe931
Manually build code in CodeQL workflow as default target has changed 2026-01-20 21:52:22 -08:00
Jordan Irwin
f9a37f122e
Update instances of CodeQL Action to v3 as v2 is now deprecated 2026-01-20 21:39:33 -08:00
Jordan Irwin
fd2cff8618
Clean up README 2026-01-20 20:27:21 -08:00
Jordan Irwin
30494af57c
Fix running server with 'ant server_run' 2026-01-20 19:41:59 -08:00
Jordan Irwin
2ed431fd6a
Add Spanish translations for lemon, banana, & corn 2026-01-20 01:27:31 -08:00
Jordan Irwin
cc4918a5ed
Add Spanish translation for map description 2026-01-20 01:26:38 -08:00
Jordan Irwin
6608eb2b02
Add Spanish translations for some newer items 2026-01-20 01:26:09 -08:00
Jordan Irwin
79622ee9cf
Update Spanish translations for some renamed items 2026-01-20 01:12:57 -08:00
Jordan Irwin
c6f2718aec
Remove trailing periods from translated names 2026-01-20 01:12:06 -08:00
Jordan Irwin
1fd97009eb
Update Spanish translations of item & entity descriptions 2026-01-20 00:19:55 -08:00
Jordan Irwin
517b62c5b1
Update Spanash locale file header 2026-01-20 00:19:29 -08:00
Jordan Irwin
de36580350
Run 'ant locale_update' 2026-01-20 00:14:16 -08:00
Jordan Irwin
3d971f37b5
Update locale template 2026-01-20 00:13:41 -08:00
Jordan Irwin
4666911be6
Don't need English language file 2026-01-20 00:13:30 -08:00
AntumDeluge
c4723aba93 Merge pull request 'Clean Up Ant Build' (#32) from AntumDeluge/stendhal:build_cleanup into master
Reviewed-on: https://codeberg.org/arianne/stendhal/pulls/32
2026-01-20 03:47:18 +01:00
Jordan Irwin
8c93122d1e
Rename target locale_build_template to locale_template 2026-01-19 18:07:18 -08:00
Jordan Irwin
2bec3a151b
Remove unneeded aliases 2026-01-19 18:03:56 -08:00
Jordan Irwin
38f5c0124d
Remove build target descriptions
Descriptions now available in `ant help` target.
2026-01-19 18:03:56 -08:00
Jordan Irwin
2df3243f2d
Make 'help' default target 2026-01-19 18:03:55 -08:00
Jordan Irwin
08873546ba
Add help info to ant build 2026-01-19 18:03:47 -08:00
Jordan Irwin
26c4723749
Move build properties to sub-module 2026-01-19 17:38:39 -08:00
Jordan Irwin
6eeff4766d
Make compile_stendhaltools target alias of compile_tools 2026-01-19 17:38:39 -08:00
Jordan Irwin
737cac9495
Make compile_stendhaltextclient build target alias of compile_textclient 2026-01-19 17:38:33 -08:00
Hendrik Brummermann
5ae5d33438 updated marauroa.jar
Some checks failed
Java CI / build (push) Has been cancelled
2026-01-18 21:41:30 +01:00
Hendrik Brummermann
621a43579a fixed import 2026-01-18 21:05:29 +01:00
Hendrik Brummermann
45cd2ac30e moved onPerceptionEnd method from Client to StendhalPerceptionListener 2026-01-18 14:13:13 +01:00
Hendrik Brummermann
b328b1aedf moved RPObject, RPEvent and RPSlot from Stendhal to Marauroa 2026-01-17 23:50:58 +01:00
Hendrik Brummermann
d633ebf947 use instance of Marauroa class instead of global marauroa object 2026-01-17 15:15:33 +01:00
Hendrik Brummermann
f4935f4928 updated marauroa.jar 2026-01-16 22:07:55 +01:00
Hendrik Brummermann
b71a29f883 user register for RPObjects 2026-01-16 22:04:56 +01:00
Hendrik Brummermann
3424b898b8 created dedicated CorpseSlot class 2026-01-16 22:04:20 +01:00
Hendrik Brummermann
1f3abca39c use register for events 2026-01-16 22:03:57 +01:00
Hendrik Brummermann
d6ca574a20 fixed references to wrong "ui" variable 2026-01-15 21:42:09 +01:00
Hendrik Brummermann
612b4a6b88 code cleanup 2026-01-14 23:09:37 +01:00
Hendrik Brummermann
a13ee36fe8 converted all events to TypeScript 2026-01-14 22:56:50 +01:00
Jordan Irwin
2abc8df666
Run 'ant cleanwhitespace' 2026-01-13 19:12:13 -08:00
Jordan Irwin
14d7e046be
Process ant build files in 'cleanwhitespace' target 2026-01-13 19:09:24 -08:00
Jordan Irwin
6c64621496
Don't try to clean removed 'tiled' directory 2026-01-13 19:09:23 -08:00
Hendrik Brummermann
6a4009c790 fixed build 2026-01-13 23:07:55 +01:00
Hendrik Brummermann
38934a8c09 fixed local builds after esbuild migration 2026-01-13 09:13:54 +01:00
Hendrik Brummermann
738d3cd830 explicitly define marauroa global variable 2026-01-10 00:24:12 +01:00
Hendrik Brummermann
8cb1a7b050 converted stendhal object into a static class 2026-01-09 00:06:37 +01:00
Hendrik Brummermann
d1fc6947b7 use esbuild 2026-01-06 21:45:58 +01:00
Hendrik Brummermann
402bb84c43 fixed this-reference and redirect to character selection on disconnect 2026-01-06 21:44:41 +01:00
Hendrik Brummermann
819b80913f added esbuild as devDependencies 2026-01-06 21:43:57 +01:00
Hendrik Brummermann
da4378d30c updated marauroa 2026-01-06 21:43:35 +01:00
Hendrik Brummermann
37d3e1c84d fixed init order and wrong "this". 2026-01-02 04:11:34 +01:00
Hendrik Brummermann
f1d98fff56 access SpriteStore via singletons instead of stendhal-variable 2026-01-02 04:11:33 +01:00
Jordan Irwin
8f642ac446
Increment version to 1.49.5 2026-01-01 18:33:01 -08:00
Jordan Irwin
6224a0638a
Run 'ant init' to update copyright year 2026-01-01 18:31:27 -08:00
Jordan Irwin
c38740eaab
Use 'versionName' instead of 'versionCode' in Android output filename 2026-01-01 18:24:56 -08:00
Hendrik Brummermann
cbf971e632 replace stendhal.paths with Paths to ensure correct init order 2026-01-02 01:37:39 +01:00
Hendrik Brummermann
7546fbba80 removed unused library 2025-12-30 00:24:38 +01:00
Hendrik Brummermann
face9f3a67 use OffscreenCanvas and ImageBitmap instead of img- and canvas-elements 2025-12-28 18:59:53 +01:00
Hendrik Brummermann
703fa61329 cleaned up references to animations 2025-12-28 18:13:15 +01:00
Hendrik Brummermann
4dbe1f73fe implemented light rendering (to test "/debug light" and change zone) 2025-12-28 17:51:51 +01:00
Hendrik Brummermann
09371bff47 restore transparency after blending 2025-12-28 14:41:39 +01:00
Hendrik Brummermann
6ff59a0040 refactored drawCombinedTileAtIndex and drawTile in preparation for blend 2025-12-28 12:40:28 +01:00
Hendrik Brummermann
063d03c45f used Canvas and RenderingContext2D to allow OffscreenCanvas 2025-12-28 12:32:20 +01:00
Hendrik Brummermann
d191c14232 updated typescript and typedoc 2025-12-28 12:31:20 +01:00
Hendrik Brummermann
d9b51f0d15 disabled code to draw lights (alpha is broken) 2025-12-28 10:04:14 +01:00
Hendrik Brummermann
44f6a4a9fe marked event listener as passive to prevent scroll delay 2025-12-27 13:10:16 +01:00
Hendrik Brummermann
d1d4eb5c49 removed setting alpha in applyHSLFilter method 2025-12-27 13:00:05 +01:00
Hendrik Brummermann
0d56d2b63b renamed Map to TileMap and use type definition 2025-12-26 14:57:00 +01:00
Hendrik Brummermann
a000e5f788 made blend layer available 2025-12-26 14:41:21 +01:00
Jordan Irwin
cc5414894f
Use JDK version 17 in Android Build Test workflow
Current bundled Gradle Wrapper version is 7.5.1, which isn't
compatible with more recent Java releases.
2025-12-24 22:10:38 -08:00
Jordan Irwin
2e5dbc12c6
Validate Gradle Wrapper .jar in Android Build Test workflow 2025-12-24 22:01:09 -08:00
Jordan Irwin
f756534846
Validate Gradle Wrapper distribution checksum not .jar checksum 2025-12-24 21:59:21 -08:00
Jordan Irwin
7174c32521
Send Android Build error report to Discord dev channel 2025-12-24 18:21:32 -08:00
Jordan Irwin
049b91e98b
Don't send details to Discord 2025-12-24 18:21:01 -08:00
Jordan Irwin
a5db37305e
Fix 'run' line 2025-12-24 18:13:57 -08:00
Jordan Irwin
179bc4d5e7
Fix code alignment in Android Build Test GitHub workflow 2025-12-24 18:10:25 -08:00
Jordan Irwin
31c4f9cfb4
Discord webhook for Android Build Test failure 2025-12-24 18:07:00 -08:00
Jordan Irwin
c4491004d2
Parse job ID in Android Build Test GitHub workflow 2025-12-24 18:05:36 -08:00
Jordan Irwin
e910892a16
Build .apk packages using Ant in Android Build Test GitHub workflow 2025-12-24 17:31:39 -08:00
Jordan Irwin
7beb123117
Allow dispatching Android build workflow manually 2025-12-24 17:11:58 -08:00
Hendrik Brummermann
a141cc187d properly format item names in description text of shop windows 2025-12-22 19:21:51 +01:00
Hendrik Brummermann
c68f0a59d5 show outfits in shop sign dialog 2025-12-22 18:06:00 +01:00
Hendrik Brummermann
a3bd4b328a code cleanup 2025-12-22 18:05:49 +01:00
Hendrik Brummermann
9e56945faf use proper table for item shop signs 2025-12-22 17:31:24 +01:00
Hendrik Brummermann
6f783d3ef6 moved ShowItemListEvent and ShowOutfitListEvent out of EventRegistry 2025-12-22 17:02:31 +01:00
Hendrik Brummermann
ccee5a42b3 added experiment to .gitignore 2025-12-21 22:11:50 +01:00
Jordan Irwin
f2d519a29f
Revert "Ensure cargo-license installed for nativehelper build"
This reverts commit d516c738bf.
2025-11-03 03:43:05 -08:00
Jordan Irwin
d516c738bf
Ensure cargo-license installed for nativehelper build 2025-11-03 03:29:09 -08:00
Jordan Irwin
ad92b7f2a9
make sure extensions/binary directory exists when building Neutralinojos app 2025-11-03 00:14:27 -08:00
Hendrik Brummermann
2ee0aaa5e7 created stendhal-client.zip file and renamed executables 2025-11-02 12:12:50 +01:00
Jordan Irwin
6592f5c245
Fix Gourmet achievement
Coal for Haunchy quest slot state was changed to use "done" instead of "waiting".

Closes: https://codeberg.org/arianne/stendhal/issues/28
2025-11-01 00:18:03 -07:00
Jordan Irwin
8206631665
Fix Unit test for Gwen's updated shop prices 2025-10-31 18:21:40 -07:00
Jordan Irwin
bdb34e8628
Reduce outfit prices in Gwen's shop by 50% 2025-10-31 18:07:20 -07:00
Jordan Irwin
0fba46d89b
Minor change to script text output 2025-10-31 17:56:18 -07:00
Jordan Irwin
4a55c4a706
Trim large music files to decrease size to 2MB or less
Should help to mitigate issue with Java client failing to load large music data on systems with low resources.

https://github.com/arianne/stendhal/issues/750
2025-10-31 17:43:09 -07:00
Jordan Irwin
4253e1e73b
Python script to check audio files sizes
Prints warning if file size exceeds 2MB.

https://github.com/arianne/stendhal/issues/750
2025-10-31 17:42:55 -07:00
Jordan Irwin
4e8fe0592e
Add license boilerplates 2025-10-15 20:15:19 -07:00
Jordan Irwin
5709a85824
Set Java client compilation to 8
Support for 7 removed in newer Java versions.
2025-09-25 22:03:44 -07:00
Jordan Irwin
700e3ee730
Replace calls to deprecated URL constructors 2025-09-25 21:58:36 -07:00
Jordan Irwin
0b2cb9df08
Set User-Agent string for Wikipedia API requests
Closes: https://codeberg.org/arianne/stendhal/issues/27
2025-09-25 21:58:27 -07:00
Jordan Irwin
63d9667264
Fix typo in quest dialogue 2025-09-25 19:48:53 -07:00
Jordan Irwin
920ed5a3a2
Add start screen screenshot for F-Droid 2025-09-24 13:15:29 -07:00
Jordan Irwin
f02fc6b04f
Add phone screenshots for F-Droid
Closes https://github.com/arianne/stendhal/issues/754
2025-09-24 13:02:57 -07:00
Jordan Irwin
807a8bb40a
Print authentication status when nativehelper connection closes 2025-09-12 10:40:28 -07:00
Jordan Irwin
e6180e9ff5
Update changes 2025-09-08 23:05:15 -07:00
Jordan Irwin
3de1141898
Close nativehelper extension when clientDisconnect event triggered
Closes https://github.com/neutralinojs/neutralinojs/issues/1458
Closes https://github.com/arianne/stendhal/issues/736
2025-09-08 22:46:57 -07:00
Jordan Irwin
3e31e6b788
Update changes 2025-09-07 13:08:15 -07:00
Jordan Irwin
ff9fb76ab3
Update Neutralino.js to 6.2.0
Closes: https://github.com/arianne/stendhal/issues/696

Commit reference: f46403677c
2025-08-26 13:49:09 -07:00
Jordan Irwin
ccb229efe9
Clean up indentation in Neutralino.js config 2025-08-26 13:48:21 -07:00
Jordan Irwin
5f3f86c6e7
Normalize line endings in Tiled maps 2025-07-26 18:44:53 -07:00
Jordan Irwin
42c30cdbda
Run 'ant clean_whitespace' 2025-07-26 16:08:05 -07:00
Jordan Irwin
01dddc103f
Update Android source location in clean_whitespace target 2025-07-26 16:07:12 -07:00
Hendrik Brummermann
70bcbc3066 perfer Codeberg over Github 2025-01-22 22:18:29 +01:00
Hendrik Brummermann
3c7b1a30ae use Mastodon instead of Twitter 2025-01-22 22:13:20 +01:00
Jordan Irwin
e82524ec2f
Adjust coloring alpha setting to better match Java client 2025-01-09 02:54:59 -08:00
Jordan Irwin
f224b79094
Don't check movement radius if NPC has path 2025-01-02 23:56:42 -08:00
Jordan Irwin
a7e66a4288
Ignore movement limit when radius set to 0
Fixes SilentNPC paths
Closes https://codeberg.org/arianne/stendhal/issues/7
2025-01-02 23:55:56 -08:00
Jordan Irwin
79e882fe5f
Code optimization 2025-01-02 21:50:19 -08:00
Jordan Irwin
8b63897d37
Update copyright year 2025-01-02 14:38:31 -08:00
Jordan Irwin
a24774cda9
Template F-Droid release announcment file for master branch 2024-12-21 15:14:49 -08:00
Jordan Irwin
2746ee1411
Increment version 2024-12-21 15:11:30 -08:00
Jordan Irwin
962bd11aec
Fix Mr Ross's head 2024-12-21 14:57:16 -08:00
Jordan Irwin
a9ae0db9a9
Disable encrypted DependencyInfoBlock in APK build
https://gitlab.com/fdroid/fdroiddata/-/issues/3330
2024-12-20 19:58:47 -08:00
Jordan Irwin
06f4e5eb78
Remove unreachable code block 2024-12-17 19:26:16 -08:00
Jordan Irwin
ade5f226a9
Fix random selecting between patrolling & wander idle behavior 2024-12-17 18:44:43 -08:00
Jordan Irwin
d2f549394d
Touch up scaling artifacts in necrosophia overlay 2024-12-15 22:27:45 -08:00
Hendrik Brummermann
4f9ffc1a48 treat undefined strings as empty 2024-12-11 21:18:38 +01:00
Jordan Irwin
178cd60429
Remove music with questionable licensing from Athor map &...
...restore bongos.
2024-12-03 11:43:16 -08:00
tigertoes
f4f6fd6a2c added second level checking set of portals for entwives 2024-08-08 00:24:19 -04:00
tigertoes
23412db466 modified map to house mithril dragons - access to come 2024-08-07 23:01:42 -04:00
Jordan Irwin
65d0e04af3
Add FIXME note 2024-07-31 04:00:30 -07:00
Jordan Irwin
2cee409a77
Add TODO note 2024-07-31 01:51:35 -07:00
Jordan Irwin
aba72381ea
Override keypress events in login dialog...
Allows using tab key to select fields.
2024-07-31 00:14:02 -07:00
Jordan Irwin
14586c634c
Add logout button to choose character dialog 2024-07-30 23:46:27 -07:00
Jordan Irwin
796a1e09cb
Hide close button of login & character select dialogs 2024-07-30 22:47:00 -07:00
Jordan Irwin
706d485113
Method to hide close button of floating window 2024-07-30 22:37:55 -07:00
Jordan Irwin
a10ec0272d
Add support for rotating outfit preview 2024-07-30 22:15:04 -07:00
Jordan Irwin
d53d3f690e
Use OutfitPreviewComponent for composite preview in outfit dialog 2024-07-30 22:13:11 -07:00
Jordan Irwin
52b1df5f96
Component for creating an outfit preview 2024-07-30 22:11:06 -07:00
Jordan Irwin
76feee77fd
Class to represent an entity's outfit 2024-07-30 22:11:06 -07:00
Jordan Irwin
bf60fed1b8
Method to add image directly to SpriteStore cache 2024-07-30 22:10:43 -07:00
Jordan Irwin
c4aa1a9786
Add method to OutfitStore to check if layer uses "skin" coloring 2024-07-30 21:34:06 -07:00
Jordan Irwin
21d00772ad
Move layer names to OutfitStore 2024-07-30 21:23:52 -07:00
Jordan Irwin
2d232b1646
Drawing stage class for manipulating images before they are...
...displayed
2024-07-30 21:13:15 -07:00
Jordan Irwin
0f2a5117f5
Function to check if string is empty or contains whitespace only 2024-07-30 21:04:40 -07:00
Jordan Irwin
cb6db786f2
Function for padding string on left side 2024-07-30 21:03:54 -07:00
Jordan Irwin
212eba66d5
Convert StringUtil class to namespace 2024-07-30 20:58:19 -07:00
Jordan Irwin
cdadb33ca0
Add license boilerplate 2024-07-25 18:54:41 -07:00
Jordan Irwin
5e4d873a38
Flip pathfinding button icon & fill with white 2024-07-25 15:27:03 -07:00
Jordan Irwin
cb4d5b609f
Update changes 2024-07-25 02:32:39 -07:00
Jordan Irwin
a6f3e22538
Create test for dojo seller/repairer NPC (Akutagawa) 2024-07-25 02:32:39 -07:00
Jordan Irwin
7c1b52bff6
Fix Akutagawa's repair prices 2024-07-25 02:32:38 -07:00
Jordan Irwin
8930612a49
Fix repairer checks & conditions 2024-07-25 02:32:38 -07:00
Jordan Irwin
b7c552cdf4
Fix supported item check in repair request 2024-07-25 02:32:38 -07:00
Jordan Irwin
236bb8bd72
Fix repairer dynamic responses 2024-07-25 02:32:37 -07:00
Jordan Irwin
89ee706681
Set conversation state in ChatAction 2024-07-25 02:32:37 -07:00
Jordan Irwin
ef768a1ba6
Don't pass item name to canRepair method 2024-07-25 02:32:36 -07:00
Jordan Irwin
c8f5d45eef
Support plural & case-insensitive repair requests 2024-07-25 02:32:36 -07:00
Jordan Irwin
98e0cf4222
Reset assassin repairer when conversation ends or repair is executed 2024-07-25 02:32:36 -07:00
Jordan Irwin
b6f066508f
Remove fixme note & unneeded warning suppression 2024-07-25 02:32:35 -07:00
Jordan Irwin
2dc2318a3b
Move methods from AssassinRepairerAdder to AssassinRepairer 2024-07-25 02:32:35 -07:00
Jordan Irwin
bbe8c03b97
Fixed condition to check if player dropped items before confirming...
...repair
2024-07-25 02:32:34 -07:00
Jordan Irwin
e06b6737c4
Convert response IDs to enum 2024-07-25 02:32:17 -07:00
Jordan Irwin
d6428edaf3
Set locale when converting to lower case 2024-07-25 02:31:42 -07:00
Jordan Irwin
b71d3a7ccc
Add doc string 2024-07-25 02:31:15 -07:00
Jordan Irwin
42f98da03f
Add "repair" to chat options merchant activities list 2024-07-25 01:56:01 -07:00
Jordan Irwin
418d9cde03
Add repair phrases to ConversationPhrases 2024-07-25 01:56:01 -07:00
Jordan Irwin
9e387d13ec
Methods to get entities by class type 2024-07-25 01:23:01 -07:00
Jordan Irwin
cbf59d11b8
Don't try to autobind if player is null 2024-07-25 01:22:56 -07:00
Jordan Irwin
0de7b82913
Add todo notes 2024-07-24 19:01:03 -07:00
Jordan Irwin
228898fa15
Add/Clean up doc strings 2024-07-24 19:00:32 -07:00
Jordan Irwin
21b6930a11
Reword changes section 2024-07-23 22:08:03 -07:00
Jordan Irwin
38c71e284e
Update changes 2024-07-23 17:28:48 -07:00
Jordan Irwin
593d27f2c4
Hide screen capture behing debugging property 2024-07-23 17:24:32 -07:00
Jordan Irwin
26b56245b9
Add support for viewport video capture using application menu 2024-07-23 17:24:31 -07:00
Jordan Irwin
e867756659
Add support for viewport video capture using slash action 2024-07-23 17:24:31 -07:00
Jordan Irwin
f33639737c
Class for capturing video of viewport 2024-07-23 17:24:30 -07:00
Jordan Irwin
a70721a98f
Make DownloadUtil.timestamp public 2024-07-23 17:24:28 -07:00
Jordan Irwin
96e8aa1a1f
Add ring of clarity drop to golden orc 2024-07-23 16:57:09 -07:00
Jordan Irwin
743eaf8384
Add ring of clarity drop to unicorn 2024-07-23 16:57:04 -07:00
Jordan Irwin
e81ee6a33c
Ring of clarity (increases atk accuracy by 25%) 2024-07-23 16:44:49 -07:00
Jordan Irwin
585981f8c4
Add item attribute to affect hit chance 2024-07-23 16:38:57 -07:00
Jordan Irwin
d5f3712ee7
Add method to get all items from equipment slots 2024-07-23 16:38:52 -07:00
Jordan Irwin
68b99deaec
Fix typo 2024-07-23 15:30:19 -07:00
Jordan Irwin
1bc83e61c0
Use variable instance instead of raw value 2024-07-23 15:30:00 -07:00
Jordan Irwin
c76392f854
Add fixme/todo notes 2024-07-23 15:29:35 -07:00
Jordan Irwin
c2a79db036
Use xml config to set up dojo seller/repairer NPC 2024-07-23 02:09:54 -07:00
Jordan Irwin
4794564af9
Remove ShopsList.addBuyer method 2024-07-23 02:09:07 -07:00
Jordan Irwin
254ebf2ee1
Un-deprecated overload of ShopsList.add 2024-07-23 02:06:14 -07:00
Jordan Irwin
d5a889c58e
Replace calls to deprecated ShopsList.get 2024-07-23 00:56:32 -07:00
Jordan Irwin
5e7b1f9c73
Remove calls to deprecated get & init methods in ShopsXMLLoader 2024-07-23 00:33:23 -07:00
Jordan Irwin
ce872ef5d2
Suppress unused method warning 2024-07-23 00:33:19 -07:00
Jordan Irwin
ed42b5a074
Parameterize references to generic type Class<T> 2024-07-23 00:28:55 -07:00
Jordan Irwin
26883d7afa
Add license boilerplate 2024-07-22 23:50:34 -07:00
Jordan Irwin
e166b717b3
Un-deprecate NPC.moveRandomly 2024-07-22 23:39:11 -07:00
Jordan Irwin
24fbeee56b
Return Point instead of Pair from getRandomSpawnPosition 2024-07-22 23:28:07 -07:00
Jordan Irwin
f520851d46
Add TODO note 2024-07-22 15:56:15 -07:00
Jordan Irwin
e76888cc51
Support setting wander radius limit in IdleBehaviourFactory 2024-07-22 15:49:47 -07:00
Jordan Irwin
5cf76c7f03
Apply wander behavior to dog NPCs 2024-07-22 15:41:23 -07:00
Jordan Irwin
9bd676a3c3
Support returning to origin in wander behavior 2024-07-22 15:25:23 -07:00
Jordan Irwin
81b46c3fa0
Return squared distance when calculating distance to entity origin...
...and make method public
2024-07-22 15:08:36 -07:00
Jordan Irwin
2edcfb1cf7
Return squared distance when calculating distance to entity origin 2024-07-22 15:07:25 -07:00
Jordan Irwin
bf5a4e73bd
Overload Rand.flipCoin for result with even probability 2024-07-22 14:11:20 -07:00
Jordan Irwin
485e626083
Add doc strings & code cleanup 2024-07-22 09:55:33 -07:00
Jordan Irwin
1f5d4be5ed
Update TODO note 2024-07-22 05:17:46 -07:00
Jordan Irwin
423bd033e0
Add TODO note 2024-07-22 03:52:16 -07:00
Jordan Irwin
96acebae7d
Admin script to manage clover 2024-07-21 21:38:48 -07:00
Jordan Irwin
40db53c75d
Add method to check for spawned clover 2024-07-21 21:38:18 -07:00
Jordan Irwin
01a3d15134
Don't try to remove clover from zone if it has already been...
...picked up by player
2024-07-21 21:36:32 -07:00
Jordan Irwin
345926808a
Add TODO note 2024-07-20 15:45:51 -07:00
Jordan Irwin
637effbf69
New quest: Lucky Four-Leaf Clover 2024-07-20 15:00:13 -07:00
Jordan Irwin
e2cf347731
New NPC: Maple, a clover hunter 2024-07-20 15:00:13 -07:00
Jordan Irwin
e681dc2fcc
Sprite image for clover hunter NPC (OGA BY)
Using dress 55 & hair 46.
2024-07-20 15:00:12 -07:00
Jordan Irwin
02ef1ed34f
New achievement: Luck O' the Irish
Find the four-leaf clover
2024-07-20 15:00:12 -07:00
Jordan Irwin
05ff7ffd66
Mark Sikhw maps as innaccessible 2024-07-20 15:00:11 -07:00
Jordan Irwin
336d83854f
Configure four-leaf clover spawner with 0_semos_plains_n map 2024-07-20 15:00:11 -07:00
Jordan Irwin
ac34c133ee
Four-leaf clover configurator 2024-07-20 15:00:04 -07:00
Jordan Irwin
e6b34706ac
Four-leaf clover spawner
https://stendhalgame.org/wiki/Stendhal_Quest_Ideas/Lucky_Four_Leaf_Clover
2024-07-20 14:59:06 -07:00
Jordan Irwin
aad2005dc0
Return item in growNewFruit 2024-07-20 14:57:16 -07:00
Jordan Irwin
e6e0d60bf5
Four-leaf clover item 2024-07-20 14:57:16 -07:00
Jordan Irwin
845df00bdd
Image for clover item (OGA BY)
Copied from lucky charm
2024-07-20 14:57:15 -07:00
Jordan Irwin
1af92af6af
Methods to get a random spawn position in a zone 2024-07-20 14:57:15 -07:00
Jordan Irwin
dcc390c30a
Method to get seconds to midnight from current time 2024-07-20 14:57:14 -07:00
Jordan Irwin
d5adb7c5ae
Add touched up base to kid1npc sprite 2024-07-18 10:43:57 -07:00
Jordan Irwin
92752ac7fe
Add touched up template for laying human adult 2024-07-18 10:43:18 -07:00
Jordan Irwin
e1f897fa30
Update changes 2024-07-15 11:01:35 -07:00
Jordan Irwin
3ba6448011
Make Amber wander 2024-07-15 10:39:22 -07:00
Jordan Irwin
0d334d4a22
Use wander idle behavior with rabbits in Fado 2024-07-15 10:39:21 -07:00
Jordan Irwin
2848042ea7
Don't stop or change direction until after position change to prevent...
...sprite jumping
2024-07-15 10:39:21 -07:00
Jordan Irwin
fccda47c93
Add support for using idle behavior with other NPC types 2024-07-15 10:39:20 -07:00
Jordan Irwin
a4fc86c04a
Add pre-logic to NPC types 2024-07-15 10:39:19 -07:00
Jordan Irwin
4dd4e8840c
Move wander idle behavior class to NPC package 2024-07-15 10:39:18 -07:00
Jordan Irwin
52a3809c35
Move idle behavior classes to NPC package 2024-07-15 10:39:17 -07:00
Jordan Irwin
757eb04038
Make idle behaviour work with NPC class 2024-07-15 10:39:16 -07:00
Jordan Irwin
6653634128
Add wander behavior to crabs in addition to patrolling 2024-07-15 10:38:47 -07:00
Jordan Irwin
8d42afbf0d
Change turtle behavior to wander 2024-07-15 10:38:46 -07:00
Jordan Irwin
2d43a41541
Allow randomly selecting between "patrolling" & "wander" behavior...
...when both are included in AI profiles
2024-07-15 10:38:46 -07:00
Jordan Irwin
858320c8e2
Reset idler to prevent stopping creature during chase 2024-07-15 10:38:45 -07:00
Jordan Irwin
95bf1616ba
Handle creature collision in idler if available 2024-07-15 10:38:44 -07:00
Jordan Irwin
0616ea3a8b
AI profile for "wandering" entities 2024-07-15 10:38:43 -07:00
Jordan Irwin
246a5b47dc
Add reset method to idle behavior classes 2024-07-15 10:38:42 -07:00
Jordan Irwin
0f118cbe46
Add onMoved method to idle behavior classes 2024-07-15 10:38:42 -07:00
Jordan Irwin
2f78691d05
Add methods to handle collision in idle behavior classes 2024-07-15 10:38:41 -07:00
Jordan Irwin
28b7ae2a23
Abstract idle behavior class 2024-07-15 10:38:40 -07:00
Jordan Irwin
f8a09deb53
Add method to randomly change NPC direction 2024-07-15 10:38:39 -07:00
Jordan Irwin
87c1111b63
Don't load sounds for events that are too far to be heard
https://github.com/arianne/stendhal/issues/742
2024-07-15 09:40:35 -07:00
Jordan Irwin
d0d0330ea2
Fall back to default sound radius 2024-07-15 09:36:33 -07:00
Jordan Irwin
7412928f51
Move sound event to its own class file 2024-07-15 09:36:32 -07:00
Jordan Irwin
a2bcd77959
Move default sound radius to common class 2024-07-15 09:36:32 -07:00
Jordan Irwin
ee715a5fe5
Announce new offers with Harold in chat/IRC 2024-07-14 19:50:10 -07:00
Jordan Irwin
b614dad186
Fix licensing of lucky charm 2024-07-11 00:29:43 -07:00
Jordan Irwin
179520b9df
Clean up item graphics sources 2024-07-11 00:26:59 -07:00
Jordan Irwin
ba56253b84
Clean up comment 2024-07-09 20:26:34 -07:00
Jordan Irwin
e906f1f3df
Add Region.DENIRAN_CITY & change appropriate quests 2024-07-09 20:26:33 -07:00
Jordan Irwin
4d2d68907a
Specify how many unicorn horns Zelan needs
Closes https://github.com/arianne/stendhal/issues/421
2024-07-09 16:20:35 -07:00
Jordan Irwin
8a75706607
Clean up grammar in Zelan's dialogue 2024-07-09 16:14:13 -07:00
Jordan Irwin
d6f528f81a
Treat "chaos" as both singular & plural
Closes https://github.com/arianne/stendhal/issues/586
2024-07-09 15:56:47 -07:00
Jordan Irwin
4db3ad4d67
Change Elodrin's skin color to match elves
Closes https://github.com/arianne/stendhal/issues/616
2024-07-09 15:04:19 -07:00
Jordan Irwin
fc644a9755
Update changes 2024-07-09 14:57:15 -07:00
Jordan Irwin
0c32227a7b
Clean up bestiary window layout
Closes https://github.com/arianne/stendhal/issues/675
2024-07-09 14:56:23 -07:00
Jordan Irwin
a39f2e65db
Move bestiary event to its own class 2024-07-09 14:25:46 -07:00
Jordan Irwin
65fb1748a7
Add transformation effect to vampires 2024-07-09 00:10:58 -07:00
Jordan Irwin
df48d0daac
Update changes 2024-07-08 23:16:17 -07:00
Jordan Irwin
a26777d722
Redraw electricity overlays 2024-07-08 23:10:52 -07:00
Jordan Irwin
9f532e2bc3
Extract flames from necrosophia sprite & use as overlay...
...animation (WIP)
2024-07-08 23:10:51 -07:00
Jordan Irwin
1827a40eac
Fix attack sprite animation 2024-07-08 23:10:51 -07:00
Jordan Irwin
091c6deb79
Use OverlaySpriteImpl as base for AttackSprite 2024-07-08 23:10:50 -07:00
Jordan Irwin
abcbc1dbae
Rename ActionSprite to AttackSprite 2024-07-08 23:10:49 -07:00
Jordan Irwin
1d3a249d76
Replace Aenihata's static overlay with animated one 2024-07-08 23:10:49 -07:00
Jordan Irwin
7929acb4d2
Add ice sparkles overlay to ice giant 2024-07-08 23:10:48 -07:00
Jordan Irwin
54d149a7bd
Add ice sparkles overlay to ice golem 2024-07-08 23:10:47 -07:00
Jordan Irwin
c0f3e237c1
Create ice sparkles overlay animation 2024-07-08 23:10:47 -07:00
Jordan Irwin
4c05093b01
Extract electricity from dark elf master sprite & use as...
...overlay animation
2024-07-08 23:10:46 -07:00
Jordan Irwin
c22e919f9c
Extract electricity from dark elf viceroy sprite & use as...
...overlay animation
2024-07-08 23:10:45 -07:00
Jordan Irwin
4d1251c906
Extract electricity from imperial demon lord sprite & use as...
...overlay animation
2024-07-08 23:10:45 -07:00
Jordan Irwin
f662040941
Extract beams from albino elf magician sprite & use as overlay...
...animation
2024-07-08 23:10:44 -07:00
Jordan Irwin
77972930a5
Extract blue flame from emperor dalmung sprite & use as overlay...
...animation
2024-07-08 23:10:44 -07:00
Jordan Irwin
19346b3143
Extract flame from archrat sprite & use as overlay animation 2024-07-08 23:10:43 -07:00
Jordan Irwin
20b9335645
Extract magic sparkles from Tywysoga sprite & use as overlay...
...animation
2024-07-08 23:10:42 -07:00
Jordan Irwin
5a4904c96f
Add support for direction dependent overlay animations 2024-07-08 23:10:41 -07:00
Jordan Irwin
d028bc624e
Move overlay effect creation to EntityOverlayRegistry 2024-07-08 23:10:41 -07:00
Jordan Irwin
ace5065bd3
Add setting to disable entity overlay effects 2024-07-08 23:10:32 -07:00
Jordan Irwin
f2055ab79e
Sprite class to represent an entity skill animation 2024-07-08 21:58:07 -07:00
Jordan Irwin
2e6bcc67ba
Sprite class to represent an entity overlay animation 2024-07-08 21:58:05 -07:00
Jordan Irwin
fe5cde1145
Add support for animated overlay for NPC & creature entities 2024-07-08 21:58:03 -07:00
Jordan Irwin
5c883098c2
Touch up Barbarus's sprite 2024-07-08 21:49:15 -07:00
Jordan Irwin
8f9aa9825b
Adjust glow monster's eyes 2024-07-08 20:06:18 -07:00
Jordan Irwin
78a60745a5
Draw mohawk on glow monster & remove fins
https://github.com/arianne/stendhal/issues/624
2024-07-08 19:57:58 -07:00
Jordan Irwin
d7703f3721
Draw daggers for blordrough storm trooper
https://github.com/arianne/stendhal/issues/624
2024-07-08 19:28:05 -07:00
Jordan Irwin
ba6e2848f0
Add staff from dark elf wizard to emperor dalmung
https://github.com/arianne/stendhal/issues/624
2024-07-08 19:04:13 -07:00
Jordan Irwin
6771560c91
Draw sword for barbarian elite
https://github.com/arianne/stendhal/issues/624
2024-07-08 18:26:50 -07:00
Jordan Irwin
a510097efb
Add cape from chaos soldier to minotaur king
https://github.com/arianne/stendhal/issues/624
2024-07-06 02:54:40 -07:00
Jordan Irwin
fbdc8e33cf
Draw bracers & nose ring for minotaurs
https://github.com/arianne/stendhal/issues/624
2024-07-06 02:38:55 -07:00
Jordan Irwin
4d5fc5cee2
Draw sword for armed naga
https://github.com/arianne/stendhal/issues/624
2024-07-06 01:51:57 -07:00
Jordan Irwin
d5153a72af
Draw staff for oni priest
https://github.com/arianne/stendhal/issues/624
2024-07-06 01:16:45 -07:00
Jordan Irwin
fc81162673
Touch-ups to dark elf matronmother to make sword more noticable
https://github.com/arianne/stendhal/issues/624
2024-07-06 00:24:54 -07:00
Jordan Irwin
c1078e197c
Touch-ups to dark elf ranger cape 2024-07-06 00:13:35 -07:00
Jordan Irwin
c653a2b35c
Remove hat, add hairband & cape to resemble old dark elf ranger...
...sprite better

https://github.com/arianne/stendhal/issues/624
2024-07-05 23:52:13 -07:00
Jordan Irwin
792ca5e414
Add kerchief from risicia thug to dark elf ranger
https://github.com/arianne/stendhal/issues/624
2024-07-05 23:16:08 -07:00
Jordan Irwin
b09aa4e2c2
Revert catching error when opening audio resource 2024-07-05 23:16:08 -07:00
Jordan Irwin
45b271bd72
Update changes 2024-07-05 22:29:04 -07:00
Jordan Irwin
32a2ac6957
Rename parameter 2024-07-05 22:16:59 -07:00
Jordan Irwin
96df82c461
Catch general error/exception when loading audio resource 2024-07-05 22:15:57 -07:00
Jordan Irwin
b936af9375
Add pitchfork from chaos dragonrider to dark mutant
https://github.com/arianne/stendhal/issues/624
2024-07-04 04:36:49 -07:00
Jordan Irwin
675913dcfa
Add sword from chaos warrior to soldier elf
https://github.com/arianne/stendhal/issues/624
2024-07-04 04:04:46 -07:00
Jordan Irwin
84d1b7aab4
Draw new shield for veteran goblin
https://github.com/arianne/stendhal/issues/624
2024-07-03 22:06:34 -07:00
Jordan Irwin
062b4d1667
Draw new helmet for soldier goblin
https://github.com/arianne/stendhal/issues/624
2024-07-03 20:58:55 -07:00
Jordan Irwin
8a46d1e8ce
Touch ups to chaos lord's swords 2024-07-03 20:18:52 -07:00
Jordan Irwin
958a36d2de
Add swords from imperial general to chaos lord
https://github.com/arianne/stendhal/issues/624
2024-07-03 20:03:40 -07:00
Jordan Irwin
873048f98b
Draw new claw for chaos commander
https://github.com/arianne/stendhal/issues/624
2024-07-03 19:53:19 -07:00
Jordan Irwin
66d280f10c
Add knife from risecia thug to fallen angel
https://github.com/arianne/stendhal/issues/624
2024-07-02 17:48:23 -07:00
Jordan Irwin
92089cbcaa
Make Waerryna look like a dark elf
Closes https://github.com/arianne/stendhal/issues/615
2024-07-02 03:15:29 -07:00
Jordan Irwin
0ce79fdad8
Add special case to prevent Mayor Chalmers from taking...
...experimental sandwiches rewarded from Meal for Groongo quest

Closes https://github.com/arianne/stendhal/issues/729
2024-07-02 02:27:28 -07:00
Jordan Irwin
d60d216466
Add methods to exclude quest non-submittable items 2024-07-02 02:18:59 -07:00
Jordan Irwin
4746f125ed
Add methods to check if an item should be submittable in quests 2024-07-02 02:15:51 -07:00
Jordan Irwin
3e5d472bc3
Move RPEntity.nameMatches to static Item.nameMatches 2024-07-02 01:24:05 -07:00
Jordan Irwin
3845fc69da
Add hint about apothecary breadcrumbs in Traps for Klaas travel log
Closes https://github.com/arianne/stendhal/issues/617
2024-07-01 19:38:09 -07:00
Jordan Irwin
97ff41869f
Fix typo in Klaas's dialogue 2024-07-01 19:36:10 -07:00
Jordan Irwin
a5251127dc
Add attribution to rg1024 for bag cursors 2024-06-23 22:13:44 -07:00
Jordan Irwin
46f63776cb
Fix license & attribution of attack & harvest cursors 2024-06-23 21:52:30 -07:00
Jordan Irwin
d6aed77641
Quick menu button to toggle pathfinding via ground 2024-06-23 21:51:30 -07:00
Jordan Irwin
a6ddc99d8d
Use arrow function notation when registering click listener for...
...quick menu buttons
2024-06-23 21:41:17 -07:00
Jordan Irwin
46e399b30f
Add release notes text 2024-06-23 19:40:22 -07:00
Jordan Irwin
22b57a3e5e
Delete old Lua documentation 2024-06-23 19:39:21 -07:00
Jordan Irwin
8ce87348e1
Clean up ant build properties 2024-06-23 19:11:58 -07:00
Jordan Irwin
a2747d3f80
Delete unused ant build properties 2024-06-23 19:09:56 -07:00
Jordan Irwin
b01060f667
Remove unnecessary override 2024-06-22 02:02:48 -07:00
Jordan Irwin
8ede1b841a
Use ActiveEntity.getFaceDirection to determine sprite drawing...
...index. Defaults to "down" when facing direction cannot be determined.

Closes: https://github.com/arianne/stendhal/issues/721
2024-06-21 22:27:52 -07:00
Jordan Irwin
542fe5be1b
Add method ActiveEntity.getFaceDirection 2024-06-21 22:27:30 -07:00
Jordan Irwin
e80ce98382
Add failsafe to ActiveEntity.getWalkDirection 2024-06-21 22:27:15 -07:00
Jordan Irwin
c3f81e5d31
Add failsafe to SoundManager.normVolume
Underlying issue may still need fixed.

https://github.com/arianne/stendhal/issues/714
2024-06-21 22:26:55 -07:00
Jordan Irwin
2df0596cfc
Fix conversion between int/float volume ranges 2024-06-21 00:55:37 -07:00
Jordan Irwin
947fc79489
New music for Athor Island
- Island Mountain by David Kvistorf (CC0): https://opengameart.org/node/78672
- Jump and Run Tropics by Bart Kelsey (CC BY-SA 3.0): https://opengameart.org/node/3801
2024-06-20 22:09:03 -07:00
Jordan Irwin
43353e1ef8
Change default master volume to 50 2024-06-15 23:48:44 -07:00
Jordan Irwin
98e2f70218
Description for pelt
https://sourceforge.net/p/arianne/patches/762/
2024-06-15 18:34:00 -07:00
Jordan Irwin
30399d830d
Description for polar bear
https://sourceforge.net/p/arianne/patches/761/
2024-06-15 18:31:24 -07:00
Jordan Irwin
60026dde03
Description for elder cannibal
https://sourceforge.net/p/arianne/patches/760/
2024-06-15 18:29:46 -07:00
Jordan Irwin
9a5e5b0223
Description for giant killer bat
https://sourceforge.net/p/arianne/patches/759/
2024-06-15 18:27:00 -07:00
Jordan Irwin
356f36ad07
Method to add listener to update config on change event 2024-06-15 17:04:43 -07:00
Jordan Irwin
60cb09077f
Support multiple change event listeners 2024-06-15 17:04:43 -07:00
Jordan Irwin
4d50010790
Code cleanup 2024-06-15 17:04:40 -07:00
tigertoes
2b10df791f fix grammar for hole in the ground 2024-06-15 19:53:04 -04:00
Jordan Irwin
752626b3aa
Use Tooltip class in SettingsComponent 2024-06-13 22:15:02 -07:00
Jordan Irwin
4b6319d910
Move Component.refresh to super class 2024-06-13 22:10:15 -07:00
Jordan Irwin
29d53375c0
Rework tooltip class 2024-06-13 22:05:02 -07:00
Jordan Irwin
582748b551
Clean up docstrings 2024-06-13 20:35:25 -07:00
Jordan Irwin
6f5a275694
Display quickmenu by default for touch devices 2024-06-13 20:34:51 -07:00
Jordan Irwin
98d5349bb4
Add "cloaks" to Josephine's known chat options
https://github.com/arianne/stendhal/issues/640
Closes https://github.com/arianne/stendhal/issues/612
2024-06-13 15:53:37 -07:00
Jordan Irwin
c1241a3e08
Add workaround to display "loan" & "nothing" triggers in Lost...
...Wedding Ring quest

https://github.com/arianne/stendhal/issues/640
2024-06-13 15:16:07 -07:00
Jordan Irwin
16a6731d24
Methods to delete transition matching state, trigger, & condition 2024-06-13 15:14:00 -07:00
Jordan Irwin
d1c96181a5
Add workaround to display "clothes" trigger in Supplies for Phalk quest
https://github.com/arianne/stendhal/issues/640
2024-06-13 13:42:17 -07:00
Jordan Irwin
7f06ef1346
Add methods to force triggers to display as chat options even if not...
...registered in transition
2024-06-13 13:42:03 -07:00
Jordan Irwin
4e4fa1aeca
Call learnWordsInCurrentConversation in overloaded SpeakerNPC.say...
...method
2024-06-13 13:27:53 -07:00
Jordan Irwin
0c2ff23ed1
Add "rent" to Gordon's known chat options
https://github.com/arianne/stendhal/issues/640
2024-06-13 11:40:46 -07:00
Jordan Irwin
d1174e5fd6
Add FIXME note 2024-06-13 11:40:45 -07:00
Jordan Irwin
7fa046294b
Don't process learned words from conversation when not attending to a...
...player
2024-06-13 11:40:45 -07:00
Jordan Irwin
01b6cf9dc7
Show chat options marked as "known" even when not included in...
...transition triggers
2024-06-13 11:40:44 -07:00
Jordan Irwin
fa0a522070
Normalize known chat options to lower case 2024-06-13 11:40:33 -07:00
Jordan Irwin
5a8add7e5d
Use Debug class for marking settings & touch for debugging 2024-06-12 16:30:36 -07:00
Jordan Irwin
e3188b3986
Class for marking properties for debugging 2024-06-12 16:26:55 -07:00
Jordan Irwin
5072211638
Setting to disable parallax backgrounds 2024-06-10 10:42:22 -07:00
Jordan Irwin
0bc610eb6c
Add stars parallax background to lower levels of wizards tower 2024-06-09 19:40:17 -07:00
Jordan Irwin
ee7faac1da
Add parallax backgrounds to Semos Tower levels 8 & 9 2024-06-08 02:07:49 -07:00
Jordan Irwin
9c0315793a
Change attribute name to "parallax_ignore_tiles" 2024-06-08 01:24:48 -07:00
Jordan Irwin
a39087c1ab
Update changes 2024-06-08 00:44:42 -07:00
Jordan Irwin
f9af9aa9df
Add parallax background to Kika Clouds 2024-06-08 00:32:44 -07:00
Jordan Irwin
f7baa36ede
Add parallax background to Kika Islands 2024-06-08 00:32:43 -07:00
Jordan Irwin
1cef2c4f6a
Add to clouds tileset for use with edges 2024-06-08 00:32:43 -07:00
Jordan Irwin
086cfbe00b
Create parallax background for area surrounding Semos 2024-06-08 00:32:42 -07:00
Jordan Irwin
59a0727dd1
Add support for alternate floor layer for client's that support...
...parallax backgrounds
2024-06-08 00:32:42 -07:00
Jordan Irwin
7e1f493839
Add support for specifying tiles not to draw in web client 2024-06-07 23:35:25 -07:00
Jordan Irwin
d9a045f2d5
Update changes 2024-06-07 20:24:51 -07:00
Jordan Irwin
3675593ae4
Disable "roof" & "roof_add" layers in Kika Clouds 2024-06-07 20:23:49 -07:00
Jordan Irwin
631fd7d932
Don't load map layer marked as "locked" and not "visible" 2024-06-07 20:23:09 -07:00
Jordan Irwin
b2447e8c7d
Add animated clouds to Kika Clouds 2024-06-07 01:03:30 -07:00
Jordan Irwin
07f367b9bc
Animated clouds 2024-06-07 01:02:30 -07:00
Jordan Irwin
eca1a46448
Make transitions code more readable 2024-06-06 14:38:30 -07:00
Jordan Irwin
9257fe4ee5
Add support for parallax scrolling backgrounds in web client 2024-06-06 08:10:54 -07:00
Jordan Irwin
13f136adc8
Cache failsafe image at startup 2024-06-06 08:09:06 -07:00
Jordan Irwin
9fb6a0d96e
Fix layers opacity 2024-06-06 08:07:55 -07:00
Jordan Irwin
6356e1f23c
Don't assume on-time delivery when timestamp isn't available 2024-06-05 22:44:44 -07:00
Jordan Irwin
8f6c3cacdf
Fix paths in map rendering build targets 2024-06-05 02:13:18 -07:00
Jordan Irwin
a08d9ae3e2
Move vampire_maplabel script to bin directory 2024-06-05 01:57:06 -07:00
Jordan Irwin
9f854e7ab7
Make vampire_maplabel position independent 2024-06-05 01:53:54 -07:00
Jordan Irwin
6cb9be3b49
Clean up vampire_maplabel script 2024-06-04 23:03:22 -07:00
Jordan Irwin
1e4bbaa84a
Move system dependent properties to Ant submodule 2024-06-04 22:50:05 -07:00
Jordan Irwin
033b302d9f
Clean up system executables properties 2024-06-04 22:38:44 -07:00
Jordan Irwin
0c722d8a12
Fix location of locale-template script 2024-06-04 22:32:51 -07:00
Jordan Irwin
2ae840aaf1
Fix location of vampire_maplabel script 2024-06-04 22:25:36 -07:00
Jordan Irwin
0f1e8927ea
Use global neu executable 2024-06-04 21:25:47 -07:00
Jordan Irwin
5f8d34f249
Fix calling neu executable on Windows 2024-06-04 21:07:27 -07:00
Jordan Irwin
07346dd0eb
Clean up indentation 2024-06-04 20:19:44 -07:00
Jordan Irwin
7336fc1821
Allow aborting/restarting deliver item quest in case player lost item...
...or quest is stuck in state where player cannot finish
2024-06-03 18:47:38 -07:00
Jordan Irwin
953b7b5b20
Add failsafe to DeliverItemTask.isDeliveryTooLate 2024-06-03 14:31:06 -07:00
Jordan Irwin
3927596105
Fix parsing completions count of Kill Enemy Army quest 2024-06-03 14:11:43 -07:00
Jordan Irwin
fd39cda6e3
Animated fog for web client 2024-06-01 15:08:44 -07:00
Jordan Irwin
3ab51b17ea
Tileable fog for animation generated with G'MIC: https://gmic.eu/ 2024-06-01 15:08:31 -07:00
Jordan Irwin
85d6cff21a
Convert client entry point to TypeScript 2024-05-31 23:02:05 -07:00
Jordan Irwin
c53a1ebef7
Fix event parameter type 2024-05-31 22:39:28 -07:00
Jordan Irwin
8873a242b2
Add TODO note 2024-05-31 20:55:58 -07:00
Jordan Irwin
38d0e8d715
Replace refrences to getSoundManager with stendhal.sound where appropriate 2024-05-31 20:51:27 -07:00
Jordan Irwin
347008b896
Replace references to stendhal.ui.soundMan with stendhal.sound 2024-05-31 20:39:30 -07:00
Jordan Irwin
77f6e44abb
Minor optimization 2024-05-31 20:31:35 -07:00
Jordan Irwin
8128bed44e
Don't store sound manager instances in class properties 2024-05-31 20:29:00 -07:00
Jordan Irwin
3496eb9af4
Store sound manager instance in stendhal.sound 2024-05-31 20:14:20 -07:00
Jordan Irwin
c1b967d1b5
Move SoundManager & LoopedSoundSourceManger classes to data/sound 2024-05-31 20:04:29 -07:00
Jordan Irwin
60173d582d
Move SoundLayer enum to data/sound 2024-05-31 19:43:53 -07:00
Jordan Irwin
7d2c2e128f
Move SoundFactory class to data/sound 2024-05-31 19:40:30 -07:00
Jordan Irwin
68cf101189
Increment version 2024-05-31 17:49:51 -07:00
Hendrik Brummermann
a9baa4af19 updated Android release notes 2024-05-30 23:25:04 +02:00
Jordan Irwin
7113c11d53
Fix parsing error 2024-05-29 02:24:29 -07:00
Jordan Irwin
6723d7f5bf
Replace program logic in quest manuscript classes 2024-05-28 21:28:14 -07:00
Jordan Irwin
fb158dbc11
Quest manuscript completions count always in index 2 2024-05-28 21:02:42 -07:00
Jordan Irwin
bcedecad50
Correct grammar in House Buying history 2024-05-28 20:15:07 -07:00
Jordan Irwin
057afa534a
Support possessive form in Grammar 2024-05-28 20:14:32 -07:00
Jordan Irwin
e61506126c
Update changes 2024-05-28 18:58:27 -07:00
Jordan Irwin
212dc7623e
Show House Buying in open quests during owed taxes period
https://github.com/arianne/stendhal/issues/716
2024-05-28 18:54:35 -07:00
Jordan Irwin
dbc3de7055
Admin script to manage House Buying 2024-05-28 18:54:20 -07:00
Jordan Irwin
a7bdde5331
Don't play weather sound if weather is disabled 2024-05-28 04:59:54 -07:00
Jordan Irwin
9e4ef5146b
Performance optimization: Require refresh/map change to update...
...lighting effects setting
2024-05-28 04:45:56 -07:00
Jordan Irwin
bf275d84bf
Use standard message when changing weather setting 2024-05-28 04:30:23 -07:00
Jordan Irwin
02cdffe0af
Add setting to enable/disable activity indicator animation 2024-05-28 04:21:28 -07:00
Jordan Irwin
45b94965e9
Convert activity indicator setting to component 2024-05-28 04:00:38 -07:00
Jordan Irwin
c9c06ad5a7
Require refresh/map change to update activity indicator setting 2024-05-28 03:57:15 -07:00
Jordan Irwin
c302d2dcd6
Class for displaying some commonly used messages in chat log 2024-05-28 03:20:11 -07:00
Jordan Irwin
c0288c5360
Add visuals tab to settings dialog 2024-05-28 02:59:57 -07:00
Jordan Irwin
2277a276fb
Add TODO note 2024-05-28 02:58:10 -07:00
Hendrik Brummermann
f376b0cb87 added TODO about removing program logic from quest manuscripts 2024-05-26 23:07:52 +02:00
Jordan Irwin
05eb315e41
Reword changes 2024-05-26 12:51:42 -07:00
Jordan Irwin
6385ed51cb
Disable sliders when sound not enabled 2024-05-26 12:45:46 -07:00
Jordan Irwin
05d61c6bcb
Add ComponentBase.setEnabled method 2024-05-26 12:45:05 -07:00
Jordan Irwin
71ad4108fd
Add SettingsComponent.getValue method 2024-05-26 12:44:31 -07:00
Jordan Irwin
4379d81a25
Add sliders for remaining sound layers in settings dialog 2024-05-26 11:59:55 -07:00
Jordan Irwin
b9de8c3117
Fix button spacing of chat log context menu 2024-05-26 05:03:23 -07:00
Jordan Irwin
23332a7c8c
Add FIXME note 2024-05-26 04:45:12 -07:00
Jordan Irwin
477a0ed37d
Add support for passing filename parameter to DownloadHandler.download 2024-05-26 04:26:27 -07:00
Jordan Irwin
4276878a60
Support plain text download in Android client
Closes: https://github.com/arianne/stendhal/issues/727
2024-05-26 04:20:11 -07:00
Jordan Irwin
75895904e6
Clean up extra trailing semicolon 2024-05-26 03:13:04 -07:00
Jordan Irwin
356937fe33
Remove unused property TimeUtil.TURNS_IN_MINUTE 2024-05-26 01:13:21 -07:00
Jordan Irwin
59abb15ba5
Use seconds instead of turns for entity path suspensions 2024-05-26 01:11:10 -07:00
Jordan Irwin
f7f01ecaa0
Update changes pertaining to Android release 2024-05-25 20:08:15 -07:00
Jordan Irwin
2049f2b4b7
Add TODO note 2024-05-25 01:21:23 -07:00
Jordan Irwin
02602f0bc5
Reword changes 2024-05-25 01:12:36 -07:00
Jordan Irwin
07d34cf25b
Disable Portuguese translation pending review 2024-05-25 01:05:31 -07:00
Jordan Irwin
0bc6f28204
In case of logout in arena, update deathmatch slot after teleport to...
...allow player to start again

Closes: https://github.com/arianne/stendhal/issues/724
2024-05-25 01:00:27 -07:00
Jordan Irwin
e02d87b8e6
Add FIXME note 2024-05-25 00:54:18 -07:00
Jordan Irwin
0b056f3b81
Show number of hot deliveries in Pizza Delivery quest history 2024-05-24 20:58:12 -07:00
Jordan Irwin
31911288d7
Class for adding a customized result to BuiltQuest history 2024-05-24 20:55:52 -07:00
513 changed files with 15937 additions and 10117 deletions

View file

@ -7,16 +7,56 @@ on:
pull_request:
paths:
- 'app/android/**'
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- id: job_info
uses: daleyjem/gh-job-id@v1
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
job_name: 'build'
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v3
- name: Checkout Repository
uses: actions/checkout@v3
- name: Build Android Packages
run: cd app/android/client && gradle assemble
- name: Set Up JDK
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'adopt'
- name: Validate Gradle Wrapper .jar
run: |
cd app/android/gradle/wrapper
curl --location --output gradle-wrapper.jar.sha256 \
https://services.gradle.org/distributions/gradle-7.5.1-wrapper.jar.sha256
echo " gradle-wrapper.jar" >> gradle-wrapper.jar.sha256
sha256sum --check gradle-wrapper.jar.sha256
- name: Build APKs with Ant
uses: cedx/setup-ant@v6
with:
version: '1.10'
- run: ant -noinput -buildfile build.xml android -Dgradle.params="assembleDebug assembleRelease"
- name: Failure Report
uses: sarisia/actions-status-discord@v1
if: failure()
env:
DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK_DEVELOPMENT }}
with:
title: 'Android Build Failed'
description: '${{ steps.job_info.outputs.html_url }}'
nodetail: true
- uses: sarisia/actions-status-discord@v1
if: failure()
env:
DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK_DEVLOG }}
with:
title: 'Android Build Failed'
description: '${{ steps.job_info.outputs.html_url }}'
nodetail: true

View file

@ -29,15 +29,15 @@ jobs:
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v2
uses: github/codeql-action/init@v3
# Override language selection by uncommenting this and choosing your languages
# with:
# languages: go, javascript, csharp, python, cpp, java
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
uses: github/codeql-action/autobuild@v2
#- name: Autobuild
# uses: github/codeql-action/autobuild@v3
# Command-line programs to run using the OS shell.
# 📚 https://git.io/JvXDl
@ -46,9 +46,7 @@ jobs:
# and modify them (or add more) to build your code if your project
# uses a compiled language
#- run: |
# make bootstrap
# make release
- run: ant -noinput -f build.xml clean compile
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v2
uses: github/codeql-action/analyze@v3

View file

@ -20,4 +20,15 @@
<nature>org.eclipse.jdt.core.javanature</nature>
<nature>org.eclipse.wst.common.project.facet.core.nature</nature>
</natures>
<filteredResources>
<filter>
<id>1771748271774</id>
<name></name>
<type>30</type>
<matcher>
<id>org.eclipse.core.resources.regexFilterMatcher</id>
<arguments>node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__</arguments>
</matcher>
</filter>
</filteredResources>
</projectDescription>

View file

@ -30,29 +30,28 @@ button to create or log in to your account.
### Mobile
Play using the [progressive web app](https://en.wikipedia.org/wiki/Progressive_web_app). Just visit
https://stendhalgame.org/ in your mobile browser and click "install" when prompted.
[stendhalgame.org](https://stendhalgame.org/) in your mobile browser and click "install" when prompted.
[<img src="https://fdroid.gitlab.io/artwork/badge/get-it-on.png" height="75">](https://f-droid.org/packages/org.stendhalgame.client/)
Play on your Android device using the dedicated app. You can get it from the
[F-Droid App Store](https://f-droid.org/) or download it from https://stendhalgame.org/download.html.
[F-Droid App Store](https://f-droid.org/) or download it from [stendhalgame.org](https://stendhalgame.org/download.html).
### Classic Desktop
[![Download](https://stendhalgame.org/images/downloadbutton.png)](https://arianne-project.org/download/stendhal.zip)
Play using the classic desktop client. You will need Java which you can download from
[https://www.java.com](https://www.java.com/en/download) on Microsoft Windows. Java is included in
[java.com](https://www.java.com/en/download) on Microsoft Windows. Java is included in
most Linux distributions. Both Oracle Java and OpenJDK are supported.
Please download Stendhal from [https://stendhalgame.org](https://stendhalgame.org)<br>
You can double click on stendhal-starter.jar and the client will run.<br>
If you prefer to run from command line, then just execute this command
in the stendhal folder:
Please download Stendhal from [stendhalgame.org](https://stendhalgame.org/download.html).<br>
You can double click on `stendhal-starter.jar` and the client will run.<br>
If you prefer to run from command line, then just execute this command in the stendhal folder:
`java -jar stendhal-starter.jar`
There is a [manual](https://stendhalgame.org/wiki/Stendhal_Manual), and there is Help from the client menu icons in the upper right hand side of the game screen.
There is a [manual](https://stendhalgame.org/wiki/Stendhal_Manual), and there is Help from the client menu icons in the upper right hand side of the game screen.
## Development environment
@ -67,7 +66,7 @@ There is a [manual](https://stendhalgame.org/wiki/Stendhal_Manual), and there i
Stendhal is free software. You can redistribute it and/or modify under the following terms:
- The **server**, **java client**, and **Android client**: *GNU General Public License* 2 or later as published by the Free
- The **server**, **java client**, and **Android client**: *GNU General Public License* 2 or later as published by the Free Software Foundation
- The **web client** and **native client**: *GNU Affero General Public License* 3 or later as published by the Free Software Foundation with the definition of "System libraries" being extended to include authentication providers and software distribution platforms.
- The **nativehelper** extensions: *GNU Lesser General Public License* 3 or later as published by the Free Software Foundation
@ -76,6 +75,6 @@ even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE
[LICENSE.txt](LICENSE.txt) and [src/js/LICENSE.html](src/js/LICENSE.html) file for more details.
Stendhal(c) is copyright of Miguel Angel Blanch Lardin, 2005-2008, arianne_rpg at users dot sourceforge dot net and others<br>
Stendhal(c) is copyright of the Arianne Project, 2006-2024, arianne-general at lists dot sourceforge dot net
Stendhal(c) is copyright of the Arianne Project, 2006-2026, arianne-general at lists dot sourceforge dot net
Please have a look at the list of [contributors](doc/contributors.md#contributors).

1
app/.gitignore vendored Normal file
View file

@ -0,0 +1 @@
/godot/

View file

@ -10,15 +10,23 @@ android {
applicationId namespace
minSdk 21
targetSdk 32
versionCode 1047000
versionName "1.47"
versionCode 1049005
versionName "1.49.5"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
targetSdkVersion 32
minSdkVersion 21
}
// F-Droid doesn't allow encrypted DependencyInfoBlock in APK
dependenciesInfo {
// disables dependency metadata when building APKs
includeInApk = false
// disables dependency metadata when building Android App Bundles
includeInBundle = false
}
// build output
project.setProperty("archivesBaseName", "${namespace}-${defaultConfig.versionCode}")
project.setProperty("archivesBaseName", "${namespace}-${defaultConfig.versionName}")
project.setProperty("buildDir", "${projectDir}/../../../build/build_android_client")
/* A keystore.properties file can be placed in the root Android project directory and must

View file

@ -14,6 +14,7 @@ package org.stendhalgame.client;
import java.util.Random;
import android.app.AlertDialog;
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
@ -189,7 +190,11 @@ public class ClientView extends WebView {
if (!UrlHelper.isInternalUri(uri)) {
// open external links in default browser/app
// FIXME: should we ask for confirmation?
MainActivity.get().startActivity(new Intent(Intent.ACTION_VIEW, uri));
try {
MainActivity.get().startActivity(new Intent(Intent.ACTION_VIEW, uri));
} catch (final ActivityNotFoundException e) {
Notifier.toast("No app found to open this link");
}
return true;
}
view.loadUrl(UrlHelper.checkClientUrl(uri.toString()));
@ -263,6 +268,9 @@ public class ClientView extends WebView {
/**
* Handles downloading screenshot created by web client.
*
* TODO: get filename to pass to `DownloadHandler.download` from "download" property of
* anchor
*
* @param url
* Content URL to the screenshot image.
* @param userAgent

View file

@ -112,8 +112,10 @@ public class DownloadHandler {
* A data URL.
* @param mimetype
* Detected MIME type.
* @param targetName
* Filename for new file.
*/
public void download(final String url, final String mimetype) {
public void download(final String url, final String mimetype, String targetName) {
final Uri uri = Uri.parse(url);
final String scheme = uri.getScheme();
@ -132,8 +134,11 @@ public class DownloadHandler {
} else if (DownloadType.IMAGE_PNG.equals(dtype)) {
final File targetDir = new File(Environment.getExternalStorageDirectory()
+ "/Pictures/Screenshots");
final String targetName = "stendhal_"
+ new SimpleDateFormat("yyyy-MM-dd_HH.mm.ss").format(new Date()) + ".png";
if (targetName == null) {
// default filename
targetName = "stendhal_" + new SimpleDateFormat("yyyy-MM-dd_HH.mm.ss").format(new Date())
+ ".png";
}
Logger.debug("Saving screenshot: " + targetDir.getPath()
+ "/" + targetName + " (" + mimetype + ")");
@ -147,9 +152,11 @@ public class DownloadHandler {
// `Environment.DIRECTORY_DOWNLOADS` fails on newer Android versions
//final File targetDir = new File(Environment.DIRECTORY_DOWNLOADS);
final File targetDir = new File(Environment.getExternalStorageDirectory() + "/Download");
// default filename
final String targetName = "stendhal_" + new SimpleDateFormat("yyyy-MM-dd_HH.mm.ss")
.format(new Date()) + ".txt";
if (targetName == null) {
// default filename
targetName = "stendhal_" + new SimpleDateFormat("yyyy-MM-dd_HH.mm.ss").format(new Date())
+ ".txt";
}
Logger.debug("Saving file: " + targetDir.getPath()
+ "/" + targetName + " (" + mimetype + ")");
@ -178,6 +185,18 @@ public class DownloadHandler {
}
}
/**
* Writes file data to device storage.
*
* @param url
* A data URL.
* @param mimetype
* Detected MIME type.
*/
public void download(final String url, final String mimetype) {
download(url, mimetype, null);
}
public boolean getResult() {
return result;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 335 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 647 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 597 KiB

View file

@ -1,9 +1,3 @@
Pizza is a popular meal of choice. With growing demand, Leander is looking to hire reliable workers to transport his hot and delicious cuisine to patrons. Couriers with reputations of on-time deliveries are being recognized for their work ethic.
PUT RELEASE ANNOUNCEMENT LINES HERE
Some adventurers may be distressed and feel that their quest for the title of "Ultimate Collector" is in vain. Well fret no more, as Balduin is offering a ray of hope. Requests to bring him a different item are now accepted afer some time has passed.
Speaking of weapons, some creatures have once again taken up arms. For example the angel and dark angel have new swords.
Last but not least: We released an official Android App, which is available in the download section of our website or on F-Droid.
Please see the complete change log for further details: http://localhost/game/stendhal.html#changes
Please see the complete change log for further details: https://arianne-project.org/game/stendhal.html#changes

View file

@ -5,6 +5,6 @@
<string name="app_name">Stendhal</string>
<string name="intent_url_scheme">stendhalprod8gps5y99pu</string>
<string name="build_type">prod</string>
<string name="build_version">1.47</string>
<string name="build_version">1.49.5</string>
</resources>

View file

@ -19,7 +19,7 @@ import android.content.DialogInterface;
/**
* Semi-functional logger for release builds.
*
*
* Displays notification dialogs but does not write to logs directory.
*/
public class Logger {

View file

@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionSha256Sum=91a239400bb638f36a1795d8fdf7939d532cdc7d794d1119b7261aac158b1e60
distributionSha256Sum=f6b8596b10cce501591e92f229816aa4046424f3b24d771751b06779d58c8ec4
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

View file

@ -18,6 +18,7 @@ panic = 'abort'
strip = true
[dependencies]
lazy_static = "1.5.0"
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
steamworks = "0.10.0"

View file

@ -1,9 +1,12 @@
use lazy_static::lazy_static;
use serde_json::Value;
use std::io;
use std::io::Read;
use std::process;
use std::sync::Arc;
use std::sync::atomic::AtomicBool;
use std::sync::atomic::Ordering;
use std::sync::Mutex;
use std::sync::mpsc::Sender;
use std::sync::mpsc::channel;
use std::thread;
@ -16,6 +19,10 @@ use websocket::client::ClientBuilder;
use websocket::{Message, OwnedMessage};
lazy_static! {
static ref AUTHENTICATED: Mutex<bool> = Mutex::new(false);
}
fn connect() -> (Sender<OwnedMessage>, JoinHandle<()>) {
println!("Read connection parameters");
let mut json = String::new();
@ -112,58 +119,70 @@ fn connect() -> (Sender<OwnedMessage>, JoinHandle<()>) {
}
}
});
return (tx, receive_loop);
return (tx, receive_loop);
}
fn handle_message(nl_token: &String, tx: Sender<OwnedMessage>, message: String) {
if message.contains("event\":\"request_authentication\"") {
authenticate(tx, nl_token.clone());
} else if message.contains("event\":\"clientDisconnect\"") {
let authenticated = AUTHENTICATED.lock().unwrap();
if *authenticated {
println!("Authenticated, exiting extension ...");
} else {
println!("Unauthenticated, exiting extension ...");
}
process::exit(0);
}
}
fn authenticate(tx: Sender<OwnedMessage>, nl_token: String) {
match Client::init() {
Ok((client, single)) => {
match Client::init() {
Ok((client, single)) => {
let called = Arc::new(AtomicBool::new(false));
let callback_called = called.clone();
let (_ticket_handle, session_ticket): (steamworks::AuthTicket, Vec<u8>) = client.user().authentication_session_ticket();
let _callback =
client.register_callback(move |session_ticket_response: AuthSessionTicketResponse| {
//if session_ticket_response.ticket == ticket_handle {
println!("Ticket Response Result: {:?}", session_ticket_response.result);
callback_called.store(true, Ordering::Relaxed);
// println!("Ticket : {:?}", session_ticket_response.ticket);
// println!("Ticket Response: {:?}", session_ticket);
let (_ticket_handle, session_ticket): (steamworks::AuthTicket, Vec<u8>) = client.user().authentication_session_ticket();
let _callback =
client.register_callback(move |session_ticket_response: AuthSessionTicketResponse| {
//if session_ticket_response.ticket == ticket_handle {
if session_ticket_response.result.is_ok() {
let mut authenticated = AUTHENTICATED.lock().unwrap();
*authenticated = true;
}
println!("Ticket Response Result: {:?}", session_ticket_response.result);
callback_called.store(true, Ordering::Relaxed);
// println!("Ticket : {:?}", session_ticket_response.ticket);
// println!("Ticket Response: {:?}", session_ticket);
let message = OwnedMessage::Text(format!("\
{{\
\"id\": \"15fb0ffb-7b18-48d2-89a3-39b1ce4b2645\",\
\"method\": \"app.broadcast\",\
\"accessToken\": {:?},\
\"data\": {{\
\"event\": \"steamAuthToken\",\
\"data\": {:?}\
}}\
}}", nl_token, &session_ticket));
match tx.send(message) {
Ok(()) => (),
Err(e) => {
println!("Websocket send error: {:?}", e);
}
}
let message = OwnedMessage::Text(format!("\
{{\
\"id\": \"15fb0ffb-7b18-48d2-89a3-39b1ce4b2645\",\
\"method\": \"app.broadcast\",\
\"accessToken\": {:?},\
\"data\": {{\
\"event\": \"steamAuthToken\",\
\"data\": {:?}\
}}\
}}", nl_token, &session_ticket));
match tx.send(message) {
Ok(()) => (),
Err(e) => {
println!("Websocket send error: {:?}", e);
}
}
});
for _ in 0..100 {
single.run_callbacks();
if called.load(Ordering::Relaxed) {
return;
}
::std::thread::sleep(::std::time::Duration::from_millis(50));
}
},
Err(_) => {
});
for _ in 0..100 {
single.run_callbacks();
if called.load(Ordering::Relaxed) {
return;
}
::std::thread::sleep(::std::time::Duration::from_millis(50));
}
},
Err(_) => {
println!("Steam not available");
let message = OwnedMessage::Text(format!("\
{{\
@ -181,10 +200,10 @@ fn authenticate(tx: Sender<OwnedMessage>, nl_token: String) {
}
}
}
}
}
}
fn main() {
let (_tx, receive_loop) = connect();
let (_tx, receive_loop) = connect();
let _ = receive_loop.join();
}

View file

@ -11,6 +11,7 @@ neutralino.js
# Neutralinojs related files
.storage
*.log
extensions/binary/steam_appid.txt
extensions/binary/*.so
extensions/binary/*.dll
extensions/binary/nativehelper*

View file

@ -1 +0,0 @@
2267890

View file

@ -1,7 +1,7 @@
{
"$schema": "https://raw.githubusercontent.com/neutralinojs/neutralinojs/main/schemas/neutralino.config.schema.json",
"applicationId": "org.stendhalgame.client",
"version": "1.47",
"version": "1.49.5",
"defaultMode": "window",
"port": 0,
"documentRoot": "/resources/",
@ -11,9 +11,9 @@
"enableExtensions": true,
"extensions": [
{
"id": "nativehelper",
"commandLinux": "${NL_PATH}/extensions/binary/nativehelper",
"commandWindows": "${NL_PATH}/extensions/binary/nativehelper.exe"
"id": "nativehelper",
"commandLinux": "${NL_PATH}/extensions/binary/nativehelper",
"commandWindows": "${NL_PATH}/extensions/binary/nativehelper.exe"
}
],
"tokenSecurity": "one-time",
@ -55,7 +55,7 @@
"resourcesPath": "/resources/",
"extensionsPath": "/extensions/",
"clientLibrary": "/resources/js/neutralino.js",
"binaryVersion": "5.0.0",
"clientVersion": "5.0.1"
"binaryVersion": "6.2.0",
"clientVersion": "6.2.0"
}
}

90
bin/check-file-size.py Executable file
View file

@ -0,0 +1,90 @@
#!/usr/bin/env python3
'''
***************************************************************************
* Copyright © 2025 - Faiumoni e. V. *
***************************************************************************
***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************
'''
import errno
import os
import sys
from pathlib import Path
dir_root = Path(__file__).parent
if "bin" == dir_root.name:
dir_root = Path(dir_root.parent)
dir_music = Path(dir_root, "data/music")
dir_sounds = Path(dir_root, "data/sounds")
## Checks if a file is larger than 2MB.
#
# On systems with low resources, the Java client struggles to load large audio files.
#
# @param path
# File path.
# @return
# `EFBIG` if file is larger than 2MB, 0 otherwise.
def checkAudioFileSize(path):
if not path.is_file():
# ignore if audio file doesn't exist
print("WARNING: Ignoring file not found: {}".format(path))
return 0
if path.stat().st_size > 1048576 * 2:
# warn if file size > 2MB
return errno.EFBIG
return 0
## Checks directory for large audio files.
#
# @param path
# Directory path to be walked.
# @return
# `EFBIG` if any file larger than 2MB found, 0 otherwise.
def checkAudioDir(path):
if not path.is_dir():
# ignore if audio directory doesn't exist
print("WARNING: Ignoring directory not found: {}".format(path))
return 0
res = 0
for ROOT, DIRS, FILES in path.walk():
for filename in FILES:
filepath = Path(ROOT, filename)
if filepath.suffix.lower().lstrip(".") not in ("ogg", "oga", "mid", "midi"):
# only check supported file types
continue
code = checkAudioFileSize(filepath)
if code == errno.EFBIG:
res = code
sys.stderr.write("WARNING: Audio file size larger than 2MB: {}\n".format(str(filepath)[len(str(dir_root)):].lstrip("/\\")))
return res
def main():
res = 0
for audio_dir in dir_music, dir_sounds:
code = checkAudioDir(audio_dir)
if code != 0:
res = code
if res == 0:
print("No large audio data files detected")
return res
if __name__ == "__main__":
# work from source tree root
os.chdir(dir_root)
sys.exit(main())

View file

@ -1,6 +1,6 @@
@echo off
set STENDHAL_VERSION=1.47
set STENDHAL_VERSION=1.49.5
set SERVER_JAR=stendhal-server-%STENDHAL_VERSION%.jar
:: change to server directory

2
bin/runserver.sh Normal file → Executable file
View file

@ -1,6 +1,6 @@
#!/usr/bin/env bash
STENDHAL_VERSION="1.47"
STENDHAL_VERSION="1.49.5"
SERVER_JAR="stendhal-server-${STENDHAL_VERSION}.jar"
# change to server directory

View file

@ -1,5 +1,4 @@
#!/usr/bin/env python3
#Tue Sep 10 23:32:58 CEST 2019, slightly tweaked -- omero
"""
This script is used to create the world map with labeled zone names.
@ -10,20 +9,19 @@ To create the labeled world map:
* Open a command line
* Change to your stendhal directory
* Run
ant rendermaps
ant rendermaps
* Change to the tiled directory
* Run
python vampire_maplabel.py -world
python vampire_maplabel.py -world
* Open tiled/world/world.tmx in tiled
* Set the floor layer to opaque (no transparency)
* Set the zoom to 1:1 (CTRL-0)
* From the file menu, select "Save as Image"
* Crop the black border (e.g. use "Crop Automatically" in The GIMP)
* Upload the image, e.g. at http://imageshack.us
* Replace your labeled image files from the tiled/world directory with
the clean (unlabeled) ones from CVS.
* Edit http://stendhalgame.org/wiki/Template:SmallWorldMap
and add a link to your uploaded image.
* Replace your labeled image files from the tiled/world directory with the clean (unlabeled) ones
from CVS.
* Edit http://stendhalgame.org/wiki/Template:SmallWorldMap and add a link to your uploaded image.
"""
import sys
@ -33,29 +31,38 @@ import os
from PIL import Image, ImageFont, ImageDraw
# get absolute path where script is located
dir_root = os.path.dirname(__file__)
if dir_root:
os.chdir(dir_root)
dir_root = os.getcwd()
dir_world = os.path.join(dir_root, 'world')
script_name = os.path.basename(__file__)
# directory from where script was executed
dir_start = os.getcwd()
# path to root directory
os.chdir(os.path.join(os.path.dirname(__file__), '../'))
dir_root = os.getcwd()
# directory relative to root where images are located
subdir_world = os.path.normpath('data/maps/world')
# absolute path to directory where images are located
dir_world = os.path.join(dir_root, subdir_world)
protected = ('world', 'logo', 'reserved', 'empty', 'empty-white')
def showUsage():
print ('Usage: {} [image-filenames...]'.format(script_name))
print (' This will label each PNG file passed as argument.')
print (' E.g: ./world/int_*.png will label all interiors, etc. etc.')
print
print ('Alternatively, you can run: {} -world'.format(script_name))
print (' This will label each PNG file in the world subdirectory.')
print('Usage: {} [image-filenames...]'.format(script_name))
print(' This will label each PNG file passed as argument.')
print(' E.g: data/maps/world/int_*.png will label all\n interiors, etc.')
print(' Note: If filename parameters aren\'t found they\n are assumed to be nested within the\n {} directory.'.format(subdir_world))
print()
print('Alternatively, you can run: {} -world'.format(script_name))
print(' This will label each PNG file in the world subdirectory.')
processed = 0
def do_label(fname):
print ('Processing {}'.format(fname))
global processed
print('Processing {}'.format(fname))
# remove directory and file extension
label = os.path.basename(fname).split('/')[-1].replace('.png', '')
print ('Processing LABEL: {}'.format(label))
print('Processing LABEL: {}'.format(label))
img = Image.open(fname)
img = img.convert('RGBA')
@ -75,12 +82,43 @@ def do_label(fname):
img.paste(img2, img2)
img.save(fname)
processed += 1
## Checks file path & converts to absolute.
#
# @param imagepath
# Path to image file.
def checkAbsPath(imagepath):
if not imagepath.lower().endswith('.png'):
# only PNG images supported
imagepath += '.png'
imagepath = os.path.normpath(imagepath)
# check from root directory
if os.path.isfile(imagepath):
return os.path.abspath(imagepath)
# check from directory where script was executed
os.chdir(dir_start)
if os.path.isfile(imagepath):
imagepath = os.path.abspath(imagepath)
else:
# assume file is nested in `subdir_world`
imagepath = os.path.join(dir_world, imagepath)
# change back to root dir remaining execution
os.chdir(dir_root)
return imagepath
if len(sys.argv) < 2:
print('\nERROR: Not enough arguments\n')
showUsage()
sys.exit(1)
elif len(sys.argv) == 2 and sys.argv[1] == '-world':
if len(sys.argv) == 2 and sys.argv[1] == '-world':
for fname in os.listdir(dir_world):
if fname.endswith('.png'):
absolute_fname = os.path.join(dir_world, fname)
@ -89,14 +127,8 @@ elif len(sys.argv) == 2 and sys.argv[1] == '-world':
continue
do_label(absolute_fname)
else:
# This doesn't work for me. --mort
#for fname in reduce(operator.add, map(glob.glob, sys.argv[1:])):
# This works for me. --omero
for fname in list(sys.argv[1:]):
if not fname.endswith('.png'):
fname = '{}.png'.format(fname)
absolute_fname = os.path.join(dir_world, fname)
absolute_fname = checkAbsPath(fname)
if fname.rstrip('.png') in protected:
print('NOTE: skipping protected file: {}'.format(absolute_fname))
continue
@ -104,7 +136,10 @@ else:
if not os.path.isfile(absolute_fname):
print('\nERROR: Cannot process {}\n File does not exist.'.format(absolute_fname))
sys.exit(1)
print ( 'Labeling {}...'.format(fname ))
print('Labeling {}...'.format(fname ))
do_label(absolute_fname)
print ('All Done.')
if processed == 0:
print('\nWARNING: no images were processed')
else:
print('\nprocessed {} {}'.format(processed, 'image' if processed == 1 else 'images'))

View file

@ -91,10 +91,10 @@ updates_server_fallback = http://arianne.sourceforge.net/stendhal/updates
version_server = http://arianne.sourceforge.net/stendhal.version
# current version of stendhal
version.old = 1.46
version = 1.47
version.old = 1.49
version = 1.49.5
# FIXME: dynamic method to set this property?
version.android = 1047000
version.android = 1049005
# javac options
javac.deprecation = true
@ -102,17 +102,17 @@ javac.debug = true
javac.debuglevel = source,lines
# change these only if you know what you are doing
buildroot = build
build = build
buildroot = ${build}
build-archive = build-archive
src = src
testsrc = tests
srcjs = ${src}/js
docu = data/docu
maps = data/maps
data = data/gui
sprites = data/sprites
layers = data/layers
build = build
docs = doc
data = data
gui = ${data}/gui
maps = ${data}/maps
sprites = ${data}/sprites
lib = ${buildroot}/lib
marauroa_root = ../marauroa
marauroa_src = ${marauroa_root}/src

102
build.xml
View file

@ -1,103 +1,33 @@
<?xml version='1.0'?>
<project name="stendhal" default="compile" basedir=".">
<!--
Sets a property (by name and value), or set of properties (from file or resource) in the project. Properties are case sensitive.
Properties are immutable: whoever sets a property first freezes it for the rest of the build; they are most definitely not variables.
-->
<property environment="env"/>
<project name="stendhal" default="help" basedir=".">
<description>
Project:
Name: .......... ${game_name}
Version: ....... ${version}
Root: .......... ${basedir}
<condition property="os.win">
<os family="windows"/>
</condition>
Build system:
Ant version: ... ${ant.version.number}
Ant home: ...... ${ant.location}
Java version: .. ${java.version}
Java home: ..... ${java.home}
<condition property="exe.ext" value=".exe" else="">
<equals arg1="${os.win}" arg2="true"/>
</condition>
<condition property="executable.npm" value="npm.cmd" else="npm">
<equals arg1="${os.win}" arg2="true"/>
</condition>
Execute `ant help` for more information.
</description>
<!-- Windows fails to execute "ng" unless it is invoked as "ng.cmd" -->
<condition property="executable.suffix" value=".cmd">
<os family="windows"/>
</condition>
<property name="executable.suffix" value=""/>
<property file="build.ant-private.properties"/>
<property file="build.ant.properties"/>
<property name="build_tests" value="${buildroot}/build_tests"/>
<property name="build_tests_report" value="${buildroot}/build_test_report"/>
<property name="build_client" value="${buildroot}/build_client"/>
<property name="build_client_data" value="${buildroot}/build_client_data"/>
<property name="build_client_sound_data" value="${buildroot}/build_client_sound_data"/>
<property name="build_client_music_data" value="${buildroot}/build_client_music_data"/>
<property name="build_webclient" value="${buildroot}/build_webclient"/>
<property name="build_docker" value="${buildroot}/build_docker"/>
<property name="buildtools_docker" value="buildtools/docker"/>
<property name="build_postman" value="${buildroot}/buildbot/"/>
<property name="build_server" value="${buildroot}/build_server"/>
<property name="build_server_maps" value="${buildroot}/build_server_maps"/>
<property name="build_server_script" value="${buildroot}/build_server_script"/>
<property name="build_server_mods" value="${buildroot}/build_server_mods"/>
<property name="build_server_xmlconf" value="${buildroot}/build_server_xmlconf"/>
<property name="build_stendhaltools" value="${buildroot}/build_stendhaltools"/>
<property name="build_stendhaltextclient" value="${buildroot}/build_stendhaltextclient"/>
<property name="client_data" value="stendhal-data-${version}.jar"/>
<property name="client_jarname" value="stendhal-${version}.jar"/>
<property name="client_sound_data" value="stendhal-sound-data-${version}.jar"/>
<property name="client_music_data" value="stendhal-music-data-${version}.jar"/>
<property name="client_starter_jarname" value="stendhal-starter-${version}.jar"/>
<property name="dist_server_binary" value="${buildroot}/stendhal-server-${version}.zip" />
<property name="maps_jarname" value="stendhal-maps-${version}.jar"/>
<property name="server_jarname" value="stendhal-server-${version}.jar"/>
<property name="xmlconf_jarname" value="stendhal-xmlconf-${version}.jar"/>
<property name="config_dir" value="data/conf"/>
<property name="schema_location" value="${config_dir}"/>
<property name="cobertura.dir" value="${libdir}/cobertura"/>
<condition property="exclude.signing" value="true">
<not>
<available file="keystore.ks"/>
</not>
</condition>
<condition property="exclude.jardiff" value="true">
<not>
<available file="${build-archive}/stendhal-${version.old}.zip"/>
</not>
</condition>
<!-- time & date -->
<tstamp>
<format property="year" pattern="yyyy"/>
<format property="date" pattern="yyyy-MM-dd"/>
<format property="time" pattern="HH:mm:ss"/>
</tstamp>
<property name="datetime" value="${date} ${time}"/>
<!-- check for some executables -->
<available property="python.present" file="python${exe.ext}" filepath="${env.PATH}"/>
<available property="python3.present" file="python3${exe.ext}" filepath="${env.PATH}"/>
<!-- Ant sub-modules -->
<import file="build-private.xml" optional="true"/>
<import file="${ant_modules}/properties.xml"/>
<import file="${ant_modules}/info.xml"/>
<import file="${ant_modules}/system.xml"/>
<import file="${ant_modules}/apps.xml"/>
<import file="${ant_modules}/main.xml"/>
<import file="${ant_modules}/clean.xml"/>

View file

@ -37,6 +37,7 @@
<arg value="--target" />
<arg value="x86_64-pc-windows-gnu" />
</exec>
<mkdir dir="app/neutralinojs/extensions/binary" />
<exec executable="cargo" dir="app/nativehelper" failonerror="true" output="app/neutralinojs/extensions/binary/LICENSE.txt">
<arg value="license" />
<arg value="-ad" />
@ -62,12 +63,12 @@
-->
<available file="app/neutralinojs/bin/neutralino-linux_x64" property="neutralinojs.present" />
<target name="prepare-neutralinojs" unless="neutralinojs.present">
<exec executable="neu" dir="app/neutralinojs" failonerror="true">
<exec executable="${executable.neu}" dir="app/neutralinojs" failonerror="true">
<arg value="update" />
</exec>
</target>
<target name="neutralinojs" depends="prepare-neutralinojs">
<exec executable="neu" dir="app/neutralinojs" failonerror="true">
<exec executable="${executable.neu}" dir="app/neutralinojs" failonerror="true">
<arg value="build" />
</exec>
<delete failonerror="false">
@ -77,23 +78,33 @@
<include name="*.log" />
</fileset>
</delete>
<move
file="app/neutralinojs/dist/stendhal-client/stendhal-client-linux_x64"
tofile="app/neutralinojs/dist/stendhal-client/stendhal-client-linux" />
<move
file="app/neutralinojs/dist/stendhal-client/stendhal-client-win_x64.exe"
tofile="app/neutralinojs/dist/stendhal-client/stendhal-client-windows.exe" />
<chmod dir="app/neutralinojs/dist/stendhal-client/" type="file" perm="ugo+rx">
<include name="stendhal*" />
<include name="stendhal-client-linux" />
<include name="**/nativehelper*" />
</chmod>
<!--
<copy todir="dist/stendhal-client" flatten="true">
<fileset dir="app/neutralinoks">
<include name="LICENSE.txt" />
</fileset>
</copy>
-->
<copy file="app/neutralinojs/LICENSE.txt" tofile="app/neutralinojs/dist/stendhal-client/LICENSE.txt">
<filterchain>
<concatfilter append="app/neutralinojs/extensions/binary/LICENSE.txt" />
</filterchain>
</copy>
<echo file="app/neutralinojs/dist/stendhal-client/extensions/binary/steam_appid.txt">${steam-appid}</echo>
<delete file="${buildroot}/stendhal-client-${version}.zip"/>
<zip destfile="${buildroot}/stendhal-client-${version}.zip">
<zipfileset dir="app/neutralinojs/dist/stendhal-client" prefix="stendhal-client" filemode="755">
<include name="stendhal-client-linux" />
<include name="**/nativehelper*" />
</zipfileset>
<zipfileset dir="app/neutralinojs/dist/stendhal-client" prefix="stendhal-client">
<exclude name="stendhal-client-linux" />
<exclude name="**/nativehelper*" />
</zipfileset>
</zip>
</target>
@ -150,7 +161,8 @@
</target> <!-- client_android_build -->
<target name="android" description="Create Android client package for release and distribution.">
<!-- Create Android client package for release and distribution. -->
<target name="android">
<echo
if:set="exclude.webview"
message="ANDROID_SDK_ROOT environment variable not set. Skipping Android WebView client build."/>

View file

@ -2,7 +2,8 @@
<project xmlns:if="ant:if" xmlns:unless="ant:unless">
<target name="clean" description="Delete all build files and directories.">
<!-- Delete all build files and directories. -->
<target name="clean">
<delete includeEmptyDirs="true" quiet="true">
<fileset dir="${buildroot}" excludes="eclipse/" defaultExcludes="false"/>
</delete>
@ -18,14 +19,16 @@
</target>
<target name="clean_client_data" description="Delete client data build files and directories.">
<!-- Delete client data build files and directories. -->
<target name="clean_client_data">
<delete dir="${build_client_data}"/>
<delete dir="${build_client_music_data}"/>
<delete dir="${build_client_sound_data}"/>
</target>
<target name="cleanjs" description="Delete web client build files and directories.">
<!-- Delete web client build files and directories. -->
<target name="cleanjs">
<delete dir="${buildroot}/js"/>
<delete dir="${buildroot}/ts"/>
</target>

View file

@ -19,13 +19,15 @@
</condition>
<target name="jar" depends="client_build,server_build" description="Build server and clients.">
<!-- Build server and clients. -->
<target name="jar" depends="client_build,server_build">
<!-- XXX: client & server builds are not exclusive to NetBeans, remove this output? -->
<echo>Built client and server for NetBeans.</echo>
</target>
<target name="signjar" unless="exclude.signing" description="Sign client distribution.">
<!-- Sign client distribution. -->
<target name="signjar" unless="exclude.signing">
<signjar
alias="${keystore.alias}"
keystore="keystore.ks"
@ -34,20 +36,23 @@
</target>
<!-- Generate JAR files for both client and server. -->
<!-- XXX: why does this depend on "server_build" twice? -->
<target name="compile" depends="server_build,client_build,server_build" description="Generate JAR files for both client and server."/>
<target name="compile" depends="server_build,client_build,server_build" />
<target name="dist" depends="clean,dist_binary,dist_source,signupdates" description="Create all packages for Stendhal release."/>
<!-- Create all packages for Stendhal release. -->
<target name="dist" depends="clean,dist_binary,dist_source,signupdates" />
<target name="dist_binary" depends="clean,dist_server_binary,dist_client_binary,dist_client_starter,dist_webclient_binary"
description="Create all binary packages for Stendhal release."/>
<!-- Create all binary packages for Stendhal release. -->
<target name="dist_binary" depends="clean,dist_server_binary,dist_client_binary,dist_client_starter,dist_webclient_binary" />
<!-- START: source -->
<target name="dist_source" description="Create all source packages for Stendhal release.">
<!-- Create all source packages for Stendhal release. -->
<target name="dist_source">
<mkdir dir="${buildroot}/stendhal-${version}-src"/>
<copy todir="${buildroot}/stendhal-${version}-src/src">
@ -85,8 +90,8 @@
<include name="*.html"/>
</fileset>
</copy>
<copy todir="${buildroot}/stendhal-${version}-src/doc">
<fileset dir="doc"/>
<copy todir="${buildroot}/stendhal-${version}-src/${docs}">
<fileset dir="${docs}"/>
<fileset dir="." includes="LICENSE.txt"/>
</copy>
@ -104,7 +109,8 @@
<!-- START: client data -->
<target name="build_client_data" description="Build client data files.">
<!-- Build client data files. -->
<target name="build_client_data">
<!-- base data -->
<mkdir dir="${build_client_data}"/>
<copy todir="${build_client_data}/data/sprites">
@ -132,11 +138,15 @@
<exclude name="logic/layer/"/>
</fileset>
</copy>
<mkdir dir="${maps}/parallax"/> <!-- in case no parallax images available -->
<copy todir="${build_client_data}/data/maps/parallax">
<fileset dir="${maps}/parallax" includes="**/*.png"/>
</copy>
<copy todir="${build_client_data}/data/font">
<fileset dir="data/font"/>
</copy>
<copy todir="${build_client_data}/data/gui">
<fileset dir="${data}">
<fileset dir="${gui}">
<exclude name="paneldrock009.jpg"/>
<exclude name="panelmetal003.gif"/>
<exclude name="panelrock016.jpg"/>
@ -175,7 +185,8 @@
<!-- START: server -->
<target name="server_build" depends="init,checkxml" description="Compile JAR file for Stendhal server.">
<!-- Compile JAR file for Stendhal server. -->
<target name="server_build" depends="init,checkxml">
<mkdir dir="${build_server}"/>
<copy todir="${build_server}/data/conf" file="data/conf/stendhalcreateaccount.properties"/>
@ -336,7 +347,8 @@
</target> <!-- server_build -->
<target name="dist_server_binary" depends="server_build" description="Create server package for release and distribution.">
<!-- Create server package for release and distribution. -->
<target name="dist_server_binary" depends="server_build">
<mkdir dir="${buildroot}/stendhal-server-${version}"/>
<copy todir="${buildroot}/stendhal-server-${version}/data/script">
@ -362,8 +374,8 @@
<copy todir="${buildroot}/stendhal-server-${version}/libs">
<fileset dir="libs"/>
</copy>
<copy todir="${buildroot}/stendhal-server-${version}/doc">
<fileset dir="doc"/>
<copy todir="${buildroot}/stendhal-server-${version}/${docs}">
<fileset dir="${docs}"/>
<fileset dir="." includes="LICENSE.txt"/>
</copy>
@ -388,10 +400,12 @@
</target> <!-- dist_server_binary -->
<target name="dist_docker" depends="docker_build,docker_push" description="Build and push container image."/>
<!-- Build and push container image. -->
<target name="dist_docker" depends="docker_build,docker_push" />
<target name="docker_build_prepare" depends="dist_server_binary" description="Prepare container image build.">
<!-- Prepare container image build. -->
<target name="docker_build_prepare" depends="dist_server_binary">
<mkdir dir="${build_docker}" />
<copy file="${buildtools_docker}/Dockerfile" todir="${build_docker}" />
<copy file="${buildtools_docker}/.dockerignore" todir="${build_docker}" />
@ -400,7 +414,8 @@
</target> <!-- docker_build_prepare -->
<target name="docker_build" depends="docker_build_prepare" description="Build container image.">
<!-- Build container image. -->
<target name="docker_build" depends="docker_build_prepare">
<exec dir="${build_docker}" executable="docker">
<arg value="build" />
<arg value="-t" />
@ -410,28 +425,57 @@
</target> <!-- docker_build -->
<target name="docker_push" description="Push container image."/>
<!-- Push container image. -->
<target name="docker_push" />
<target name="server_run" depends="server_build,compilejs" description="Run server.">
<mkdir dir="run_srvr"/>
<!-- Run server. -->
<target name="server_run" depends="server_build,compilejs">
<mkdir dir="run_srvr/libs"/>
<mkdir dir="run_srvr/js"/>
<copy todir="run_srvr">
<fileset file="build/lib/${server_jarname}"/>
<fileset file="build/lib/${xmlconf_jarname}"/>
<fileset file="build/lib/${maps_jarname}"/>
<fileset file="libs/marauroa.jar"/>
<fileset file="libs/groovy.jar"/>
<fileset file="libs/guava.jar"/>
<fileset file="libs/log4j.jar"/>
<fileset file="libs/${mysqldriver_jarname}"/>
</copy>
<copy todir="run_srvr/libs">
<fileset file="${marauroa_jar}" />
<fileset file="${groovy_jar}" />
<fileset file="${guava_jar}" />
<fileset file="${log4j_jar}" />
<fileset file="${mysqldriver_jar}" />
<fileset file="${h2_jar}" />
<fileset file="${hamcrest_jar}" />
<fileset file="${tomcatcore_jar}" />
<fileset file="${tomcatwebsocket_jar}" />
<fileset file="${jakartaannotation_jar}" />
<fileset file="${luaj_jar}" />
<fileset file="${jsonsimple_jar}" />
</copy>
<copy todir="run_srvr/js">
<fileset dir="${srcjs}">
<exclude name="stendhal/" />
<exclude name="stendhal-compiled.js.map" />
<exclude name=".gitignore" />
</fileset>
</copy>
<chmod file="run_srvr/${server_jarname}" perm="+x"/>
<exec dir="." executable="java">
<arg line="-Xmx256m -cp run_srvr -jar run_srvr/${server_jarname} -c server.ini -l"/>
</exec>
<java jar="run_srvr/${server_jarname}"
fork="true"
failonerror="true"
maxmemory="256m">
<arg value="-c" />
<arg value="server.ini" />
<arg value="-l" />
<classpath>
<pathelement location="${basedir}" />
</classpath>
</java>
<!-- we've run the program, so delete the jars -->
<delete dir="run_srvr"/>
@ -442,7 +486,8 @@
<!-- START: java client -->
<target name="client_build" depends="init,build_client_data" description="Compile client JAR file.">
<!-- Compile client JAR file. -->
<target name="client_build" depends="init,build_client_data">
<mkdir dir="${build_client}"/>
<copy todir="${build_client}/games/stendhal/client">
@ -490,7 +535,7 @@
<!-- compile Starter.java for Java 1.7. So we will be able to
display a dialogbox if running on an old Java Version -->
<javac srcdir="${src}" destdir="${build_client}" debug="${javac.debug}" debuglevel="${javac.debuglevel}" source="1.7" target="1.7" deprecation="${javac.deprecation}" includeantruntime="false">
<javac srcdir="${src}" destdir="${build_client}" debug="${javac.debug}" debuglevel="${javac.debuglevel}" source="1.8" target="1.8" deprecation="${javac.deprecation}" includeantruntime="false">
<include name="games/stendhal/client/update/Starter.java"/>
<compilerarg value="-encoding"/>
@ -535,7 +580,8 @@
</target> <!-- client_build -->
<target name="compile_stendhaltextclient" description="Compile text client.">
<!-- Compile text client. -->
<target name="compile_textclient">
<mkdir dir="${build_stendhaltextclient}"/>
<javac srcdir="${src}" destdir="${build_stendhaltextclient}" source="1.8" target="1.8" debug="${javac.debug}" debuglevel="${javac.debuglevel}" deprecation="${javac.deprecation}" includeantruntime="false">
@ -556,8 +602,12 @@
</javac>
</target> <!-- compile_stendhaltextclient -->
<!-- Alias of `compile_textclient`. -->
<target name="compile_stendhaltextclient" depends="compile_textclient" />
<target name="dist_client_binary" depends="clean_client_data,client_build" description="Create Java client package for release and distribution.">
<!-- Create Java client package for release and distribution. -->
<target name="dist_client_binary" depends="clean_client_data,client_build">
<mkdir dir="${buildroot}/stendhal-${version}"/>
<mkdir dir="${buildroot}/stendhal-${version}/lib"/>
<mkdir dir="${buildroot}/stendhal-${version}/log"/>
@ -577,8 +627,8 @@
<include name="*.html"/>
</fileset>
</copy>
<copy todir="${buildroot}/stendhal-${version}/doc">
<fileset dir="doc"/>
<copy todir="${buildroot}/stendhal-${version}/${docs}">
<fileset dir="${docs}"/>
<fileset file="LICENSE.txt"/>
</copy>
<touch file="${buildroot}/stendhal-${version}/log/stendhal.txt"/>
@ -593,8 +643,8 @@
</target> <!-- dist_client_binary -->
<!-- XXX: is this still used? -->
<target name="dist_client_starter" depends="client_build" description="Create Java client starter package.">
<!-- Create Java client starter package (obsolete). -->
<target name="dist_client_starter" depends="client_build">
<mkdir dir="${buildroot}/stendhal-${version}"/>
<copy todir="${buildroot}/stendhal-${version}" file="${lib}/${client_starter_jarname}"/>
<copy todir="${buildroot}/stendhal-${version}/lib">
@ -603,10 +653,8 @@
<include name="*.html"/>
</fileset>
</copy>
<copy todir="${buildroot}/stendhal-${version}/doc">
<fileset dir="doc">
<exclude name="mkdocs/"/>
</fileset>
<copy todir="${buildroot}/stendhal-${version}/${docs}">
<fileset dir="${docs}"/>
<fileset file="LICENSE.txt"/>
</copy>
<copy todir="${buildroot}/stendhal-${version}" file="README.md"/>
@ -618,7 +666,8 @@
</target> <!-- dist_client_starter -->
<target name="client_run" depends="client_build" description="Run Java client.">
<!-- Run Java client. -->
<target name="client_run" depends="client_build">
<mkdir dir="run_clnt"/>
<mkdir dir="run_clnt/lib"/>
@ -654,8 +703,9 @@
</target> <!-- client_run -->
<!-- Run client for NetBeans trick. -->
<!-- Netbeans won't let you choose ant options, so this does it for us-->
<target name="run" depends="client_run" description="Run client for NetBeans trick."/>
<target name="run" depends="client_run" />
<!-- END: java client -->
@ -663,34 +713,46 @@
<!-- START: web client -->
<target name="js-prepare-marauroa">
<mkdir dir="build/js"/>
<unzip dest="build" src="libs/marauroa.jar">
<mkdir dir="node_modules/marauroa"/>
<unzip dest="node_modules/marauroa" src="libs/marauroa.jar">
<mapper type="flatten"/>
<patternset>
<include name="js/**"/>
</patternset>
</unzip>
</target>
<target name="js-prepare-build">
<echo file="build/js/build.js">
var stendhal = window.stendhal = window.stendhal || {};
stendhal.data = stendhal.data || {};
<mkdir dir="node_modules/marauroa"/>
<echo file="node_modules/marauroa/build.js">
export function version(marauroa, stendhal) {
stendhal.data = stendhal.data || {};
stendhal.data.build = {
version: "${version}",
build: "${datetime}",
dist: "webclient"
}
stendhal.data.build = {
version: "${version}",
build: "${datetime}",
dist: "webclient"
}
//CI
}
</echo>
<antcall target="js-prepare-build-ci" />
</target>
<target name="js-prepare-build-ci" if="ci.build.info">
<loadfile property="cibuildinfo" srcFile="${ci.build.info}" failonerror="false" quiet="true"/>
<replace file="node_modules/marauroa/build.js" token="//CI" value="${cibuildinfo}" />
</target>
<extension-point name="js-prepare" depends="js-prepare-marauroa,js-prepare-build,js-prepare-node,js-prepare-contribs"/>
<extension-point name="js-prepare" depends="js-prepare-node,js-prepare-contribs,js-prepare-marauroa,js-prepare-build"/>
<target name="js-prepare-node">
<exec executable="npm${executable.suffix}" failonerror="true">
<exec executable="${executable.npm}" failonerror="true">
<arg value="install"/>
<arg value="--no-save"/>
</exec>
@ -698,11 +760,11 @@
<target name="js-prepare-contribs" depends="js-prepare-node">
<exec executable="npx${executable.suffix}" failonerror="true">
<exec executable="${executable.npx}" failonerror="true">
<arg value="showdown"/>
<arg value="makehtml"/>
<arg value="--input"/>
<arg value="doc/contributors.md"/>
<arg value="${docs}/contributors.md"/>
<arg value="--output"/>
<arg value="${srcjs}/contributors.html"/>
</exec>
@ -711,72 +773,19 @@
<!-- TODO: Do not write stendhal-compiled.js to the source directory tree but directly to the compiled directory tree -->
<target name="js-invoke-compiler">
<exec executable="npx${executable.suffix}" dir="${srcjs}/stendhal" failonerror="true">
<exec executable="${executable.npx}" dir="${srcjs}/stendhal" failonerror="true">
<arg value="tsc"/>
</exec>
<property name="js-debug" value="--debug --formatting=PRETTY_PRINT --create_source_map ${srcjs}/stendhal-compiled.js.map --source_map_include_content"/>
<property name="js-files-license" value="${srcjs}/stendhal/license.js"/>
<property name="js-files-marauroa" value="build/js/marauroa.js build/js/client-framework.js build/js/message-factory.js build/js/perception.js build/js/rpfactory.js build/js/inflate.js build/js/deserializer.js"/>
<property name="js-files-config" value="build/js/build.js"/>
<property name="js-files-lib1" value="${srcjs}/jsxgraph-util.js"/>
<property name="js-files-lib2" value=""/>
<property name="js-files-data1" value="${srcjs}/stendhal/data/sha3.js"/>
<property name="js-files-data2" value=""/>
<property name="js-files-entity5" value=""/>
<property name="js-files-entity6" value=""/>
<property name="js-files-ui1" value=""/>
<property name="js-files-ui2" value=""/>
<property name="js-files-ui3" value=""/>
<property name="js-files-main1" value=""/>
<property name="js-files-ui4" value=""/>
<property name="js-files-main2" value="${srcjs}/stendhal/main.js"/>
<property name="js-files-main3" value=""/>
<property name="js-files-ts" value="build/ts/*.js build/ts/**/*.js"/>
<property name="js-files-ts2" value=""/>
<java jar="buildtools/closure-compiler/compiler.jar"
fork="true"
failonerror="true"
maxmemory="128m">
<arg value="--language_in=ECMASCRIPT_2020"/>
<arg value="--language_out=STABLE"/>
<arg value="--compilation_level"/>
<arg value="ADVANCED"/>
<arg line="${js-debug}"/>
<arg value="--process_common_js_modules"/>
<arg value="--module_resolution=node"/>
<arg value="--jscomp_off=checkVars"/>
<!-- DEBUG: -->
<!--<arg value="-\-jscomp_off=globalThis"/>-->
<arg value="--js_output_file=${srcjs}/stendhal-compiled.js"/>
<arg line="${js-files-license}"/>
<arg line="${js-files-marauroa}"/>
<arg line="${js-files-config}"/>
<arg line="${js-files-lib1}"/>
<arg line="${js-files-lib2}"/>
<arg line="${js-files-data1}"/>
<arg line="${js-files-data2}"/>
<arg line="${js-files-entity5}"/>
<arg line="${js-files-entity6}"/>
<arg line="${js-files-ui1}"/>
<arg line="${js-files-ui2}"/>
<arg line="${js-files-ui3}"/>
<arg line="${js-files-main1}"/>
<arg line="${js-files-ui4}"/>
<arg line="${js-files-main2}"/>
<arg line="${js-files-main3}"/>
<arg line="${js-files-ts}"/>
<arg line="${js-files-ts2}"/>
</java>
<echo file="${srcjs}/stendhal-compiled.js" append="true">
//# sourceMappingURL=stendhal-compiled.js.map
</echo>
<exec executable="${executable.npx}" dir="${srcjs}/stendhal" failonerror="true">
<arg value="esbuild"/>
<arg value="--bundle"/>
<arg value="--outfile=../stendhal-compiled.js"/>
<arg value="--platform=browser"/>
<!-- <arg value="- -minify"/> -->
<arg value="main.ts"/>
</exec>
<antcall target="compilejs-hook" />
@ -793,7 +802,8 @@
</target>
<target name="compilejs" depends="cleanjs" description="Compile web client.">
<!-- Compile web client. -->
<target name="compilejs" depends="cleanjs">
<antcall target="js-prepare" unless:set="exclude.webclient"/>
<antcall target="js-invoke-compiler" unless:set="exclude.webclient"/>
@ -802,7 +812,8 @@
</target> <!-- compilejs -->
<target name="webclient_build" depends="compilejs,clean_client_data,build_client_data" description="Compile and stage web client files.">
<!-- Compile and stage web client files. -->
<target name="webclient_build" depends="compilejs,clean_client_data,build_client_data">
<mkdir dir="${build_webclient}"/>
<copy todir="${build_webclient}">
@ -824,17 +835,16 @@
</target> <!-- webclient_build -->
<target name="build_webclient" depends="webclient_build" description="Alias of webclient_build."/>
<target name="dist_webclient_binary" depends="webclient_build" description="Create web client package for release and distribution.">
<!-- Create web client package for release and distribution. -->
<target name="dist_webclient_binary" depends="webclient_build">
<zip destfile="${buildroot}/stendhal-webclient-${version}.zip">
<zipfileset dir="${build_client_data}"/>
<zipfileset dir="${build_client_music_data}"/>
<zipfileset dir="${build_client_sound_data}"/>
<zipfileset dir="${build_webclient}" prefix="js"/>
<zipfileset dir="doc" prefix="doc">
<zipfileset dir="${docs}" prefix="doc">
<include name="contributors.md"/>
<include name="ReleaseNotes.txt"/>
<include name="Licenses/**"/>
<include name="sources/**"/>
</zipfileset>

View file

@ -12,7 +12,8 @@
<delete dir="${buildroot}/build_docs"/>
</target>
<target name="docs" description="Generate HTML documentation for Java, TypeScript, and Lua APIs." depends="luadocs,javadocs,tsdocs"/>
<!-- Generate HTML documentation for Java, TypeScript, and Lua APIs. -->
<target name="docs" depends="luadocs,javadocs,tsdocs"/>
<!-- Java documentation -->
@ -88,7 +89,7 @@
<target name="tsdocs" depends="clean_tsdocs,js-prepare-node">
<exec executable="npx${executable.suffix}" dir="${srcjs}/stendhal" failonerror="true">
<exec executable="${executable.npx}" dir="${srcjs}/stendhal" failonerror="true">
<arg value="typedoc"/>
<arg value="--entryPointStrategy"/>
<arg value="expand"/>
@ -108,7 +109,7 @@
message="Python unavailable, cannot run mkdocs"/>
<!-- NOTE: MkDocs create the top-level index.html -->
<exec if:true="${python.present}" executable="python" failonerror="true"
<exec executable="${executable.python}" if:true="${python.present}" failonerror="true"
dir="./buildtools/mkdocs/">
<arg value="-u"/>
<arg value="build.py"/>

View file

@ -0,0 +1,86 @@
<?xml version='1.0'?>
<project>
<target name="info" description="Print project build information.">
<echo level="info" message="Project:" />
<echo level="info" message=" Name: .......... ${game_name}" />
<echo level="info" message=" Version: ....... ${version}" />
<echo level="info" message=" Root: .......... ${basedir}" />
<echo level="info" />
<echo level="info" message="Build system:" />
<echo level="info" message=" Ant version: ... ${ant.version.number}" />
<echo level="info" message=" Ant home: ...... ${ant.location}" />
<echo level="info" message=" Java version: .. ${java.version}" />
<echo level="info" message=" Java home: ..... ${java.home}" />
</target>
<target name="help" description="Print project build and help information." depends="info">
<echo level="info" message="Usage:" />
<echo level="info" message=" ant &lt;target&gt; [&lt;target&gt;...]" />
<echo level="info" />
<echo level="info" />
<echo level="info" message="=== TARGETS ===" />
<echo level="info" />
<echo level="info" message="General:" />
<echo level="info" message=" info: ........................ Print project build information." />
<echo level="info" message=" help: ........................ Print project build and help information." />
<echo level="info" message=" init: ........................ Update version and resource info." />
<echo level="info" message=" checkxml: .................... Verify XML files are well-formed." />
<echo level="info" />
<echo level="info" message="Build:" />
<echo level="info" message=" server_build: ................ Compile JAR file for Stendhal server." />
<echo level="info" message=" client_build: ................ Compile client JAR file." />
<echo level="info" message=" webclient_build: ............. Compile and stage web client files." />
<echo level="info" message=" compile_textclient: .......... Compile text client." />
<echo level="info" message=" compile: ..................... Generate JAR files for both client and server." />
<echo level="info" message=" compilejs: ................... Compile web client." />
<echo level="info" message=" compile_tools: ............... Compile Stendhal build tools." />
<echo level="info" message=" server_run: .................. Run server." />
<echo level="info" message=" client_run: .................. Run Java client." />
<echo level="info" message=" postman: ..................... Build postman bot." />
<echo level="info" />
<echo level="info" message="Testing:" />
<echo level="info" message=" compile_tests: ............... Compile all tests." />
<echo level="info" message=" run_tests: ................... Run all tests." />
<echo level="info" message=" test: ........................ Compile and run all tests." />
<echo level="info" />
<echo level="info" message="Build cleaning:" />
<echo level="info" message=" clean: ....................... Delete all build files and directories." />
<echo level="info" message=" clean_client_data: ........... Delete client data build files and directories." />
<echo level="info" message=" cleanjs: ..................... Delete web client build files and directories." />
<echo level="info" />
<echo level="info" message="Source maintanence:" />
<echo level="info" message=" clean_whitespace: ............ Clean whitespace in source and other specified file types." />
<echo level="info" />
<echo level="info" message="Distribution:" />
<echo level="info" message=" dist_source: ................. Create all source packages for Stendhal release." />
<echo level="info" message=" dist_binary: ................. Create all binary packages for Stendhal release." />
<echo level="info" message=" dist_server_binary: .......... Create server package for release and distribution." />
<echo level="info" message=" dist_client_binary: .......... Create Java client package for release and distribution." />
<echo level="info" message=" dist_webclient_binary: ....... Create web client package for release and distribution." />
<echo level="info" message=" dist_client_starter: ......... Create Java client starter package (obsolete)." />
<echo level="info" message=" dist: ........................ Create all packages for Stendhal release." />
<echo level="info" message=" android: ..................... Create Android client package for release and distribution." />
<echo level="info" />
<echo level="info" message="Resources:" />
<echo level="info" message=" rendermaps: .................. Convert TMX maps to PNG images scaled 1:16." />
<echo level="info" message=" renderatlas: ................. Generate files for the Stendhal Atlas." />
<echo level="info" message=" renderworldmap: .............. Export world.tmx map to PNG image." />
<echo level="info" message=" updatemaps: .................. Load and save TMX maps to fix tilesets changes." />
<echo level="info" />
<echo level="info" message="Documentation:" />
<echo level="info" message=" docs: ........................ Generate HTML documentation for Java, TypeScript, and Lua APIs." />
<echo level="info" />
<echo level="info" message="Localization:" />
<echo level="info" message=" locale_template: ............. Creates a template for translating." />
<echo level="info" message=" locale_update: ............... Update translation files from template." />
<echo level="info" />
<echo level="info" message="Aliases:" />
<echo level="info" message=" compile_stendhaltextclient: .. Alias of `compile_textclient`." />
<echo level="info" message=" compile_stendhaltools: ....... Alias of `compile_tools`." />
<echo level="info" />
<echo level="info" message="Execute `ant -p -v` for a full list of build targets." />
</target>
</project>

View file

@ -2,21 +2,23 @@
<project xmlns:if="ant:if" xmlns:unless="ant:unless">
<target name="locale_build_template" description="Creates a template for translating.">
<!-- Creates a template for translating. -->
<target name="locale_template">
<echo unless:true="${python.present}" message="Python unavailable, cannot build locale template"/>
<exec if:true="${python.present}" executable="python" failonerror="true" dir="${buildtools}">
<exec executable="${executable.python}" if:true="${python.present}" failonerror="true">
<arg value="-u"/>
<arg value="locale_template.py"/>
<arg value="./bin/locale-template.py"/>
</exec>
</target>
<target name="locale_update" description="Update translation files from template.">
<!-- Update translation files from template. -->
<target name="locale_update">
<echo unless:true="${python.present}" message="Python unavailable, cannot update translations"/>
<exec if:true="${python.present}" executable="python" failonerror="true" dir="${buildtools}">
<exec executable="${executable.python}" if:true="${python.present}" failonerror="true">
<arg value="-u"/>
<arg value="locale_template.py"/>
<arg value="./bin/locale-template.py"/>
<arg value="--update"/>
</exec>
</target>

View file

@ -2,7 +2,8 @@
<project xmlns:if="ant:if" xmlns:unless="ant:unless">
<target name="init" description="Update version and resource info.">
<!-- Update version and resource info. -->
<target name="init">
<mkdir dir="${lib}"/>
<!-- update version -->
@ -42,6 +43,10 @@
match="&quot;version&quot;: &quot;.*&quot;"
replace="&quot;version&quot;: &quot;${version}&quot;"
byline="true"/>
<replaceregexp file="${src}/games/stendhal/client/update/HttpClient.java"
match="StendhalClient/.* \("
replace="StendhalClient/${version} \("
byline="true"/>
<!-- update location of resources -->
<replaceregexp file="${src}/games/stendhal/client/update/game-default.properties"
@ -85,7 +90,8 @@
</target> <!-- init -->
<target name="checkxml" description="Verify XML files are well-formed.">
<!-- Verify XML files are well-formed. -->
<target name="checkxml">
<schemavalidate failonerror="yes" lenient="yes" warn="yes">
<schema namespace="stendhal" file="${config_dir}/zones.xsd"/>
<fileset dir="${config_dir}/zones">
@ -163,7 +169,8 @@
</target> <!-- checkxml -->
<target name="internalUpdatePrereleaseVersion" if="PRE_RELEASE" description="Add date to pre-release test client.">
<!-- Add date to pre-release test client. -->
<target name="internalUpdatePrereleaseVersion" if="PRE_RELEASE">
<tstamp prefix="date">
<format property="iso" pattern="yyyy-MM-dd"/>
</tstamp>

View file

@ -4,7 +4,8 @@
<import file="tools.xml" />
<target name="rendermaps" description="Convert TMX maps to PNG images scaled 1:16." depends="compile_stendhaltools">
<!-- Convert TMX maps to PNG images scaled 1:16. -->
<target name="rendermaps" depends="compile_stendhaltools">
<taskdef name="maprenderer" classname="games.stendhal.tools.MapRenderer">
<classpath>
<pathelement path="${build_stendhaltools}"/>
@ -12,9 +13,9 @@
</classpath>
</taskdef>
<mkdir dir="tiled/world"/>
<mkdir dir="${maps}/world"/>
<maprenderer imagePath="${maps}/world/">
<fileset dir="tiled">
<fileset dir="${maps}">
<include name="Level */**/*.tmx"/>
<include name="interiors/**/*.tmx"/>
<exclude name="**/memory/**"/>
@ -23,7 +24,8 @@
</target> <!-- rendermaps -->
<target name="renderatlas" description="Generate files for the Stendhal Atlas." depends="compile_stendhaltools">
<!-- Generate files for the Stendhal Atlas. -->
<target name="renderatlas" depends="compile_stendhaltools">
<taskdef name="maprenderer" classname="games.stendhal.tools.MapRenderer">
<classpath>
<pathelement path="${build_stendhaltools}"/>
@ -41,16 +43,16 @@
0 128 0.0078125
-->
<mkdir dir="tiled/world"/>
<mkdir dir="${maps}/world"/>
<maprenderer imagePath="${maps}/world/" zoom="0.0625">
<fileset dir="tiled">
<fileset dir="${maps}">
<include name="Level 0/**/*.tmx"/>
<exclude name="**/memory/**"/>
</fileset>
</maprenderer>
<mkdir dir="tiled/world/large"/>
<mkdir dir="${maps}/world/large"/>
<maprenderer imagePath="${maps}/world/large" zoom="0.25">
<fileset dir="tiled">
<fileset dir="${maps}">
<include name="Level 0/**/*.tmx"/>
<exclude name="**/memory/**"/>
</fileset>
@ -58,15 +60,13 @@
</target> <!-- renderatlas -->
<target name="renderworldmap" description="Export world.tmx map to PNG image." depends="rendermaps">
<property name="pycmd" value="python3" if:true="${python3.present}"/>
<property name="pycmd" value="python" unless:true="${python3.present}" if:true="${python.present}"/>
<!-- Export world.tmx map to PNG image. -->
<target name="renderworldmap" depends="rendermaps">
<!-- embed area images with area name -->
<!-- FIXME: need to detect the Python "PIL" module to ensure script can run or
write Java class that can do this -->
<exec executable="${pycmd}" if:set="pycmd">
<arg value="./tiled/vampire_maplabel.py"/>
<exec executable="${executable.python}" if:true="${python.present}">
<arg value="./bin/vampire_maplabel.py"/>
<arg value="-world"/>
</exec>
@ -79,7 +79,7 @@
</classpath>
</taskdef>
<maprenderer imagePath="${maps}/world/" zoom="1.0">
<fileset dir="tiled/world">
<fileset dir="${maps}/world">
<include name="world.tmx"/>
</fileset>
</maprenderer>
@ -88,7 +88,8 @@
</target> <!-- renderworldmap -->
<target name="updatemaps" description="Load and save TMX maps to fix tilesets changes." depends="compile_stendhaltools">
<!-- Load and save TMX maps to fix tilesets changes. -->
<target name="updatemaps" depends="compile_stendhaltools">
<taskdef name="mapupdater" classname="games.stendhal.tools.MapUpdater">
<classpath>
<pathelement path="${build_stendhaltools}"/>
@ -97,7 +98,7 @@
</taskdef>
<mapupdater>
<fileset dir="tiled">
<fileset dir="${maps}">
<include name="Level */**/*.tmx"/>
<include name="interiors/**/*.tmx"/>
</fileset>

View file

@ -16,7 +16,8 @@
<delete file="${build}/package/client/stendhal-starter.exe"/>
</target>
<target name="msiPackage" description="Creates MSI installer package from current build" depends="stagePackage">
<!-- Creates MSI installer package from current build. -->
<target name="msiPackage" depends="stagePackage">
<delete dir="${build}/package/msi-app-image"/>
<exec executable="jpackage" dir="." failonerror="true">
<arg line="--type app-image"/>
@ -46,7 +47,8 @@
</exec>
</target> <!-- msiPackage -->
<target name="dmgPackage" description="Creates DMG package from current build" depends="stagePackage">
<!-- Creates DMG package from current build. -->
<target name="dmgPackage" depends="stagePackage">
<delete dir="${build}/package/dmg-app-image"/>
<exec executable="jpackage" dir="." failonerror="true">
<arg line="--type app-image"/>
@ -74,7 +76,8 @@
</exec>
</target> <!-- dmgPackage -->
<target name="rpmPackage" description="Creates RPM package from current build" depends="stagePackage">
<!-- Creates RPM package from current build. -->
<target name="rpmPackage" depends="stagePackage">
<delete dir="${build}/package/rpm-app-image"/>
<exec executable="jpackage" dir="." failonerror="true">
<arg line="--type app-image"/>
@ -107,7 +110,8 @@
</exec>
</target> <!-- rpmPackage -->
<target name="debPackage" description="Creates DEB package from current build" depends="stagePackage">
<!-- Creates DEB package from current build. -->
<target name="debPackage" depends="stagePackage">
<delete dir="${build}/package/deb-app-image"/>
<exec executable="jpackage" dir="." failonerror="true">
<arg line="--type app-image"/>

View file

@ -0,0 +1,77 @@
<?xml version='1.0'?>
<project>
<!--
Sets a property (by name and value), or set of properties (from file or resource) in the project. Properties are case sensitive.
Properties are immutable: whoever sets a property first freezes it for the rest of the build; they are most definitely not variables.
-->
<!-- store ant version number without extra details -->
<antversion property="ant.version.number" />
<!-- store ant home directory with system delimiter -->
<property name="ant.location" location="${ant.home}" />
<property name="build_tests" value="${buildroot}/build_tests"/>
<property name="build_tests_report" value="${buildroot}/build_test_report"/>
<property name="build_client" value="${buildroot}/build_client"/>
<property name="build_client_data" value="${buildroot}/build_client_data"/>
<property name="build_client_sound_data" value="${buildroot}/build_client_sound_data"/>
<property name="build_client_music_data" value="${buildroot}/build_client_music_data"/>
<property name="build_webclient" value="${buildroot}/build_webclient"/>
<property name="build_docker" value="${buildroot}/build_docker"/>
<property name="buildtools_docker" value="buildtools/docker"/>
<property name="build_postman" value="${buildroot}/buildbot/"/>
<property name="build_server" value="${buildroot}/build_server"/>
<property name="build_server_maps" value="${buildroot}/build_server_maps"/>
<property name="build_server_script" value="${buildroot}/build_server_script"/>
<property name="build_server_mods" value="${buildroot}/build_server_mods"/>
<property name="build_server_xmlconf" value="${buildroot}/build_server_xmlconf"/>
<property name="build_stendhaltools" value="${buildroot}/build_stendhaltools"/>
<property name="build_stendhaltextclient" value="${buildroot}/build_stendhaltextclient"/>
<property name="client_data" value="stendhal-data-${version}.jar"/>
<property name="client_jarname" value="stendhal-${version}.jar"/>
<property name="client_sound_data" value="stendhal-sound-data-${version}.jar"/>
<property name="client_music_data" value="stendhal-music-data-${version}.jar"/>
<property name="client_starter_jarname" value="stendhal-starter-${version}.jar"/>
<property name="dist_server_binary" value="${buildroot}/stendhal-server-${version}.zip" />
<property name="maps_jarname" value="stendhal-maps-${version}.jar"/>
<property name="server_jarname" value="stendhal-server-${version}.jar"/>
<property name="xmlconf_jarname" value="stendhal-xmlconf-${version}.jar"/>
<property name="config_dir" value="data/conf"/>
<property name="schema_location" value="${config_dir}"/>
<property name="cobertura.dir" value="${libdir}/cobertura"/>
<condition property="exclude.signing" value="true">
<not>
<available file="keystore.ks"/>
</not>
</condition>
<condition property="exclude.jardiff" value="true">
<not>
<available file="${build-archive}/stendhal-${version.old}.zip"/>
</not>
</condition>
<!-- time & date -->
<tstamp>
<format property="year" pattern="yyyy"/>
<format property="date" pattern="yyyy-MM-dd"/>
<format property="time" pattern="HH:mm:ss"/>
</tstamp>
<property name="datetime" value="${date} ${time}"/>
</project>

View file

@ -0,0 +1,29 @@
<?xml version='1.0'?>
<project>
<!-- system dependent properties -->
<property environment="env"/>
<condition property="exe.ext" value=".exe" else="">
<os family="windows"/>
</condition>
<!-- Node modules -->
<condition property="executable.npm" value="npm.cmd" else="npm">
<os family="windows"/>
</condition>
<condition property="executable.npx" value="npx.cmd" else="npx">
<os family="windows"/>
</condition>
<condition property="executable.neu" value="neu.cmd" else="neu">
<os family="windows"/>
</condition>
<!-- Python executables -->
<condition property="executable.python" value="python3${exe.ext}" else="python${exe.ext}">
<available file="python3${exe.ext}" filepath="${env.PATH}"/>
</condition>
<available property="python.present" file="${executable.python}" filepath="${env.PATH}"/>
</project>

View file

@ -7,7 +7,8 @@
<import file="dist.xml" />
<import file="tools.xml" />
<target name="test" description="Compile and run all tests." depends="compile_tests,prepare_serverini_for_tests,run_tests,report_test">
<!-- Compile and run all tests. -->
<target name="test" depends="compile_tests,prepare_serverini_for_tests,run_tests,report_test">
<exec executable="curl">
<arg value="-q"/>
<arg value="-F"/>
@ -21,7 +22,8 @@
</target> <!-- test -->
<target name="compile_tests" description="Compile all tests." depends="server_build,client_build,compile_stendhaltools,compile_stendhaltextclient,postman">
<!-- Compile all tests. -->
<target name="compile_tests" depends="server_build,client_build,compile_stendhaltools,compile_stendhaltextclient,postman">
<mkdir dir="${build_tests}"/>
<copy todir="${build_tests}">
@ -63,7 +65,8 @@
</target> <!-- compile_tests -->
<target name="prepare_serverini_for_tests" unless="server.ini" description="Generate server.ini for testing.">
<!-- Generate server.ini for testing. -->
<target name="prepare_serverini_for_tests" unless="server.ini">
<echo file="server.ini">
database_implementation=games.stendhal.server.core.engine.StendhalPlayerDatabase
factory_implementation=games.stendhal.server.core.engine.StendhalRPObjectFactory
@ -85,7 +88,8 @@ d = 9017093486007323270605414717455737376618092805104733236083857811315606869372
</target> <!-- prepare_serverini_for_tests -->
<target name="run_tests" description="Run all tests.">
<!-- Run all tests. -->
<target name="run_tests">
<mkdir dir="${build_tests_report}"/>
<taskdef uri="antlib:org.jacoco.ant" resource="org/jacoco/ant/antlib.xml">
<classpath path="buildtools/jacoco/jacocoant.jar"/>
@ -147,7 +151,8 @@ d = 9017093486007323270605414717455737376618092805104733236083857811315606869372
</target> <!-- run_tests -->
<target name="report_test" description="Aggregate test results.">
<!-- Aggregate test results. -->
<target name="report_test">
<mkdir dir="${build_tests_report}"/>
<junitreport todir="${build_tests_report}" tofile="testresults.xml">
<fileset dir="${build_tests_report}">

View file

@ -4,7 +4,8 @@
<import file="dist.xml" />
<target name="compile_stendhaltools" description="Compile Stendhal build tools.">
<!-- Compile Stendhal build tools. -->
<target name="compile_tools">
<mkdir dir="${build_stendhaltools}"/>
<javac srcdir="${src}" destdir="${build_stendhaltools}" source="1.8" target="1.8" debug="${javac.debug}" debuglevel="${javac.debuglevel}" deprecation="${javac.deprecation}" includeantruntime="true">
@ -28,7 +29,11 @@
</javac>
</target> <!-- compile_stendhaltools -->
<target name="clean_whitespace" description="Clean whitespace in source and other specified file types." depends="compile_stendhaltools">
<!-- Alias of `compile_tools`. -->
<target name="compile_stendhaltools" depends="compile_tools" />
<!-- Clean whitespace in source and other specified file types. -->
<target name="clean_whitespace" depends="compile_stendhaltools">
<!-- process main Java source, config, & scripting files -->
<java classname="games.stendhal.tools.CleanWhitespace">
<classpath>
@ -36,7 +41,7 @@
</classpath>
<arg value="src/"/>
<arg value="tests/"/>
<arg value="android/app/src/"/>
<arg value="app/android/client/src"/>
<arg value="java,xml,lua"/>
</java>
@ -55,16 +60,22 @@
<pathelement path="${build_stendhaltools}"/>
</classpath>
<arg value="data/"/>
<arg value="tiled/"/>
<arg value="xml,xsd,lua,py"/>
</java>
<!-- process Ant build configuration files -->
<java classname="games.stendhal.tools.CleanWhitespace">
<classpath>
<pathelement path="${build_stendhaltools}"/>
</classpath>
<arg value="${ant_modules}" />
<arg value="xml" />
</java>
</target> <!-- clean_whitespace -->
<target name="cleanwhitespace" depends="clean_whitespace" description="Alias of clean_whitespace."/>
<target name="postman" description="Build postman bot.">
<!-- Build postman bot. -->
<target name="postman">
<mkdir dir="${buildroot}/buildbot"/>
<javac srcdir="${src}" destdir="${buildroot}/buildbot" debug="${javac.debug}" debuglevel="${javac.debuglevel}" source="1.8" target="1.8" deprecation="${javac.deprecation}" includeantruntime="false">
<include name="games/stendhal/bot/postman/*.java"/>
@ -100,7 +111,8 @@
</target> <!-- postman -->
<target name="signupdates" description="Sign updates." depends="compile_stendhaltools,jardiff" unless="exclude.signing">
<!-- Sign updates. -->
<target name="signupdates" depends="compile_stendhaltools,jardiff" unless="exclude.signing">
<taskdef name="updatesigner" classname="games.stendhal.tools.updateprop.UpdateSigner">
<classpath>
<pathelement path="."/>
@ -116,7 +128,8 @@
</target> <!-- signupdates -->
<target name="jardiff" depends="client_build" unless="exclude.jardiff" description="Generate release changes info.">
<!-- Generate release changes info. -->
<target name="jardiff" depends="client_build" unless="exclude.jardiff">
<echo>Creating update from ${version.old} to ${version}</echo>
<delete>
<fileset dir="${build-archive}">
@ -160,8 +173,9 @@
</target> <!-- jardiff -->
<!-- Run enemy balancer. -->
<!-- USAGE: ant balance -Dcreature="<creature_name>" -->
<target name="balance" description="Run enemy balancer." depends="compile_stendhaltools,server_build">
<target name="balance" depends="compile_stendhaltools,server_build">
<java classname="games.stendhal.tools.BalanceRPGame">
<classpath>
<pathelement path="${build_stendhaltools}"/>

View file

@ -1,6 +1,6 @@
site_name: Stendhal 1.47 Reference Documentation
site_name: Stendhal 1.49.5 Reference Documentation
site_description: A fun, friendly, & free multiplayer online adventure game.
copyright: Copyright © 2003-2024 Stendhal
copyright: Copyright © 2003-2026 Stendhal
site_url: https://stendhalgame.org/
nav:
- Index: /reference/

View file

@ -33,6 +33,7 @@
<profile name="animal"/>
<profile name="offensive"/>
<profile name="patrolling"/>
<profile name="wander"/>
</ai>
</creature>
@ -205,7 +206,7 @@
<creature name="giant killer bat">
<type class="animal" subclass="bat_giant_red" tileid="animal.png:6"/>
<description></description>
<description>You see a giant killer bat. As if small wasn't pesky enough, these giant ones are capable of taking down anyone who dares come before them.</description>
<attributes>
<atk value="752"/>
<def value="161"/>
@ -982,7 +983,7 @@
<creature name="polar bear">
<type class="animal" subclass="polar_bear" tileid="animal.png:3"/>
<description></description>
<description>You see a polar bear which lives in the icy desert. Beware! It can take you down with its powerful claws!</description>
<attributes>
<atk value="225"/>
<def value="51"/>

View file

@ -70,7 +70,7 @@
<creature name="elder cannibal">
<type class="human" subclass="elder_cannibal" tileid="human_cannibal.png:2"/>
<description/>
<description>You see an elder cannibal. For years it has eaten humans. It will not stop until its hunger is satisfied.</description>
<attributes>
<atk value="315"/>
<def value="111"/>

View file

@ -234,6 +234,7 @@
<item value="unicorn shield" quantity="[1,1]" probability="80.0"/>
<item value="lucky charm" quantity="[1,1]" probability="80.0"/>
<item value="diamond" quantity="[1,1]" probability="20.0"/>
<item value="ring of clarity" quantity="1" probability="5.0"/>
</drops>
<equips/>
<ai>

View file

@ -357,6 +357,7 @@
<corpse name="humanoid"/>
<drops>
<item value="golden orc sword" quantity="[1,1]" probability="25.0"/>
<item value="ring of clarity" quantity="1" probability="8.5"/>
</drops>
<equips>
</equips>

View file

@ -236,7 +236,7 @@
</equips>
<ai>
<profile name="animal"/>
<profile name="patrolling"/>
<profile name="wander"/>
</ai>
</creature>

View file

@ -11,6 +11,7 @@
<element name="damagetype" type="Q1:attribute" minOccurs="0" maxOccurs="unbounded"/>
<element name="statusattack" type="Q1:attribute" minOccurs="0" maxOccurs="unbounded"/>
<element name="statusresist" type="Q1:statusresist" minOccurs="0" maxOccurs="unbounded"/>
<element name="accuracy_bonus" type="Q1:attribute" minOccurs="0" maxOccurs="1"/>
</sequence>
</extension>
</complexContent>

View file

@ -328,7 +328,7 @@
<item name="pelt">
<type class="misc" subclass="pelt" tileid="-1"/>
<description/>
<description>You see a pelt of animal skin. It's used to make clothes and leather armor.</description>
<implementation class-name="games.stendhal.server.entity.item.StackableItem"/>
<attributes>
<quantity value="1"/>

View file

@ -230,4 +230,24 @@
</equipable>
</item>
<item name="ring of clarity">
<type class="ring" subclass="clarity" tileid="-1"/>
<description>You see a ring of clarity. You feel more aware while wearing it.</description>
<implementation class-name="games.stendhal.server.entity.item.Item"/>
<attributes>
<min_level value="0"/>
<accuracy_bonus value="25.0"/>
</attributes>
<weight value="0.1"/>
<value value="1"/>
<equipable>
<slot name="ground"/>
<slot name="content"/>
<slot name="bag"/>
<slot name="trade"/>
<slot name="finger"/>
<slot name="keyring"/>
</equipable>
</item>
</items>

View file

@ -147,4 +147,25 @@
</equipable>
</item>
<item name="four-leaf clover">
<type class="special" subclass="clover" tileid="-1"/>
<description>You see a lucky four-leaf clover. What are the chances of finding one!?</description>
<implementation class-name="games.stendhal.server.entity.item.StackableItem"/>
<attributes>
<quantity value="1"/>
<max_quantity value="2147483647"/>
</attributes>
<weight value="0.01"/>
<value value="250000"/>
<equipable>
<slot name="ground"/>
<slot name="content"/>
<slot name="lhand"/>
<slot name="rhand"/>
<slot name="keyring"/>
<slot name="bag"/>
<slot name="trade"/>
</equipable>
</item>
</items>

View file

@ -16,18 +16,18 @@
-->
<shop name="deniran_accessories" type="outfit">
<outfit name="white balloon" layers="detail=2" price="50000"/>
<outfit name="black balloon" layers="detail=3" price="50000"/>
<outfit name="bone" layers="detail=4" price="100000"/>
<outfit name="umbrella" layers="detail=7" price="50000"/>
<outfit name="sword" layers="detail=8" price="250000"/>
<outfit name="knife" layers="detail=9" price="125000"/>
<outfit name="spear" layers="detail=10" price="150000"/>
<outfit name="bow" layers="detail=11" price="175000"/>
<outfit name="axe1" layers="detail=12" price="250000"/>
<outfit name="axe2" layers="detail=13" price="250000"/>
<outfit name="kite shield" layers="detail=14" price="225000"/>
<outfit name="shield" layers="detail=15" price="225000"/>
<outfit name="white balloon" layers="detail=2" price="25000"/>
<outfit name="black balloon" layers="detail=3" price="25000"/>
<outfit name="bone" layers="detail=4" price="50000"/>
<outfit name="umbrella" layers="detail=7" price="25000"/>
<outfit name="sword" layers="detail=8" price="125000"/>
<outfit name="knife" layers="detail=9" price="62500"/>
<outfit name="spear" layers="detail=10" price="75000"/>
<outfit name="bow" layers="detail=11" price="87500"/>
<outfit name="axe1" layers="detail=12" price="125000"/>
<outfit name="axe2" layers="detail=13" price="125000"/>
<outfit name="kite shield" layers="detail=14" price="112500"/>
<outfit name="shield" layers="detail=15" price="112500"/>
<merchant name="Gwen" flags="configure,noOffer,removeDetailColor,confirmTemp,confirmBalloon,resetBeforeChange"
note="do not expire"/>
</shop>

View file

@ -89,6 +89,70 @@
<attribute name="hidden"/>
</portal>
<portal x="13" y="56" ref="ent11n">
<destination zone="0_ados_mountain_n2_w" ref="ent11s"/>
<attribute name="move.continuous"/>
<attribute name="hidden"/>
</portal>
<portal x="13" y="57" ref="ent11s">
<destination zone="0_ados_mountain_n2_w" ref="ent11n"/>
<implementation class-name="games.stendhal.server.entity.mapstuff.portal.LevelCheckingPortal">
<parameter name="minimum-level">100</parameter>
<parameter name="rejected">The entwives are NOT babysitters. Come back when you have some age on you.</parameter>
</implementation>
<attribute name="move.continuous"/>
<attribute name="hidden"/>
</portal>
<portal x="14" y="56" ref="ent12n">
<destination zone="0_ados_mountain_n2_w" ref="ent12s"/>
<attribute name="move.continuous"/>
<attribute name="hidden"/>
</portal>
<portal x="14" y="57" ref="ent12s">
<destination zone="0_ados_mountain_n2_w" ref="ent12n"/>
<implementation class-name="games.stendhal.server.entity.mapstuff.portal.LevelCheckingPortal">
<parameter name="minimum-level">100</parameter>
<parameter name="rejected">The entwives are NOT babysitters. Come back when you have some age on you.</parameter>
</implementation>
<attribute name="move.continuous"/>
<attribute name="hidden"/>
</portal>
<portal x="15" y="56" ref="ent13n">
<destination zone="0_ados_mountain_n2_w" ref="ent13s"/>
<attribute name="move.continuous"/>
<attribute name="hidden"/>
</portal>
<portal x="15" y="57" ref="ent13s">
<destination zone="0_ados_mountain_n2_w" ref="ent13n"/>
<implementation class-name="games.stendhal.server.entity.mapstuff.portal.LevelCheckingPortal">
<parameter name="minimum-level">100</parameter>
<parameter name="rejected">The entwives are NOT babysitters. Come back when you have some age on you.</parameter>
</implementation>
<attribute name="move.continuous"/>
<attribute name="hidden"/>
</portal>
<portal x="16" y="56" ref="ent14n">
<destination zone="0_ados_mountain_n2_w" ref="ent14s"/>
<attribute name="move.continuous"/>
<attribute name="hidden"/>
</portal>
<portal x="16" y="57" ref="ent14s">
<destination zone="0_ados_mountain_n2_w" ref="ent14n"/>
<implementation class-name="games.stendhal.server.entity.mapstuff.portal.LevelCheckingPortal">
<parameter name="minimum-level">100</parameter>
<parameter name="rejected">The entwives are NOT babysitters. Come back when you have some age on you.</parameter>
</implementation>
<attribute name="move.continuous"/>
<attribute name="hidden"/>
</portal>
<!-- wishing well-->
<entity x="86" y="21">
<implementation class-name="games.stendhal.server.entity.mapstuff.useable.WellSource"/>

View file

@ -115,6 +115,7 @@
<attributes>
<parameter name="color_method">time</parameter>
<parameter name="weather">varying(rain=-2, temperature=+5)</parameter>
<parameter name="music">jump_and_run_tropics</parameter>
</attributes>
<entity x="90" y="45">
@ -160,6 +161,7 @@
<attributes>
<parameter name="color_method">time</parameter>
<parameter name="weather">varying(rain=-2, temperature=+5)</parameter>
<parameter name="music">jump_and_run_tropics</parameter>
</attributes>
<!-- NPCs -->
@ -1082,6 +1084,7 @@
<attributes>
<parameter name="color_method">time</parameter>
<parameter name="weather">varying(rain=-2, temperature=+5)</parameter>
<!--<parameter name="music">island_mountain</parameter>-->
</attributes>
<!-- Music/Ambiance -->

View file

@ -277,14 +277,13 @@
</zone>
<zone name="0_deniran_city_se" level="0" x="499360" y="500128"
file="Level 0/deniran/city_se.tmx">
<zone name="0_deniran_city_se" level="0" x="499360" y="500128" file="Level 0/deniran/city_se.tmx">
<attributes>
<parameter name="color_method">time</parameter>
<parameter name="weather">varying</parameter>
</attributes>
<configurator class-name="games.stendhal.server.maps.deniran.cityoutside.CloverHunterNPC"/>
</zone>

View file

@ -12,6 +12,10 @@
file="Level 7/kikareukin/clouds.tmx">
<attributes>
<parameter name="color_method">time</parameter>
<parameter name="weather">clouds</parameter>
<parameter name="parallax">semos_surrounds</parameter>
<!-- prevent drawing specific tiles in web client while while keeping compatibility with Java client -->
<parameter name="parallax_ignore_tiles">sky/cloud/clouds</parameter>
</attributes>
<!--Don't allow teleporting in as we don't want marked scrolls made or
@ -51,6 +55,7 @@
<attributes>
<parameter name="color_method">time</parameter>
<parameter name="weather">varying(temperature=-2)</parameter>
<parameter name="parallax">semos_surrounds</parameter>
</attributes>
<configurator

View file

@ -1027,7 +1027,7 @@ below average.
class-name="games.stendhal.server.entity.mapstuff.area.MessagingArea">
<parameter name="width">5</parameter>
<parameter name="height">5</parameter>
<parameter name="enterMessage">You hear faintly incantations of dark magic from below. The place reeks of danger.</parameter>
<parameter name="enterMessage">You hear faint incantations of dark magic from below. The place reeks of danger.</parameter>
<parameter name="warnPlayer">true</parameter>
</implementation>
</entity>

View file

@ -648,6 +648,11 @@ Unfortunately I will not be able to visit Athor this year. I have run into a bit
<!-- Interiors of the wizards tower -->
<zone name="int_semos_wizards_tower_basement" file="interiors/semos/wizards_tower_basement.tmx">
<attributes>
<parameter name="parallax">stars</parameter>
<parameter name="parallax_ignore_tiles">sky/stars</parameter>
</attributes>
<configurator
class-name="games.stendhal.server.maps.semos.wizardstower.WizardsGuardStatueNPC"/>
@ -669,8 +674,14 @@ Unfortunately I will not be able to visit Athor this year. I have run into a bit
class-name="games.stendhal.server.entity.mapstuff.portal.OneWayPortalDestination"/>
</portal>
</zone>
<!-- Interiors of the wizards tower -->
<zone name="int_semos_wizards_tower_1" file="interiors/semos/wizards_tower_1.tmx">
<attributes>
<parameter name="parallax">stars</parameter>
<parameter name="parallax_ignore_tiles">sky/stars</parameter>
</attributes>
<configurator class-name="games.stendhal.server.core.config.zone.NoTeleportIn"/>
<configurator
class-name="games.stendhal.server.maps.semos.wizardstower.FirstFloorCreatures"/>
@ -755,8 +766,14 @@ Unfortunately I will not be able to visit Athor this year. I have run into a bit
<attribute name="hidden"/>
</portal>
</zone>
<!-- Interiors of the wizards tower -->
<zone name="int_semos_wizards_tower_2" file="interiors/semos/wizards_tower_2.tmx">
<attributes>
<parameter name="parallax">stars</parameter>
<parameter name="parallax_ignore_tiles">sky/stars</parameter>
</attributes>
<configurator class-name="games.stendhal.server.core.config.zone.NoTeleportIn"/>
<configurator
class-name="games.stendhal.server.maps.semos.wizardstower.SecondFloorCreatures"/>
@ -828,8 +845,14 @@ Unfortunately I will not be able to visit Athor this year. I have run into a bit
<attribute name="hidden"/>
</portal>
</zone>
<!-- Interiors of the wizards tower -->
<zone name="int_semos_wizards_tower_3" file="interiors/semos/wizards_tower_3.tmx">
<attributes>
<parameter name="parallax">stars</parameter>
<parameter name="parallax_ignore_tiles">sky/stars</parameter>
</attributes>
<configurator class-name="games.stendhal.server.core.config.zone.NoTeleportIn"/>
<configurator
class-name="games.stendhal.server.maps.semos.wizardstower.ThirdFloorCreatures"/>
@ -901,8 +924,14 @@ Unfortunately I will not be able to visit Athor this year. I have run into a bit
<attribute name="hidden"/>
</portal>
</zone>
<!-- Interiors of the wizards tower -->
<zone name="int_semos_wizards_tower_4" file="interiors/semos/wizards_tower_4.tmx">
<attributes>
<parameter name="parallax">stars</parameter>
<parameter name="parallax_ignore_tiles">sky/stars</parameter>
</attributes>
<configurator class-name="games.stendhal.server.core.config.zone.NoTeleportIn"/>
<configurator
class-name="games.stendhal.server.maps.semos.wizardstower.FourthFloorCreatures"/>
@ -974,8 +1003,14 @@ Unfortunately I will not be able to visit Athor this year. I have run into a bit
<attribute name="hidden"/>
</portal>
</zone>
<!-- Interiors of the wizards tower -->
<zone name="int_semos_wizards_tower_5" file="interiors/semos/wizards_tower_5.tmx">
<attributes>
<parameter name="parallax">stars</parameter>
<parameter name="parallax_ignore_tiles">sky/stars</parameter>
</attributes>
<configurator class-name="games.stendhal.server.core.config.zone.NoTeleportIn"/>
<configurator
class-name="games.stendhal.server.maps.semos.wizardstower.FifthFloorCreatures"/>
@ -1047,8 +1082,14 @@ Unfortunately I will not be able to visit Athor this year. I have run into a bit
<attribute name="hidden"/>
</portal>
</zone>
<!-- Interiors of the wizards tower -->
<zone name="int_semos_wizards_tower_6" file="interiors/semos/wizards_tower_6.tmx">
<attributes>
<parameter name="parallax">stars</parameter>
<parameter name="parallax_ignore_tiles">sky/stars</parameter>
</attributes>
<configurator class-name="games.stendhal.server.core.config.zone.NoTeleportIn"/>
<configurator
class-name="games.stendhal.server.maps.semos.wizardstower.SixthFloorCreatures"/>
@ -1120,8 +1161,14 @@ Unfortunately I will not be able to visit Athor this year. I have run into a bit
<attribute name="hidden"/>
</portal>
</zone>
<!-- Interiors of the wizards tower -->
<zone name="int_semos_wizards_tower_7" file="interiors/semos/wizards_tower_7.tmx">
<attributes>
<parameter name="parallax">stars</parameter>
<parameter name="parallax_ignore_tiles">sky/stars</parameter>
</attributes>
<configurator
class-name="games.stendhal.server.maps.semos.wizardstower.WizardsGuardStatueSpireNPC"/>
@ -1146,6 +1193,11 @@ Unfortunately I will not be able to visit Athor this year. I have run into a bit
</zone>
<!-- Interiors of the wizards tower -->
<zone name="int_semos_wizards_tower_8" file="interiors/semos/wizards_tower_spire_1.tmx">
<attributes>
<parameter name="parallax">view_wizards_tower</parameter>
<parameter name="parallax_ignore_tiles">sky/view_wizards_tower</parameter>
</attributes>
<configurator
class-name="games.stendhal.server.maps.semos.wizardstower.RedFireWizardNPC"/>
<configurator
@ -1220,6 +1272,11 @@ Unfortunately I will not be able to visit Athor this year. I have run into a bit
<!-- Interiors of the wizards tower -->
<zone name="int_semos_wizards_tower_9" file="interiors/semos/wizards_tower_spire_2.tmx">
<attributes>
<parameter name="parallax">view_wizards_tower</parameter>
<parameter name="parallax_ignore_tiles">sky/view_wizards_tower</parameter>
</attributes>
<configurator
class-name="games.stendhal.server.maps.semos.wizardstower.BlackDeathWizardNPC"/>
<configurator
@ -1341,6 +1398,9 @@ Unfortunately I will not be able to visit Athor this year. I have run into a bit
<configurator
class-name="games.stendhal.server.maps.semos.plains.ButterfliesNPC"/>
<!-- four-leaf clover: spawns in random zones but needs to be initialized with configurator -->
<configurator class-name="games.stendhal.server.maps.global.FourLeafClover"/>
<configurator class-name="games.stendhal.server.maps.FertileGrounds">
<parameter name="x">60</parameter>
<parameter name="y">44</parameter>

View file

@ -9,7 +9,7 @@
<!-- Ground level -->
<zone name="0_sikhw_desert_n_w2" level="0" x="499104" y="500384"
file="Level 0/sikhw/desert_n_w2.tmx">
file="Level 0/sikhw/desert_n_w2.tmx" accessible="false">
<attributes>
<parameter name="color_method">time</parameter>
@ -20,7 +20,7 @@
<zone name="0_sikhw_desert_w2" level="0" x="499104" y="500512"
file="Level 0/sikhw/desert_w2.tmx">
file="Level 0/sikhw/desert_w2.tmx" accessible="false">
<attributes>
<parameter name="color_method">time</parameter>
@ -31,7 +31,7 @@
<zone name="0_sikhw_desert_s_w2" level="0" x="499104" y="500640"
file="Level 0/sikhw/desert_s_w2.tmx">
file="Level 0/sikhw/desert_s_w2.tmx" accessible="false">
<attributes>
<parameter name="color_method">time</parameter>
@ -42,7 +42,7 @@
<zone name="0_sikhw_desert_s2_w2" level="0" x="499104" y="500768"
file="Level 0/sikhw/desert_s2_w2.tmx">
file="Level 0/sikhw/desert_s2_w2.tmx" accessible="false">
<attributes>
<parameter name="color_method">time</parameter>
@ -55,7 +55,7 @@
<!-- -->
<zone name="0_sikhw_desert_nw" level="0" x="499232" y="500384"
file="Level 0/sikhw/desert_nw.tmx">
file="Level 0/sikhw/desert_nw.tmx" accessible="false">
<attributes>
<parameter name="color_method">time</parameter>
@ -66,7 +66,7 @@
<zone name="0_sikhw_desert_w" level="0" x="499232" y="500512"
file="Level 0/sikhw/desert_w.tmx">
file="Level 0/sikhw/desert_w.tmx" accessible="false">
<attributes>
<parameter name="color_method">time</parameter>
@ -77,7 +77,7 @@
<zone name="0_sikhw_desert_sw" level="0" x="499232" y="500640"
file="Level 0/sikhw/desert_sw.tmx">
file="Level 0/sikhw/desert_sw.tmx" accessible="false">
<attributes>
<parameter name="color_method">time</parameter>
@ -88,7 +88,7 @@
<zone name="0_sikhw_desert_s2_w" level="0" x="499232" y="500768"
file="Level 0/sikhw/desert_s2_w.tmx">
file="Level 0/sikhw/desert_s2_w.tmx" accessible="false">
<attributes>
<parameter name="color_method">time</parameter>
@ -101,7 +101,7 @@
<!-- -->
<zone name="0_sikhw_desert_n" level="0" x="499360" y="500384"
file="Level 0/sikhw/desert_n.tmx">
file="Level 0/sikhw/desert_n.tmx" accessible="false">
<attributes>
<parameter name="color_method">time</parameter>
@ -113,7 +113,7 @@
<zone name="0_sikhw_city" level="0" x="499360" y="500512"
file="Level 0/sikhw/city.tmx">
file="Level 0/sikhw/city.tmx" accessible="false">
<attributes>
<parameter name="color_method">time</parameter>
@ -124,7 +124,7 @@
<zone name="0_sikhw_desert_s" level="0" x="499360" y="500640"
file="Level 0/sikhw/desert_s.tmx">
file="Level 0/sikhw/desert_s.tmx" accessible="false">
<attributes>
<parameter name="color_method">time</parameter>
@ -135,7 +135,7 @@
<zone name="0_sikhw_desert_s2" level="0" x="499360" y="500768"
file="Level 0/sikhw/desert_s2.tmx">
file="Level 0/sikhw/desert_s2.tmx" accessible="false">
<attributes>
<parameter name="color_method">time</parameter>
@ -148,7 +148,7 @@
<!-- -->
<zone name="0_sikhw_desert_ne" level="0" x="499488" y="500384"
file="Level 0/sikhw/desert_ne.tmx">
file="Level 0/sikhw/desert_ne.tmx" accessible="false">
<attributes>
<parameter name="color_method">time</parameter>
@ -159,7 +159,7 @@
<zone name="0_sikhw_desert_e" level="0" x="499488" y="500512"
file="Level 0/sikhw/desert_e.tmx">
file="Level 0/sikhw/desert_e.tmx" accessible="false">
<attributes>
<parameter name="color_method">time</parameter>
@ -170,7 +170,7 @@
<zone name="0_sikhw_desert_se" level="0" x="499488" y="500640"
file="Level 0/sikhw/desert_se.tmx">
file="Level 0/sikhw/desert_se.tmx" accessible="false">
<attributes>
<parameter name="color_method">time</parameter>
@ -180,7 +180,7 @@
</zone>
<zone name="0_sikhw_desert_s2_e" level="0" x="499488" y="500768"
file="Level 0/sikhw/desert_s2_e.tmx">
file="Level 0/sikhw/desert_s2_e.tmx" accessible="false">
<attributes>
<parameter name="color_method">time</parameter>

Binary file not shown.

After

Width:  |  Height:  |  Size: 843 B

View file

@ -0,0 +1,127 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
height="48"
version="1.1"
width="48"
id="svg131"
sodipodi:docname="pathfinding-disabled.svg"
inkscape:version="1.3.2 (091e20e, 2023-11-25, custom)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<title
id="title1">Path Finding Enabled</title>
<sodipodi:namedview
id="namedview131"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="true"
inkscape:deskcolor="#d1d1d1"
inkscape:zoom="4.8032754"
inkscape:cx="32.686029"
inkscape:cy="28.418108"
inkscape:window-width="1920"
inkscape:window-height="1025"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="svg131" />
<defs
id="defs1" />
<g
id="g1">
<circle
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:2.71045;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.999544"
id="path1"
cx="24"
cy="24"
r="16"
inkscape:label="background" />
<g
id="g134"
transform="matrix(-0.03571429,0,0,0.03571429,34.000001,15.42857)"
inkscape:label="icon">
<path
id="path135"
style="display:inline;fill:#ffffff"
d="m 240,0 c 0,60 0,120 0,180 -20,20 -40,40 -60,60 -40,0 -80,0 -120,0 -20,20 -40,40 -60,60 0,60 0,120 0,180 106.66667,0 213.33333,0 320,0 0,-13.33333 0,-26.66667 0,-40 13.33333,0 26.66667,0 40,0 0,13.33333 0,26.66667 0,40 66.66667,0 133.33333,0 200,0 0,-160 0,-320 0,-480 C 453.33333,0 346.66667,0 240,0 Z"
inkscape:label="boot_background" />
<path
id="rect103"
style="fill:#000000"
inkscape:label="boot_shadow"
d="m 280,40 v 160 l -80,80 h 60 l 60,-60 V 40 Z m 200,0 V 360 H 40 v 40 H 520 V 40 Z"
sodipodi:nodetypes="cccccccccccccc" />
<path
id="path134"
d="m 240,0 v 180 l -60,60 H 60 C 46.666667,253.33333 13.333333,286.66667 0,300 v 180 h 320 v -40 h 40 v 40 H 560 V 0 Z m 40,40 H 520 V 400 H 40 v -80 c 13.333333,-13.33333 26.666667,-26.66667 40,-40 h 120 l 80,-80 z"
sodipodi:nodetypes="cccccccccccccccccccccc"
inkscape:label="boot_outline"
style="display:inline;fill:#ffffff" />
</g>
<path
id="path859"
style="fill:#ffffff;fill-opacity:0.99858;stroke:#000000;stroke-width:1.92;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:label="disabled"
d="M 36,8.96 8.96,36 v 3.04 H 12 L 39.04,12 V 8.96 Z"
sodipodi:nodetypes="ccccccc" />
</g>
<metadata
id="metadata135">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:date>2024-06-23</dc:date>
<dc:creator>
<cc:Agent>
<dc:title>Jordan Irwin (AntumDeluge)</dc:title>
</cc:Agent>
</dc:creator>
<dc:title>Path Finding Enabled</dc:title>
<dc:publisher>
<cc:Agent>
<dc:title>Stendhal Game</dc:title>
</cc:Agent>
</dc:publisher>
<dc:subject>
<rdf:Bag>
<rdf:li>icon</rdf:li>
<rdf:li>menu</rdf:li>
<rdf:li>button</rdf:li>
<rdf:li>cursor</rdf:li>
<rdf:li>boot</rdf:li>
<rdf:li>shoe</rdf:li>
<rdf:li>foot</rdf:li>
<rdf:li>walk</rdf:li>
<rdf:li>walking</rdf:li>
<rdf:li>move</rdf:li>
<rdf:li>moving</rdf:li>
<rdf:li>path</rdf:li>
<rdf:li>pathfinding</rdf:li>
<rdf:li>path finding</rdf:li>
<rdf:li>disable</rdf:li>
<rdf:li>disabled</rdf:li>
</rdf:Bag>
</dc:subject>
<cc:license
rdf:resource="http://creativecommons.org/publicdomain/zero/1.0/" />
</cc:Work>
<cc:License
rdf:about="http://creativecommons.org/publicdomain/zero/1.0/">
<cc:permits
rdf:resource="http://creativecommons.org/ns#Reproduction" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#Distribution" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
</cc:License>
</rdf:RDF>
</metadata>
</svg>

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 720 B

View file

@ -0,0 +1,121 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
height="48"
version="1.1"
width="48"
id="svg131"
sodipodi:docname="pathfinding.svg"
inkscape:version="1.3.2 (091e20e, 2023-11-25, custom)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<title
id="title1">Path Finding Enabled</title>
<sodipodi:namedview
id="namedview131"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="true"
inkscape:deskcolor="#d1d1d1"
inkscape:zoom="3.3964286"
inkscape:cx="56.235541"
inkscape:cy="24.290221"
inkscape:window-width="1920"
inkscape:window-height="1025"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="svg131" />
<defs
id="defs1" />
<g
id="g1">
<circle
style="display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:2.71045;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.999544"
id="path1"
cx="24"
cy="24"
r="16"
inkscape:label="background" />
<g
id="g134"
transform="matrix(-0.03571429,0,0,0.03571429,34.000001,15.42857)"
inkscape:label="icon">
<path
id="path135"
style="display:inline;fill:#ffffff"
d="m 240,0 c 0,60 0,120 0,180 -20,20 -40,40 -60,60 -40,0 -80,0 -120,0 -20,20 -40,40 -60,60 0,60 0,120 0,180 106.66667,0 213.33333,0 320,0 0,-13.33333 0,-26.66667 0,-40 13.33333,0 26.66667,0 40,0 0,13.33333 0,26.66667 0,40 66.66667,0 133.33333,0 200,0 0,-160 0,-320 0,-480 C 453.33333,0 346.66667,0 240,0 Z"
inkscape:label="boot_background" />
<path
id="rect103"
style="fill:#000000"
inkscape:label="boot_shadow"
d="m 280,40 v 160 l -80,80 h 60 l 60,-60 V 40 Z m 200,0 V 360 H 40 v 40 H 520 V 40 Z"
sodipodi:nodetypes="cccccccccccccc" />
<path
id="path134"
d="m 240,0 v 180 l -60,60 H 60 C 46.666667,253.33333 13.333333,286.66667 0,300 v 180 h 320 v -40 h 40 v 40 H 560 V 0 Z m 40,40 H 520 V 400 H 40 v -80 c 13.333333,-13.33333 26.666667,-26.66667 40,-40 h 120 l 80,-80 z"
sodipodi:nodetypes="cccccccccccccccccccccc"
inkscape:label="boot_outline"
style="display:inline;fill:#ffffff" />
</g>
</g>
<metadata
id="metadata135">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:date>2024-06-23</dc:date>
<dc:creator>
<cc:Agent>
<dc:title>Jordan Irwin (AntumDeluge)</dc:title>
</cc:Agent>
</dc:creator>
<dc:title>Path Finding Enabled</dc:title>
<dc:publisher>
<cc:Agent>
<dc:title>Stendhal Game</dc:title>
</cc:Agent>
</dc:publisher>
<dc:subject>
<rdf:Bag>
<rdf:li>icon</rdf:li>
<rdf:li>menu</rdf:li>
<rdf:li>button</rdf:li>
<rdf:li>cursor</rdf:li>
<rdf:li>boot</rdf:li>
<rdf:li>shoe</rdf:li>
<rdf:li>foot</rdf:li>
<rdf:li>walk</rdf:li>
<rdf:li>walking</rdf:li>
<rdf:li>move</rdf:li>
<rdf:li>moving</rdf:li>
<rdf:li>path</rdf:li>
<rdf:li>pathfinding</rdf:li>
<rdf:li>path finding</rdf:li>
<rdf:li>enable</rdf:li>
<rdf:li>enabled</rdf:li>
</rdf:Bag>
</dc:subject>
<cc:license
rdf:resource="http://creativecommons.org/publicdomain/zero/1.0/" />
</cc:Work>
<cc:License
rdf:about="http://creativecommons.org/publicdomain/zero/1.0/">
<cc:permits
rdf:resource="http://creativecommons.org/ns#Reproduction" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#Distribution" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
</cc:License>
</rdf:RDF>
</metadata>
</svg>

After

Width:  |  Height:  |  Size: 4.3 KiB

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1097,6 +1097,7 @@ venom gland=
You see the venom gland of a giant king cobra. It is filled with deadly toxin.=
pelt=
You see a pelt of animal skin. It's used to make clothes and leather armor.=
leather thread=
You see a strand of sturdy leather thread.=
@ -1265,6 +1266,9 @@ You see an imperial ring. It is imbued with the strength of a king.=
enhanced imperial ring=
You see an enhanced imperial ring. It eminates the auras of strength and defense.=
ring of clarity=
You see a ring of clarity. You feel more aware while wearing it.=
## scrolls
@ -1407,6 +1411,9 @@ You see a silvery gm token. Does it bring you pride?=
bronze gm token=
You see a bronze gm token. Does it bring you pride?=
four-leaf clover=
You see a lucky four-leaf clover. What are the chances of finding one!?=
## swords
@ -1635,6 +1642,7 @@ You see a killer bat which will suck your blood!=
giant bat=
giant killer bat=
You see a giant killer bat. As if small wasn't pesky enough, these giant ones are capable of taking down anyone who dares come before them.=
piglet=
You see a piglet, a bit dirty.=
@ -1702,6 +1710,7 @@ black bear=
You see a strong black bear which hibernates in winter.=
polar bear=
You see a polar bear which lives in the icy desert. Beware! It can take you down with its powerful claws!=
## animal_aquatic
@ -2268,6 +2277,7 @@ cannibal=
You see a cannibal. He hunts you for cooking and eating your fresh meat! It's useless to tell him that your flesh is not good, better fight him or run away!=
elder cannibal=
You see an elder cannibal. For years it has eaten humans. It will not stop until its hunger is satisfied.=
cannibal warrior=
You see a cannibal warrior.=

View file

@ -1,212 +1,112 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE map SYSTEM "http://mapeditor.org/dtd/1.0/map.dtd">
<map version="1.0" orientation="orthogonal" width="128" height="128" tilewidth="32" tileheight="32">
<tileset firstgid="1" name="ground/brown" tilewidth="32" tileheight="32">
<image source="../../tileset/ground/brown.png" trans="ff00ff"/>
<map version="1.8" tiledversion="1.8.4" orientation="orthogonal" renderorder="right-down" width="128" height="128" tilewidth="32" tileheight="32" infinite="0" nextlayerid="9" nextobjectid="1">
<tileset firstgid="1" name="ground/brown" tilewidth="32" tileheight="32" tilecount="5" columns="5">
<image source="../../tileset/ground/brown.png" trans="ff00ff" width="160" height="32"/>
</tileset>
<tileset firstgid="6" name="logic/collision" tilewidth="32" tileheight="32">
<image source="../../tileset/logic/collision.png"/>
<tileset firstgid="6" name="logic/collision" tilewidth="32" tileheight="32" tilecount="1" columns="1">
<image source="../../tileset/logic/collision.png" width="32" height="32"/>
</tileset>
<tileset firstgid="7" name="logic/creature/chaos" tilewidth="32" tileheight="32">
<image source="../../tileset/logic/creature/chaos.png"/>
<tileset firstgid="7" name="logic/creature/chaos" tilewidth="32" tileheight="32" tilecount="7" columns="7">
<image source="../../tileset/logic/creature/chaos.png" width="224" height="32"/>
</tileset>
<tileset firstgid="14" name="ground/ground" tilewidth="32" tileheight="32">
<image source="../../tileset/ground/ground.png"/>
<tileset firstgid="14" name="ground/ground" tilewidth="32" tileheight="32" tilecount="33" columns="3">
<image source="../../tileset/ground/ground.png" width="96" height="352"/>
</tileset>
<tileset firstgid="47" name="ground/water/pool" tilewidth="32" tileheight="32">
<image source="../../tileset/ground/water/pool.png"/>
<tileset firstgid="47" name="ground/water/pool" tilewidth="32" tileheight="32" tilecount="72" columns="3">
<image source="../../tileset/ground/water/pool.png" width="96" height="768"/>
</tileset>
<tileset firstgid="119" name="ground/brown_edges" tilewidth="32" tileheight="32">
<image source="../../tileset/ground/brown_edges.png"/>
<tileset firstgid="119" name="ground/brown_edges" tilewidth="32" tileheight="32" tilecount="18" columns="6">
<image source="../../tileset/ground/brown_edges.png" width="192" height="96"/>
</tileset>
<tileset firstgid="137" name="ground/brown_corners" tilewidth="32" tileheight="32">
<image source="../../tileset/ground/brown_corners.png"/>
<tileset firstgid="137" name="ground/brown_corners" tilewidth="32" tileheight="32" tilecount="8" columns="4">
<image source="../../tileset/ground/brown_corners.png" width="128" height="64"/>
</tileset>
<tileset firstgid="145" name="ground/earth_edges" tilewidth="32" tileheight="32">
<image source="../../tileset/ground/earth_edges.png"/>
<tileset firstgid="145" name="ground/earth_edges" tilewidth="32" tileheight="32" tilecount="18" columns="6">
<image source="../../tileset/ground/earth_edges.png" width="192" height="96"/>
</tileset>
<tileset firstgid="163" name="ground/grass_corners" tilewidth="32" tileheight="32">
<image source="../../tileset/ground/grass_corners.png"/>
<tileset firstgid="163" name="ground/grass_corners" tilewidth="32" tileheight="32" tilecount="24" columns="6">
<image source="../../tileset/ground/grass_corners.png" width="192" height="128"/>
</tileset>
<tileset firstgid="187" name="ground/rock/green_crystal2" tilewidth="32" tileheight="32">
<image source="../../tileset/ground/rock/green_crystal2.png"/>
<tileset firstgid="187" name="ground/rock/green_crystal2" tilewidth="32" tileheight="32" tilecount="20" columns="5">
<image source="../../tileset/ground/rock/green_crystal2.png" width="160" height="128"/>
</tileset>
<tileset firstgid="207" name="ground/rock/pebbles" tilewidth="32" tileheight="32">
<image source="../../tileset/ground/rock/pebbles.png"/>
<tileset firstgid="207" name="ground/rock/pebbles" tilewidth="32" tileheight="32" tilecount="3" columns="1">
<image source="../../tileset/ground/rock/pebbles.png" width="32" height="96"/>
</tileset>
<tileset firstgid="210" name="ground/rock/blue_crystal" tilewidth="32" tileheight="32">
<image source="../../tileset/ground/rock/blue_crystal.png"/>
<tileset firstgid="210" name="ground/rock/blue_crystal" tilewidth="32" tileheight="32" tilecount="20" columns="5">
<image source="../../tileset/ground/rock/blue_crystal.png" width="160" height="128"/>
</tileset>
<tileset firstgid="230" name="ground/rock/rocks_3" tilewidth="32" tileheight="32">
<image source="../../tileset/ground/rock/rocks_3.png"/>
<tileset firstgid="230" name="ground/rock/rocks_3" tilewidth="32" tileheight="32" tilecount="16" columns="4">
<image source="../../tileset/ground/rock/rocks_3.png" width="128" height="128"/>
</tileset>
<tileset firstgid="246" name="plant/bush/various_small" tilewidth="32" tileheight="32">
<image source="../../tileset/plant/bush/various_small.png"/>
<tileset firstgid="246" name="plant/bush/various_small" tilewidth="32" tileheight="32" tilecount="9" columns="3">
<image source="../../tileset/plant/bush/various_small.png" width="96" height="96"/>
</tileset>
<tileset firstgid="255" name="plant/mosses" tilewidth="32" tileheight="32">
<image source="../../tileset/plant/mosses.png"/>
<tileset firstgid="255" name="plant/mosses" tilewidth="32" tileheight="32" tilecount="16" columns="4">
<image source="../../tileset/plant/mosses.png" width="128" height="128"/>
</tileset>
<tileset firstgid="271" name="logic/creature/hybrid" tilewidth="32" tileheight="32">
<image source="../../tileset/logic/creature/hybrid.png" trans="ff00ff"/>
<tileset firstgid="271" name="logic/creature/hybrid" tilewidth="32" tileheight="32" tilecount="16" columns="8">
<image source="../../tileset/logic/creature/hybrid.png" trans="ff00ff" width="256" height="64"/>
</tileset>
<tileset firstgid="287" name="ground/grass_2" tilewidth="32" tileheight="32">
<image source="../../tileset/ground/grass_2.png"/>
<tileset firstgid="287" name="ground/grass_2" tilewidth="32" tileheight="32" tilecount="21" columns="3">
<image source="../../tileset/ground/grass_2.png" width="96" height="224"/>
</tileset>
<tileset firstgid="308" name="ground/water/whirlpool" tilewidth="32" tileheight="32">
<image source="../../tileset/ground/water/whirlpool.png"/>
<tileset firstgid="308" name="ground/water/whirlpool" tilewidth="32" tileheight="32" tilecount="8" columns="1">
<image source="../../tileset/ground/water/whirlpool.png" width="32" height="256"/>
</tileset>
<tileset firstgid="316" name="logic/creature/mythical_being" tilewidth="32" tileheight="32">
<image source="../../tileset/logic/creature/mythical_being.png"/>
<tileset firstgid="316" name="logic/creature/mythical_being" tilewidth="32" tileheight="32" tilecount="24" columns="8">
<image source="../../tileset/logic/creature/mythical_being.png" width="256" height="96"/>
</tileset>
<tileset firstgid="340" name="building/wall/int_sandstone" tilewidth="32" tileheight="32">
<image source="../../tileset/building/wall/int_sandstone.png"/>
<tileset firstgid="340" name="building/wall/int_sandstone" tilewidth="32" tileheight="32" tilecount="15" columns="3">
<image source="../../tileset/building/wall/int_sandstone.png" width="96" height="160"/>
</tileset>
<tileset firstgid="355" name="building/entrance/shadow" tilewidth="32" tileheight="32">
<image source="../../tileset/building/entrance/shadow.png"/>
<tileset firstgid="355" name="building/entrance/shadow" tilewidth="32" tileheight="32" tilecount="3" columns="1">
<image source="../../tileset/building/entrance/shadow.png" width="32" height="96"/>
</tileset>
<tileset firstgid="358" name="plant/flower/hothouse_flowers" tilewidth="32" tileheight="32">
<image source="../../tileset/plant/flower/hothouse_flowers.png"/>
<tileset firstgid="358" name="plant/flower/hothouse_flowers" tilewidth="32" tileheight="32" tilecount="72" columns="6">
<image source="../../tileset/plant/flower/hothouse_flowers.png" width="192" height="384"/>
</tileset>
<tileset firstgid="430" name="logic/creature/insect" tilewidth="32" tileheight="32">
<image source="../../tileset/logic/creature/insect.png"/>
<tileset firstgid="430" name="logic/creature/insect" tilewidth="32" tileheight="32" tilecount="5" columns="5">
<image source="../../tileset/logic/creature/insect.png" width="160" height="32"/>
</tileset>
<layer name="0_floor" width="128" height="128">
<layer id="1" name="0_floor" width="128" height="128">
<data encoding="base64" compression="gzip">
H4sIAAAAAAAAAO2c3WoUQRCFR3wDbwSFhX2SsCBE79SLPIeQ9wddcHEyTs/0T/2cqj4X5y5JV9f3
TXXPhuTl3bK8MAzDMAzDMAzDMAwDn/dLOd61MT7cyT9variTf860sCf/2GllTf55Qu7zhs/9fJFg
Tv5xQ/ZzRPo5J3v8aDMne8xYcSd7nFgyJ3uceHAn/zl5k31s9hI/y7sHM0bjWSVz/GjOZ7LHjsVs
Jne88DyeN2Q/b3gXnzOadzwGN6PvdPQgbiTZk3+sSLOnBzEywpMexI0UN86FeNFgRA/wo82F9wTc
WHKgAzjx7j09wOdu1W/EmjIGvcf0AKO3rDVPIvaS94K5+8e74dw9690L8p7YJ7t9eezRqqZIPUHg
L7V3z3oQ9h+RtWQfvOrMxhupp5FqzcQdpZ/R6o3OHK2f0eolf/LP4kC0PXhzzeZCtJq9WWbzIEqd
GZ0iS7z08PN2IeLcQU8rM4+5EPnciZCe3lp54HHOWPuNkJH9SLowMm8QmGd2wLOPGr1Grg3Vgda9
oPU4kp+o/NGeNYQasvDXdECLQwT2WR0Y3dNs/CM50NI3D+/IH8cB8s/Lv6Z/5J+b/1kPyV+23k/L
v3hzr+0h+evw//Inn/8G2QHyl+d/W7HfCxJ/CQfI/y3/9bNfk5kc0PYqIn8LB7T51/Ii/7pIMbF2
4GydGfg/C/GXdkD6+exZS6NmNP4SM0CLjxX/0lrkX89ai5OlA5qzBIn9ln/NGeBRY0s/vblH5n82
A7xqpAP+/FFq1nYsiwOS/NFqJn+5PX8IyJ8O5OTfWr9mXyJ60FPTGX9r9q37iOaAhgsjdSDyb91b
VAdGXJBaOwP/3l56c0cI4vk/yij6PCD/cU50oI//3mfA3tx7GVnNm8i5848yA3r3SAfm5k8P2vh/
B+UvwcV75njzLvHXfA/8eJAIDvSsaTVbRteo5T/igAZ/iR5qruk1X9D4H7GXcEH7Gepdc8RrqXjx
b2HufRZozQJv9jPx93SgVIM3+xH+tx326PyRPEBJL//7s/9z+f/zQG3+Ug7M7kHLHkuzf+8ssOCP
NAcietC6ty37++x/deaPch+I5EHvnvae/VH+JQda/fDsSxQfRvfQwl/yc+BodwFUD6T5P5/wR/td
QE3WtV+VfYjE/sF/bwb8Ssp/He25oOWHZD0l/q9LHv5HDnj74J09/usz4LbTJ2+Wo3cFenDMv+Zv
gRGYj94V6UGZv/XfAnvwr3XBm5EF/z0Hav4fBAp/qffF2Tw44t/zP4E8+Ut+ZjCLB0f8ex3QcMKa
f40L3uws+CM54Jms82DN/8gBKQ+iu5DNgRb+9OBt/ZcEHvTwr303QPejde3t1+zxj+bAln/LDPix
ySjvy0FPpR2p4XhW5zqz8S858VTRv6dCSr0t9bnHizOONWtfCt8/O/+j2fDIt47va+E1+hy3+nC0
tjfbXv7SPmj59LWQFu5XAQ8inwM1/NF8qPWl5Mc2kg7MwH/UBUSvrkIezMa/1Q302fKYB1sXat2I
dgfQ5C/tj+UZtT4bzhKZfxQXJGdQ613izIMM7DP7IXEuHHlQeu/05kUPbDyIzP43NmQNLwAAAQA=
H4sIAAAAAAAACu2cy4rbQBBFFfIHWSZg8JcMhsAku0wW8x2B+X9IDDHRKGqpH/W4VX0Xd+lRVZ2jatmD/fphWV4ZhmEYhmEYhmEYhoHPx6Uc79oYH+7knzc13Mk/Z1rYk3/stLIm/zwh93nD+36+SDAn/7gh+zkifZ+TPX60mZM9Zqy4kz1OLJmTPU48uJP/nLzJPjZ7ib/lPYMZo3Gvkjl+NPcz2WPHYjeTO154Hs8bsp83fBafM5rPeAxuRt/T0YO4kWRP/rEizZ4exMgIT3oQN1LcuBfiRYMRPcCPNhc+J+DGkgMdwIn37OkBPnereSPWlDHoM6YHGLNlrXkScZZ8Lph7fnw2nHtmvb0g98Q52fXl0aNVTZFmgsBfqnfPehD6j8hacg5edWbjjTTTSLVm4o4yz2j1RmeONs9o9ZI/+WdxIFoP3lyzuRCtZm+W2TyIUmdGp8gSLz38vF2IuHfQ08rMYy9EPncipGe2Vh54nDPWfiNkpB9JF0b2DQLzzA54zlFj1si1oTrQ2gvajCP5icof7V5DqCELf00HtDhEYJ/VgdGeZuMfyYGWuXl4R/44DpB/Xv418yP/3PzPZkj+svV+Xv7Fm3vtDMlfh//XP/nyN8gOkL88/9uK/V6Q+Es4QP7v+a/v/ZrM5IC2VxH5Wzigzb+WF/nXRYqJtQNn15mB/7MQf2kHpO/Pnmtp1IzGX2IHaPGx4l+6FvnXs9biZOmA5i5BYr/lX3MGeNTYMk9v7pH5n+0ArxrpgD9/lJq1HcvigCR/tJrJX67nTwH504Gc/Fvr15xLRA96ajrjb82+tY9oDmi4MFIHIv/W3qI6MOKC1LUz8O+dpTd3hCCe/6OMou8D8h/nRAf6+O99BuzNvZeR1b6JnDv/KDugt0c6MDd/etDG/wcofwku3jvHm3eJP/r7QE8Heq5ptVtGr1HLP5sDvR5I/23N2rPzl7qPNK7pPZdZ+Hs5cHZd75nMxN/TgVIN3vMY4X/bYY/OH8kDlPTyv9/7P5f/Pw/07oceyPde2v17Z4F3X9b8I3rQ2tuW/X33v5F/OA96e9q79zPw1/QAyYfRHlr40wE8D6T5P5/wj+jAuvarsg+R2D/47+2AX0n5r6O9F7T8kKynxP9tycP/yAFvH7yzx399Btx25uTNUtsFbybe/Gu+C+zNkB7o8rf+LrB3ZvWg9P+f2t+D8OZGD/T49/wmkDc/eiDHv9eBbE5k9uCMPx3IvQ/W/I8ckPIgqwveHC3404P3/C8JPOjhX/veIKsfR/yjObDl37IDXjYZ5X05mCmKI+s615mNf8mJpwpmT4WUZluas4YXNde+LPu1zs7/aDc88r3jddv9IOHH3t5pzfa1Ec+BPf7SPmj59K0QK/4ZzoEa/mg+1PpS8mObK/l3p4cPoldXIQ9m49/qBvpueeyDrQu1bkR7BtDkL+2P5Rm1PhvOEpl/FBckd1Drs8SZBxnYZ/ZD4lw48iDD54D0oN+DyOx/A/Jq0JkAAAEA
</data>
</layer>
<layer name="1_terrain" width="128" height="128">
<layer id="2" name="1_terrain" width="128" height="128">
<data encoding="base64" compression="gzip">
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
Zyr+BYtELmkAAAEA
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
</data>
</layer>
<layer name="2_object" width="128" height="128">
<layer id="3" name="2_object" width="128" height="128">
<data encoding="base64" compression="gzip">
H4sIAAAAAAAAAO3bzQpAQBQGUPNWngULnkeKN5YsbKYkynDPWVlN6s7P12WqCgAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAACCuJr39BrypV38A4IJOdgAA4ESb9tyo7xjP1msc0vEMAAAA
AAAAAEAZZv9yQEh31/5o7yhK/UA9nhgDgH+4mhMmZwg3uF9QlkU9PkF2pzR6BOQ4U+D/ZBKIybdl
cswLAAAAIEcfGQAAiGYFWjgd9QAAAQA=
H4sIAAAAAAAACu3bMQrAIAwFUHOrnqU6tPe/RCkOHUUQrPjelDGQ5ROSlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2dcbsDpjpMn8AoEORHQAAaMhRc6O9437eXeMdXw0AAAAAAAAAAACMcbjLAwAW5b8A+sn/AAAAAAAAAAAAAPAvD8b9VLMAAAEA
</data>
</layer>
<layer name="3_roof" width="128" height="128">
<layer id="4" name="3_roof" width="128" height="128">
<data encoding="base64" compression="gzip">
H4sIAAAAAAAAAO3c20rDQBAG4Lz/O1lBL6q3HloVD/sceuMUWppeGKOwmbL7ffBDSgM7sJDdzEKG
AQAAAAAAAAAAAIBaPiNf2UUAAAAAAAAAAAAAQEdKdgEAAFRVRtebrCJY1F3kPrsI0mwjTxP/l4Xq
IMdr5C3yuP/tud+f58hLdhGkeY98ZBcB/MvDcFy/6Y/1u2/Wb8b0dNq3e0//6Rtbv/V0aNuhpwMA
QJt27wIluwigqpJdAGnKjHv0/fqm79e+qbNefb/2Oevtm7NeDuz3+ma/1zf7PQAAAAAAAAAAMlxE
VtlFcGI8J7eVx7qKXFceg79Zck7WkZuFxmKeqTm5rDhu7WcNAHA+rPsA0Laa/QMAAAAAAAAAAAAA
AADOxzeEbpmpAAABAA==
H4sIAAAAAAAACu3c20rDQBAG4Lz/O1lBL6q3HloVD/sceuMUWppeGKOwmbL7ffBDSgM7sJDdzEKGAQAAAAAAAAAAAIBaPiNf2UUAAAAAAAAAAAAAQEdKdgEAAFRVRtebrCJY1F3kPrsI0mwjTxP/l4XqIMdr5C3yuP/tud+f58hLdhGkeY98ZBcB/MvDcFy/6Y/1u2/Wb8b0dNq3e0//6Rtbv/V0aNuhpwMAQJt27wIluwigqpJdAGnKjHv0/fqm79e+qbNefb/2Oevtm7NeDuz3+ma/1zf7PQAAAAAAAAAAMlxEVtlFcGI8J7eVx7qKXFceg79Zck7WkZuFxmKeqTm5rDhu7WcNAHA+rPsA0Laa/QMAAAAAAAAAAAAAAADOxzeEbpmpAAABAA==
</data>
</layer>
<layer name="4_roof_add" width="128" height="128">
<layer id="5" name="4_roof_add" width="128" height="128">
<data encoding="base64" compression="gzip">
H4sIAAAAAAAAAO3OAQ0AAAgDoPfPZyBj3E1IQAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwy7QD
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABPLYaZVTEAAAEA
H4sIAAAAAAAACu3OAQ0AAAgDoPfPZyBj3E1IQAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwy7QDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABPLYaZVTEAAAEA
</data>
</layer>
<layer name="objects" width="128" height="128">
<layer id="6" name="objects" width="128" height="128">
<data encoding="base64" compression="gzip">
H4sIAAAAAAAAAO3cSw6CMBQF0DrC3xZcjTt2hcbEiaYxUmheP+dMmDC4CeTSPgIpAQAAAAAAAAAR
ztEBAAAAAAAABnKJDgAAAAD8tLyP9vAwj2t0AAAAAEjmUbMqmUvcDrvH2KzFTD3TB+P7vsZL9iyA
+jxzAKjN+3igVK4/aq1fzbbaZWYCvJhfAAAAsMYxOgAAAAAAAEzMNwQwN//zBQAAACDHvAgAAOhN
j/+mu3eY2X6xXI/XG3K29IAOyfunH3TIJ/fSmE7RAYDm6HsAAEZjxsNa7hmAfelVAIB5WQsCAAA9
e9jTAAATewI4cp9TAAABAA==
H4sIAAAAAAAACu3cQQqDMBAF0Liytr1C73/NIrgqoVA1nZh5b+PGxQdlNF9MKQAAAAAAAABAhHt0AAAAAAAAgIE8ogMAAAAAX83b0Roe8nhGBwAAAICij8pqTy/xmk6PcViPma7MPBjf5zWeq2cBtOeZA0BrvscDe9XmR6v3V91Wv3QmwEp/AQAAwC9u0QEAAAAAACAx/xBAbvbzBQAAAKBGXwQAAFyNven+w3oRODIHzBDO4l4a0xIdAOiOeQ8AAAAAAAAAAAAAAJDXG8ZnpKUAAAEA
</data>
</layer>
<layer name="collision" width="128" height="128" visible="0" opacity="0.58">
<layer id="7" name="collision" width="128" height="128" visible="0" opacity="0.58">
<data encoding="base64" compression="gzip">
H4sIAAAAAAAAAO2T22prQQxD91P//5NLHgIh5DIX20ueSCBaOGePZS3377quP9u2bdu2bdu2bdu2
bVver0Rnshnud9HZbI77/ad9nr+JzmfXcH4nOrfNsb8Estsc+0sgv81wvwR2sDn+dH47h/PIN/RO
dizzGdG72Qz3S2A/e4/57o3Qu9rz3Ee/e/63x/9P72rPa+cdeld7jX3UW/S+dh6rqHdshjudzTZ7
u475o+icNsf+Eshqc+wvgbw2x/4SyGznMh+9C3oPO579XSPf0LvYMfx3b4beyV5nGPXOyls2x/1K
ejNqhq3JfuUGIubZ+2yq51VmsBn2K/dAd3SiFbv+JrqzE6ze7zfR+Tq7S6cjojN2c6ceR0Xn7OCu
3c2Izqrm7n2tiM5M+6SOVkXnVu6JzlrBn9y5Ko/i7qr8H9U1T9a7Kr4efj7/niUF/pGiGSr9XY2o
S85R0Rwz2Gf2bv467rBDhXbm0P1EdErnofnviu5opVM6A71/puj97Phb2P3G1vcnrd7NpzeiMj/m
oTvs7ndauZlPyspL99fd77Tz7TdF5Ft5y46/gZ17IDJG71CRqdMNrHY5+60a88x8nW9Atd8q0Uwj
O6mY8Wn2ThZKNFPFG4hg0oH9XTTTSD7k7a3mUBDNMpoHNW9lvoJolh1uYEbmz99AxpxRXubP30Dl
re3MVhDNL4sLwX52roJWstLMR3qsurGdeQqazUqznuWTPWNnloJO4F91A59mmb/5m//v3oD5847Y
c3VmRuYKreSkO1vpk75NxRtYzZixW3afNONf41+Va2Y2zVntBnbyVe2S1SfNW+EGMvhnZZzN2/EG
qhXNv0IZndLcCf672brw73YD2V1G5enEv+sNRPYanYFg/2l+ZI8076g7yJzdkf9MZpq1mr/1Qyrr
74nuXMkj3VCK3Cv6/VM80gml6N2y5nT2SBcKyr4FmoMK/3dd0MraNXpGN4/2QCt756xZ6h7dn1Yl
/4yZqh7dXUVV+0fMysxdzf/kGxjdLbPb3ezPM0/mfxPBf3VuVv6IjDNvqEn9Bkj9Av+bom9gZlc1
/n9Pv/8C/5uybmB2Z5XOdvdTuedZqdwBpai9Ondw06/dQeQ+3XZ/pUz+EX1EdZmxwwn8b6q6AbKX
av7dbuCmyjuo7Ccrr9KOUaq+gczuKvKY/+94pa+OontW9UpX3UV3ruTVjk4Q3b2CV/s5TTSHbvx9
B2c4uotTRHNR4B/VQ3fRjEj+Uft3F82J5B/dQWfRvEj+0R10FM1LgX9VD9manU2zUuqYzn1KftqR
oncZ2YvOpeYMmU0fv2KgJrqjk32i6E47WUVkFppBR/5KtxMlmgXt7orageag6l8U3bmqnzs6XXTf
9vc7rBC9b7T/AUzTPD0AAAEA
H4sIAAAAAAAACu2T22prQQxD91P//5NLHgohNMlcbC95tgSihXP2WNZyf67r+rFt27Zt27Zt27Zt27bl/Z/oTDbD/U90Npvj/vfTPs/fROezazi/E53b5thfAtltjv0lkN9muF8CO9gcfzq/ncN55Bt6JzuW+Yzo3WyG+yWwn73HfPdG6F3tee6j373+2/P/p3e157XzDr2rvcY+6i16XzuPVdQ7NsOdzmabvV3H/Fl0TptjfwlktTn2l0Bem2N/CWS2c5mP3gW9hx3P/k8j39C72DH8d2+G3sleZxj1zspbNsf9SnozaoatyX7lBiLm2ftsqudVZrAZ9iv3QHd0ohW7/ia6sxOs3u830fk6u0unI6IzdnOnHkdF5+zgrt3NiM6q5u59rYjOTPukjlZF51buic5awZ/cuSqP4u6q/J/VNU/Wuyq+nn6+/p4lBf6Rohkq/V2NqEvOUdEcM9hn9m7+Ou6wQ4V25tD9RHRK56H574ruaKVTOgO9f6bo/ez4W9j9xtb3J63ezac3ojI/56E77O53WrmZT8rKS/fX3e+08+03ReRbecuOv4GdeyAyRu9QkanTDax2OfutGvPMfJ1vQLXfKtFMIzupmPFp9k4WSjRTxRuIYNKB/Z9oppF8yNtbzaEgmmU0D2reynwF0Sw73MCMzJ+/gYw5o7zMn7+Bylvbma0gml8WF4L97FwFrWSlmY/0WHVjO/MUNJuVZj3LJ3vGziwFncC/6gY+zTJ/8zf/+96A+fOO2HN1ZkbmCq3kpDtb6ZO+TcUbWM2YsVt2nzTju/GvyjUzm+asdgM7+ap2yeqT5q1wAxn8szLO5u14A9WK5l+hjE5p7gT/3Wxd+He7gewuo/J04t/1BiJ7jc5AsP80P7JHmnfUHWTO7sh/JjPNWs3f+iGV9fdEd67kkW4oRe4V/f4pHumEUvRuWXM6e6QLBWXfAs1Bhf+7Lmhl7Ro9o5tHe6CVvXPWLHWP7k+rkn/GTFWP7q6iqv0jZmXmruZ/8g2M7pbZ7W7215kn83+I4L86Nyt/RMaZN9SkfgOk7sD/oegbmNlVjf/Py+934P9Q1g3M7qzS2e5+Kvc8K5U7oBS1V+cOHrrbHUTu0233/5TJP6KPqC4zdjiB/0NVN0D2Us2/2w08VHkHlf1k5VXaMUrVN5DZXUUe87+PV/rqKLpnVa901V1050pe7egE0d0reLWf00Rz6Mbfd3CGo7s4RTQXBf5RPXQXzYjkH7V/d9GcSP7RHXQXzYziH71/V9HMaP5VHaiKZqbQMZ2bvBF6Z9X+6F2q7oLeTb2n1Zl0F3f0fwzURHd0sk8U3Wknq4jMQjPoyF/pdqJEs6DdXVE70BxUfUfRnav6taPTRfdtf7/DCtH7RvsXoMjHOgAAAQA=
</data>
</layer>
<layer name="protection" width="128" height="128" visible="0">
<layer id="8" name="protection" width="128" height="128" visible="0">
<data encoding="base64" compression="gzip">
H4sIAAAAAAAAAO3BAQEAAACAkP6v7ggKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAauuOl9cAAAEA
H4sIAAAAAAAACu3BAQEAAACAkP6v7ggKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAauuOl9cAAAEA
</data>
</layer>
</map>

View file

Before

Width:  |  Height:  |  Size: 3.2 KiB

After

Width:  |  Height:  |  Size: 3.2 KiB

Before After
Before After

File diff suppressed because one or more lines are too long

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<map version="1.9" tiledversion="1.9.2" orientation="orthogonal" renderorder="right-down" width="128" height="128" tilewidth="32" tileheight="32" infinite="0" nextlayerid="9" nextobjectid="1">
<tileset firstgid="1" name="../../tileset/ground/ground.png" tilewidth="32" tileheight="32" tilecount="33" columns="3">
<map version="1.10" tiledversion="1.10.2" orientation="orthogonal" renderorder="right-down" width="128" height="128" tilewidth="32" tileheight="32" infinite="0" nextlayerid="10" nextobjectid="1">
<tileset firstgid="1" name="ground" tilewidth="32" tileheight="32" tilecount="33" columns="3">
<image source="../../tileset/ground/ground.png" trans="ffffff" width="96" height="352"/>
</tileset>
<tileset firstgid="34" name="../../tileset/ground/ridge/earth_dark.png" tilewidth="32" tileheight="32" tilecount="96" columns="12">
@ -36,101 +36,111 @@
<tileset firstgid="268" name="palm_tree" tilewidth="32" tileheight="32" tilecount="6" columns="2">
<image source="../../tileset/plant/tree/palm_tree.png" width="64" height="96"/>
</tileset>
<tileset firstgid="274" name="Untitled" tilewidth="32" tileheight="32" tilecount="25" columns="5">
<tileset firstgid="274" name="tree_blue" tilewidth="32" tileheight="32" tilecount="25" columns="5">
<image source="../../tileset/plant/tree/tree_blue.png" width="160" height="160"/>
</tileset>
<tileset firstgid="299" name="Untitled" tilewidth="32" tileheight="32" tilecount="24" columns="4">
<tileset firstgid="299" name="tree_golden_large" tilewidth="32" tileheight="32" tilecount="24" columns="4">
<image source="../../tileset/plant/tree/tree_golden_large.png" width="128" height="192"/>
</tileset>
<tileset firstgid="323" name="Untitled" tilewidth="32" tileheight="32" tilecount="6" columns="2">
<tileset firstgid="323" name="tree_golden_small" tilewidth="32" tileheight="32" tilecount="6" columns="2">
<image source="../../tileset/plant/tree/tree_golden_small.png" width="64" height="96"/>
</tileset>
<tileset firstgid="329" name="Untitled" tilewidth="32" tileheight="32" tilecount="6" columns="2">
<tileset firstgid="329" name="green_stone_2" tilewidth="32" tileheight="32" tilecount="6" columns="2">
<image source="../../tileset/item/statue/green_stone_2.png" width="64" height="96"/>
</tileset>
<tileset firstgid="335" name="Untitled" tilewidth="32" tileheight="32" tilecount="4" columns="2">
<tileset firstgid="335" name="blue_circle" tilewidth="32" tileheight="32" tilecount="4" columns="2">
<image source="../../tileset/building/decoration/blue_circle.png" width="64" height="64"/>
</tileset>
<tileset firstgid="339" name="logic/creature/naga" tilewidth="32" tileheight="32" tilecount="4" columns="4">
<image source="../../tileset/logic/creature/naga.png" width="128" height="32"/>
</tileset>
<tileset firstgid="343" name="Untitled" tilewidth="32" tileheight="32" tilecount="8" columns="2">
<tileset firstgid="343" name="daisy_white" tilewidth="32" tileheight="32" tilecount="8" columns="2">
<image source="../../tileset/plant/flower/daisy_white.png" width="64" height="128"/>
</tileset>
<tileset firstgid="351" name="Untitled" tilewidth="32" tileheight="32" tilecount="8" columns="2">
<tileset firstgid="351" name="daisy_yellow" tilewidth="32" tileheight="32" tilecount="8" columns="2">
<image source="../../tileset/plant/flower/daisy_yellow.png" width="64" height="128"/>
</tileset>
<tileset firstgid="359" name="Untitled" tilewidth="32" tileheight="32" tilecount="4" columns="2">
<tileset firstgid="359" name="stump_pale_brown" tilewidth="32" tileheight="32" tilecount="4" columns="2">
<image source="../../tileset/plant/stump/stump_pale_brown.png" width="64" height="64"/>
</tileset>
<tileset firstgid="363" name="Untitled" tilewidth="32" tileheight="32" tilecount="4" columns="2">
<tileset firstgid="363" name="stump_brown" tilewidth="32" tileheight="32" tilecount="4" columns="2">
<image source="../../tileset/plant/stump/stump_brown.png" width="64" height="64"/>
<tile id="0">
<properties>
<property name="foo" value="foo"/>
</properties>
</tile>
</tileset>
<tileset firstgid="367" name="Untitled" tilewidth="32" tileheight="32" tilecount="18" columns="3">
<tileset firstgid="367" name="floor_sparkle" tilewidth="32" tileheight="32" tilecount="18" columns="3">
<image source="../../tileset/building/decoration/floor_sparkle.png" width="96" height="192"/>
</tileset>
<tileset firstgid="385" name="Untitled" tilewidth="32" tileheight="32" tilecount="3" columns="1">
<tileset firstgid="385" name="green_stone_3" tilewidth="32" tileheight="32" tilecount="3" columns="1">
<image source="../../tileset/item/statue/green_stone_3.png" width="32" height="96"/>
</tileset>
<tileset firstgid="388" name="Untitled" tilewidth="32" tileheight="32" tilecount="3" columns="1">
<tileset firstgid="388" name="vine" tilewidth="32" tileheight="32" tilecount="3" columns="1">
<image source="../../tileset/plant/vine.png" width="32" height="96"/>
</tileset>
<tileset firstgid="391" name="clouds" tilewidth="32" tileheight="32" tilecount="16" columns="4">
<image source="../../tileset/sky/cloud/clouds.png" width="128" height="128"/>
<tileset firstgid="391" name="clouds" tilewidth="32" tileheight="32" tilecount="32" columns="4">
<image source="../../tileset/sky/cloud/clouds.png" width="128" height="256"/>
</tileset>
<tileset firstgid="407" name="logic/creature/fairy" tilewidth="32" tileheight="32" tilecount="4" columns="4">
<tileset firstgid="423" name="logic/creature/fairy" tilewidth="32" tileheight="32" tilecount="4" columns="4">
<image source="../../tileset/logic/creature/fairy.png" width="128" height="32"/>
</tileset>
<tileset firstgid="411" name="logic/creature/demon" tilewidth="32" tileheight="32" tilecount="7" columns="7">
<tileset firstgid="427" name="logic/creature/demon" tilewidth="32" tileheight="32" tilecount="7" columns="7">
<image source="../../tileset/logic/creature/demon.png" width="224" height="32"/>
</tileset>
<tileset firstgid="418" name="logic/creature/elemental" tilewidth="32" tileheight="32" tilecount="16" columns="8">
<tileset firstgid="434" name="logic/creature/elemental" tilewidth="32" tileheight="32" tilecount="16" columns="8">
<image source="../../tileset/logic/creature/elemental.png" width="256" height="64"/>
</tileset>
<tileset firstgid="434" name="suspension bridge" tilewidth="32" tileheight="32" tilecount="24" columns="3">
<tileset firstgid="450" name="suspension bridge" tilewidth="32" tileheight="32" tilecount="24" columns="3">
<image source="../../tileset/object/suspension_bridge.png" width="96" height="256"/>
</tileset>
<tileset firstgid="458" name="logic/creature/angel" tilewidth="32" tileheight="32" tilecount="6" columns="6">
<tileset firstgid="474" name="logic/creature/angel" tilewidth="32" tileheight="32" tilecount="6" columns="6">
<image source="../../tileset/logic/creature/angel.png" width="192" height="32"/>
</tileset>
<layer id="9" name="0_floor_parallax" width="128" height="128" visible="0">
<data encoding="base64" compression="gzip">
H4sIAAAAAAAACu1d2W4dKRBtz/L3Y8l5cjJOxk5m+c65Jd2SCWYpoBYKOFLp5iFJA+ecYmmgr+vg4ODg4ODg4Gc8P1zX53t8Ef7988G6tgchgPvvt/jl0om3iTXA6QP885eJ6wt4vZXtSZH/kgZa25+zbSV9MKvmtb2P8Xh75l9Re/SW5W1AB8+BlqTbYTYNWHEP8en23B9BW3CU5S3gstTOmpznykgppzQg7/9hyH/o/xfmspT6FyvN58ppNa54Mej3MR4j/3OPQTj7l5ljpE+xGPdhSPs/7l8knjFL9GrAqj0AX2/P/U/Z/5Z6n1EDVu0Rcw84/tfXwN+3v/tNuT0AMS+A439bDXy6h7Q/Ut4Py3ExPSceX0g8Y9bo0cA/97aR9Acg5X0Epz9T+R/rqp3zPGhAo21y3pd6fq4NjgbykFoTApS8j9DWwMVcz5kiNQaqQWJNCFDzflwGLg2W2mD1PJDrA0vgHiMDWriXKEMpD66sgR7/x+3xe2Mg8N+3cg+QmKeXNLDqukCP/wGogaf7nLD3t4d7gNQ8PaeBVdcFevyPwDnhvwO/PdwDJP2Y0sDx/1yQ9GPKE6vyT/V/uB/Cel+b9DvalCdWzf81/yPvI+3NuadJ6/18XOZV5wAl/2Nbc+S9t4e2/JHLJ1p7M3Z5N5Tz/4r7YEbbZcX1wJz/Vx3vjLZLqAGEdVlHIuf/FXMdR7sA4rWPa4Ly9gZF59ZlnKldwvbBNQzP7UTRude6SbXLSu1E0bnXukm2yyrtRNH5qnPf0XbJtdM1QfmpQdX5i7N6WfAP8OYVSj13WwsA9L6XBHjSAMX/O60FAEa4R3jRAMX/u6wFADi4R3jQAMX/HuoxyjuAk3tEar2QCo26U8c5cT2sOWvhNQdcvxvZh0RB716pFCw1n1r35C4XV1D2neH63cg+JCp69kqFZ65KGultmx7Nx+ueJa1Swc37V0LbSvPNAYpmQg5KPKR0zzHGTZVjJM+N8u6FWy6EHOR44OScUo6ePNeTR8L67cZ7DikeZm+XXB6h9t+z188zwn2fHHd71vYBxvnMc//tHbju+9vFF7Pdb1cDRf8z3NPGDQnuZ9RAjV9oA+q5NurdgrNDkvtQA619AzeeG/ltiZk03gp83yPJv3VekOTeswY0vJ+LkbOIPXXs5fXXKFbRgCX3EFpnEXEvCwf3FC140YAl95r+L/Ff45cS8f/p5YytRZ9v4f/XDP8c3Oc04CEHPG3g/1zfT+G09g7Cuwas+Zfyf3yXP5X7nvdQnjVgmf8BEnswamN9Tu5T/HvSgJX/AZzc1/xe439k/4Hn8YCm/0Nwc0+d23Py3poDtOY6LdDwP0Li/S2Ve27P94wDZpwTavgfMFOul+Cewv9u/rf0uzX3u/tfe1zPMZfnGPPl+L+E2mQUEv6XynN4B3Ur91p+L3l/Ru4BEv6XynN4B732uI7Ce64PAszKPcC7/2f0uhfuAav5X7pPp3A+es+1Jrz5X4r/Ud4hPJ5N8O5/Dg2M8h7mei+8I7z5nzL+lxzPhXyH8JDrU5DwvxT/Of+3amDE64inB1/9fA4S/pfK/6n+v3UeOMJ7fA5thXNJUut/Eu86XzP5n7r+N+L3Wc8e4ruQ1HkWyvkKyfc/3BoI7yPh4L/F7xqct35vA99/lepY4wDbcwUNULVQG9vheq2G3+N3mSN5rEcDYXuurgEK78i9lt+lOO/RgBT/VhqIdVAbz2vnei3ud9cAlXetsZ0F9zNo4FFgXhjfUUfh3uI+EY1+nhLUu9+95ICwzOF9QiXutddpLf0eB2VtRvIsuNTaYOlestjvmvP3mbin+B+A6ywS/GvsgYvvw7Jat5mNe6r/JeeEM+6B5UC8Dvd5Qu6p/gdIjQNm3AM7ihl9PuJ/hMQ4YBX/zzKel/I/QGIcsIL/Pfl9xP/c/AM8vysHeOa+1f/cYwDvud87963+B3BqwDP/K3Df6n8E1zjQa9+/Cvc9/gdwjAMAlL4/NY+m/I7eJVrae7EK973+H+UfQOV+5D663ncLK/lbwv8j37MCaHDfq4GduO/1P6D3e1aa3LdqYDfue/2P6Pneizb3LfMMHNdac6Ids9xDJXX3MFXjOK6x5kM7ZpiHS987XdP4jrkfw3oe3st9fJantw/YmXtr/3NxX9NASeO79vu9/u9dk0l9L6k353Pyv2u/T/V/zLf1NwJKZ3lb8//uub/mf+vvgdT4HvH/4b7sf2/ct/j/cP8eJW944p7q/8P9z5Hzxoz8jvr/cP8xUt6YmeNW7kP/7z7XS0Xof+q7XU1eOfjHOu4+10tF6H+K9615Hun/j/8/RvhOtuZ9a36P/+W498x/LWcd/3+M1Ly/tq9TkzPqcyn//vj/Y6Tm/dR9vdJ8cwfmueP/9+jxf68GrHiHOoZ93PH/e4z4v0UHlr6P6xjuXbVuf8sApPZiSt/5pB2pOqIGrDmwjNw+XI17vzTj7Pmgc4+w1gDuFZfwPmLXcQD1vLWmBlJ3MpXubRrlHrCj/1vP2ktroHZ3eu7epm93HeDdbj1nTHbjv/eeBSkNjNy5lzt30nKv1+r5H8B1h23urFdvrp/hzo+V54EA7rtMU56jnv+zvG+xhNQ5Vk2OYoz+H9p3VlPP/834nQxELrdR0Hr2leKRFqTGPbO288xoyW2peQrHLzWnlp5/eOcDxxiT87kecunBwYFv/A9wD36dAAABAA==
</data>
</layer>
<layer id="1" name="0_floor" width="128" height="128">
<data encoding="base64" compression="gzip">
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
</data>
</layer>
<layer id="2" name="1_terrain" width="128" height="128">
<data encoding="base64" compression="gzip">
H4sIAAAAAAAAA+1dua5eNRA+eQN4BJYQaNhKNkFDAgKE2OorJESBaGioISwdCFEDLTQgsUgoSEAHFIgCeB9s6R8wzow9q+1zcz5plOTmv//x8TczHo/t8bYdOHDgwIEDBw78H7cmuS3J7cFyMckdg97pAB93J7knyb3Bcl+S+7d1dSDCDlbX+fzODyR5cMCzXtv+0wGqLZL+9+zb/OwIO1hZ58t3fn3QMx9O8kinLZK+fWXT6wHo28Utrh9KnV9NB0Zzn0Hxr2lL7tvSxoDLVj9jnIM+SZ5904Vtu/kCv51lG1cZF1p+/yfjd1O/T/FvGYNAD0pdwID5GA7n1r6o21jr7Ky4QtLnHn2Q4cF/qy3U92fM8HcUan2YEVeMivsAl5I8keRJZls0Otfif/T7RsIjruj1x+U0vl0hxriam9ZnM4D7F5O8pGgLF6P5l8QB3rDqwONJLie5cpKX/Zp2HTIvT2049xkcbjj+wIt/eBbFr9d4aIVFB55L8nySF06SdUGrA63+aPl9AOii5vk/Fvy0+K+f8bPAbi12Dr+b+6jVT9pnWHXg7CTPbjHjY8/2oR0ez2/xn5/x5mbTcyso/q3jiEc8gNmg1c9xbL/1fCmAf6oPZutA5Lhh1QEvGyzBsf3y+RQ3db+9RdgKpw9G6MDTqX3POMaFXL3p5dh78IyRJbYP8NBBTh9IdKDX9xqb1uoHZ5xojYE9ePHfm+9Ft6E3DmRwdWCVWB8D1jYL//WcUCta7jO0/Jd9wR0LPfyNt6+3wsJ/PSfUipb7DC8fxNWBVfKCnLlhtP/PKOeEWtFyn+HJB0cH6ufNyul5+REr/7NB8a8dh3vxIPa8mXldK/bMf2s/kiUO88gLa3VidPwo4V+75y1i/0LkfqTWfMAj77QSuPxb9rx572myct/LrbfGgIi8l2Ust/iL/Ls9/sHmX930/Q39mfffeeyTtbSFC8naEIWVcwGAHv+lzVv627qHpZbofTnctaER6+GAiNxBj/9evLMHHdeg1y+gA9z1cCweXKHveu953uIdLjhxUZn7oHLD0nmA11ySq1tcPZ+hA9S6XQTq/pLOi0f3U9lei85w9Vz6blz9oz5njWutv6PJi8zeL6AB9z2l77bC2GaBNi+2Nx2QvGfE3JcLqz5hY4n2bEAPPR2Q7hHwigmw75G+5yrrX5HQ7EWpwfUDs9cOJPyvdCamB62/sOxFqbHKWNDSMQn/GtsfGcNb4ck9YBUdoCDhv5cLkNjcCvFh5ttrH1ILWL6QK9E6I43/ZuQ9Nai5pfadee1D6qHOF3KFozNSDsq+0ey5rfOe3rpg8Q3wbjW31L6zs81nHxIHmr1SHJ2pdQTjoebcovN13lOiq1od7ulEzXvNLSbRfHuAozO1jmA81JzD73rEuFQ7tH6O60cwnYZ32wO3Xqh1BOPBk3NuOySi8SOYTt9IvFPAeFi9XzR+ZIROHxgPrh85OB8Dz1qHK9SyOsCHd63DVevbtcDV//Om2xF7rFescdjiF6v919NtTm3BPWBEncuy32f0Gde/cfoAqy24Vx2IrvWL7Qe21CLQIPIMyYp+jouIfvmQ8ZnRZ9Es7/hLkl9P8hvxmT3qwIw6z4DR/Gv9W+b+8+LfX2y0LlhrrIwGh/sPN549S7EK/6VtY1JyX69LZF2odYBTX2QVSGyCqwOtz33PrMcXgfpdr1243rZL/JDk045c267XgT2NAzP3943kH/NzwD3YdM33Z4zv/WTbtw5Q/EfXrfHYc9lD6/6G2u4z9xy+MXx0+nOPOjDS/uv128j9N61a/pjda7nP+Kj4+950wIN/TnwI9h6594p7X8vvpz/B32PcS/YkwRgAv9PSgdUQaf+YvZ9t/mt5krs7wPa5Nn9LGgNvTXJbktuTXCTGRNABwB/V/69adyeK/xH2nsHNX8AcT8J9RrbpS4nzO5PcdaHtF8pxYM/8U7685ePL/yv31Z9tMfbO9fUl7xnWsb6F88I/Bck4P8Leub4+ozXWe+DdJN9u//mHkv8Rcx0tvP2/pKa3BpS9Yzk88PUc3t8QnhfNfL9XyLfF/32V5O/T36PtwQrv/F+0n8Pai9k5N4ejPXtQ+vrM91+F7IX7jAj7H8l/zb3Uv0v5B7sHey9tHVCeTViZ+wwv/sE3jOY/z+WBw4+Dnln6+sx7ae8l99iZlJW5z2jxj/n73txgBv8ALv+Uzddjej22A++1vWeU8909nU2o+1O71juL/z+TfHn6e81/5pmbv4H4HUOL94x6vrsH3gF7H/8zwAd8l+Qd5HfK/A2Gmnsqnvv3+7Yx58hHYO/jf0bLB/SAcU/59xnnyKPhvf4zg/+Mng8oUcdzGdyxfcY58khY+a/3CUTvfWrxD3FdSwcoX9/y8ZG57NnwHv+j17upmjS/V//OOuARy6/u33tnWXocRNT7jdQBqr5SjgEgXvsS+T2ANJbPMop7zblLqI2vPXsXVa9qhg4AyngwI48LHN5nxPLYWqZXbXzJPXfnUQdKX1Cvx2ZQ9URGcs9dy9TiRtaBDNCDVp52Rs7O+9xNK2e3kg54Q1KjrlUzamR8N+PMFZcDjg5o8sOR88JWjTqsftCMPK1kz1LEWasMSe1377rf0XtgOfWEZuXnR4zzFMq7z6Jr//Ywag8cVU9oxhw+2tdL9i9Ya/9azwStugcyCi3uo3x8C9rav5xYsH4f7P3OM/917oYzzmvA0RvqM5o7jixxQN2O88p/q6aMlHuo3R9xR4Sm/z3jgPPEvySe9wLH9r3vuPHif+U98FLMjOd78Obfa30o+lzAKFjj+RlxH2DmHXfnwfdHzuXK+JFbF096l5TljjtrPmjv/FPcW+wZfHU9nkStl1g4sMQBex/7JXYvtUnsu6PWzGbwLz0Dpa09ba0lSj03Mr5v6RVWM9X6jhb+IQ6U3vMi5V67B8JiL5znenHfmzeW+fq6Zqp1/cTjjlPpPS8a7jV9rfWZ0fn5Mj6wzhutMZT19zX3vURzX/avZo3Rwr1krPfQM4o/bjtWrEvZ6xdpfD36fmNoXyvv4uVj4N2oZ/X0YLU6VBG+V6LjnjXPy7lc1DqQh/2uMg/ncg/2hdVivYZ8nqvj2POtuTmvdaDLyYavIHbsYb8r8C+1e6quQ1lzreSO847efmfUnr7ZMaAVmn5qnen8APkZ5x17fl+axxnBvSWPZj2f6XEfmGYsxGz/asGLhn/JuM/Vg+g6ul61hLj8lzknz/vAqLGQGud79Xyk/Efkcq1xJGcPn9f6qWRsjMh/taCp31Tzn/WIekcu95I9lXsZ97nfM+pMSg0O92VuFMC1/yieWt9JxfEajOA/8lxC7y4NbV1ODv+RNmrx+w8l3XiYqR/1O2m5oPj36J8Wx1F1Vzn8R/rncn+UtJbgo4n7xxj8c+J+eHYvZsH47/UP5x6cSI4p5FoeX5/+3pr/R8bmUWcmAd41RDH+sRpwgMh62RQoO6p/nvM/3yOfs/Cv8asR5+Ui6hFgfqRl+9I6+Z6f46Kswwt3i7X4vxZ0p5F1f1TrrGqPe848lfIjrXaXeberjbsPsLh8BKiajSP9v+UZWB0Cy1nVlh5Q+QOq3Vq/P0oPMO6pHOcI/rH9UTkeuFR9Dn5G1SEA8d4nT8X9VN98k+R95ndzOX87ydWTYLW5QDj1+6hardgYN4J/bH/U5VNbSsDPRp9H5/Jfxj9QQ42rBzXqespftz/+L7LuXW1Ij/veGCeN8TC/iul8vT/qzVNbSsDPzraxZ2Gk9l+CU1OzRjk3K8G9Q0iC0u9jY5zmDBPWllIPOD7vOaQt2M880Oq7Vv6A2zfgCzh6QHEfidY7Rs/RV0YvfyCt90PV1dT4eWhfr24T1o4avfUxeM+WrxsRu46cJ3FzR5H2UXOG1U7v1W2q24R9J2dfBDbWzZi3ckDN5bhjpDRvOCKPSdVOP9vadZt650647znzrnMupPuOMGhzxrUOSOIxTvzRq51OnS/onTvhvuce+NfC625trJ4iZ3zG+K9z2GeGNp01hPud0fx72K4G3vXKqbNe0vN/q92DJZkHjq7ToHkeZl9ZPPoasznp+b/V7kPS+rYMbI3GQ7ixlnWNyAPS83+r8F5C69uwNRoP4fpUrzWiAzrfhq3ReAjXp45YI7qR4RVjej83+vkHDhw4cODGxD9BZxvPAAABAA==
H4sIAAAAAAAACu1dua5eNRA+eQN4BJYQaNhKNkFDAgKE2OorJESBaGioISwdCFEDLTQgsUgICkoWiUUC3gdb+geMM2PPavvcnE8aJbn57398/M2Mx2N7vG0HDhw4cODAgQP/x81Jbklya7BcTHLboHc6wMedSe5Kcnew3JPk3m1dHYiwg9V1Pr/zfUnuH/CsV7b/dIBqi6T/Pfs2PzvCDlbW+fKdXx30zAeTPNRpi6RvX9r0egD6dnGL64dS51fTgdHcZ1D8a9qS+7a0MeCy1c8Y56BPkmffcGHbbrzAb2fZxlXGhZbf/8H43dTvU/xbxiDQg1IXMGA+hsO5tS/qNtY6OyuukPS5Rx9kePDfagv1/Rkz/B2FWh9mxBWj4j7ApSSPJXmc2RaNzrX4H/2+kfCIK3r9cTmNb1eIMa7mpvXZDOD++SQvKNrCxWj+JXGAN6w68GiSy0munORFv6Zdg8zLExvOfQaHG44/8OIfnkXx6zUeWmHRgWeSPJvkuZNkXdDqQKs/Wn4fALqoef5vBT8t/utn/CGwW4udw+/mPmr1k/YZVh04O8nTW8z42LN9aIfH81v852e8vtn03AqKf+s44hEPYDZo9XMc2289Xwrgn+qD2ToQOW5YdcDLBktwbL98PsVN3W9vELbC6YMROvBkat9TjnEhV296OfYePGNkie0DPHSQ0wcSHej1vcamtfrBGSdaY2APXvz35nvRbeiNAxlcHVgl1seAtc3Cfz0n1IqW+wwt/2VfcMdCD3/j7eutsPBfzwm1ouU+w8sHcXVglbwgZ24Y7f8zyjmhVrTcZ3jywdGB+nmzcnpefsTK/2xQ/GvH4V48iD1vZl7Xij3z39qPZInDPPLCWp0YHT9K+NfueYvYvxC5H6k1H/DIO60ELv+WPW/ee5qs3Pdy660xICLvZRnLLf4i/26Pf7D5lzd9f0N/5v13HvtkLW3hQrI2RGHlXACgx39p85b+tu5hqSV6Xw53bWjEejggInfQ478X7+xBxzXo9QvoAHc9HIsHV+i73nuet3iHC05cVOY+qNywdB7gNZfk6hZXz2foALVuF4G6v6Tz4tH9VLbXojNcPZe+G1f/qM9Z41rr72jyIrP3C2jAfU/pu60wtlmgzYvtTQck7xkx9+XCqk/YWKI9G9BDTwekewS8YgLse6Tvucr6VyQ0e1FqcP3A7LUDCf8rnYnpQesvLHtRaqwyFrR0TMK/xvZHxvBWeHIPWEUHKEj47+UCJDa3QnyY+fbah9QCli/kSrTOSOO/GXlPDWpuqX1nXvuQeqjzhVzh6IyUg7JvNHtu67ynty5YfAO8W80tte/sbPPZh8SBZq8UR2dqHcF4qDm36Hyd95ToqlaHezpR815zi0k03x7g6EytIxgPNefwux4xLtUOrZ/j+hFMp+Hd9sCtF2odwXjw5JzbDolo/Aim09cT7xQwHlbvF40fGaHTB8aD60cOzsfAs9bhCrWsDvDhXetw1fp2LXD1/7zpdsQe6xVrHLb4xWr/9XSbU1twDxhR57Ls9xl9xvVvnD7AagvuVQeia/1i+4EttQg0iDxDsqKf4yKiX95nfGb0WTTLO/6Y5KeT/Ex8Zo86MKPOM2A0/1r/lrn/tPj3ZxutC9YaK6PB4f79jWfPUqzCf2nbmJTc1+sSWRdqHeDUF1kFEpvg6kDrcz8x6/FFoH7XXy5ca9slvk/ycUe+267VgT2NAzP3943kH/NzwD3YdM33J4zv/Wjbtw5Q/EfXrfHYc9lD6/6G2u4z9xy+MXxw+nOPOjDS/uv128j9N61a/pjda7nP+KD4+950wIN/TnwI9h6594p7X8uvpz/B32PcS/YkwRgAv9PSgdUQaf+YvZ9t/mt5krs7wPa5Nn9TGgNvTnJLkluTXCTGRNABwO/V/69adyeK/xH2nsHNX8AcT8J9RrbpS4nz25PccaHtF8pxYM/8U7685ePL/yv31Z9tMfbO9fUl7xnWsb6F88I/Bck4P8Leub4+ozXWe+DtJF9v//mHkv8Rcx0tvP2/pKa3BpS9Yzk88PUc3l8TnhfNfL9TyNfF/32R5O/T36PtwQrv/F+0n8Pai9k5N4ejPXtQ+vrM91+F7IX7jAj7H8l/zb3Uv0v5B7sHey9tHVCeTViZ+wwv/sE3jOY/z+WBww+Dnln6+sx7ae8l99iZlJW5z2jxj/n73txgBv8ALv+Uzddjej22A++1vWeU8909nU2o+1O71juL/z+TfH76e81/5pmbv4H4HUOL94x6vrsH3gF7H/8zwAd8k+Qt5HfK/A2Gmnsqnvv3+7Yx58hHYO/jf0bLB/SAcU/59xnnyKPhvf4zg/+Mng8oUcdzGdyxfcY58khY+a/3CUTvfWrxD3FdSwcoX9/y8ZG57NnwHv+j17upmjS/Vv/OOuARy6/u33tnWXocRNT7jdQBqr5SjgEgXvsc+T2ANJbPMop7zblLqI2vPXsXVa9qhg4AyngwI48LHN5nxPLYWqZXbXzJPXfnUQdKX1Cvx2ZQ9URGcs9dy9TietaBDNCDVp52Rs7O+9xNK2e3kg54Q1KjrlUzamR8N+PMFZcDjg5o8sOR88JWjTqsftCMPK1kz1LEWasMSe1377rf0XtgOfWEZuXnR4zzFMq7z6Jr//Ywag8cVU9oxhw+2tdL9i9Ya/9azwStugcyCi3uo3x8C9rav5xYsH4f7P3OM/917oYzzmvA0RvqM5o7jixxQN2O88p/q6aMlHuo3R9xR4Sm/z3jgPPEvySe9wLH9r3vuPHif+U98FLMjOd78Obfa30o+lzAKFjj+RlxH2DmHXfnwfdHzuXK+JFbF096l5TljjtrPmjv/FPcW+wZfHU9nkStl1g4sMQBex/7JXYvtUnsu6PWzGbwLz0Dpa09ba0lSj03Mr5v6RVWM9X6jhb+IQ6U3vMi5V67B8JiL5znenHfmzeW+fq6Zqp1/cTjjlPpPS8a7jV9rfWZ0fn5Mj6wzhutMZT19zX3vURzX/avZo3Rwr1krPfQM4o/bjtWrEvZ6xdpfD36fmNoXyvv4uVj4N2oZ/X0YLU6VBG+V6LjnjXPy7lc1DqQh/2uMg/ncg/2hdVi/Q75PFfHsedbc3Ne60CXkw1fQezYw35X4F9q91Rdh7LmWskd5x29/c6oPX2zY0ArNP3UOtP5HvIzzjv2/L40jzOCe0sezXo+0+M+MM1YiNn+1YIXDf+ScZ+rB9F1dL1qCXH5L3NOnveBUWMhNc736vlI+Y/I5VrjSM4ePq/1U8nYGJH/akFTv6nmP+sR9Y5c7iV7Kvcy7nO/Z9SZlBoc7svcKIBr/1E8tb6TiuM1GMF/5LmE3l0a2rqcHP4jbdTi9x9IuvEgUz/qd9JyQfHv0T8tjqPqrnL4j/TP5f4oaS3BhxP3jzD458T98OxezILx3+sfzj04kRxTyLU8vjz9vTX/j4zNo85MArxriGL8YzXgAJH1silQdlT/POd/vkU+Z+Ff41cjzstF1CPA/EjL9qV18j0/x0VZhxfuFmvx/0vQnUbW/VGts6o97jnzVMqPtNpd5t2uNu4+wOLyEaBqNo70/5ZnYHUILGdVW3pA5Q+odmv9/ig9wLincpwj+Mf2R+V44FL1OfgZVYcAxHufPBX3U33zVZJ3md/N5fzNJFdPgtXmAuHU76NqtWJj3Aj+sf1Rl09tKQE/G30enct/Gf9ADTWuHtSo6yl/2f74v8i6d7UhPe57Y5w0xsP8Kqbz9f6o109tKQE/O9vGnoWR2n8JTk3NGuXcrAT3DiEJSr+PjXGaM0xYW0o94Pi8Z5C2YD/zQKvvWvkDbt+AL+DoAcV9JFrvGD1HXxm9/IG03g9VV1Pj56F9vbpNWDtq9NbH4D1bvm5E7DpynsTNHUXaR80ZVju9V7epbhP2nZx9EdhYN2PeygE1l+OOkdK84Yg8JlU7/Wxr123qnTvhvufMu865kO47wqDNGdc6IInHOPFHr3Y6db6gd+6E+5574F8Lr7u1sXqKnPEZ47/OYZ8Z2nTWEO53RvPvYbsaeNcrp856Sc//rXYPlmQeOLpOg+Z5mH1l8ehrzOak5/9Wuw9J69sysDUaD+HGWtY1Ig9Iz/+twnsJrW/D1mg8hOtTvdaIDuh8G7ZG4yFcnzpijeh6hleM6f3c6OcfOHDgwIHrE/8ACmvfEwAAAQA=
</data>
</layer>
<layer id="3" name="2_object" width="128" height="128">
<data encoding="base64" compression="gzip">
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
</data>
</layer>
<layer id="4" name="3_roof" width="128" height="128">
<data encoding="base64" compression="gzip">
H4sIAAAAAAAAA+3cyW7UQBAGYOfOIrGFHR6AiBB2kLhkkVieitdK8m5UDpa4xLE9Xtpd3yfVZTQTefx3V7edmWkaAAAAxrq11zS399Y+CtZyJ7K/K3+gUsfR30569rghz61JzfuA03hfZz3f25DnbslN+doH1K3Nd5d53ve1NfeSOZ3HObsYUZcDzvUu87zva/USqMPPmMe/zOW0fkf2fzryHzs+7BHqcNP4uI49Qnn0+tzGzuUh2r6v/89vrXPc1Ufavq//z2+tc7xEH2E8vTc3vZe+XBPkZi2nD31iu6bYD+oT29Pm3nc/6LqhLkOvA8ZcNxgzubnWhHpN1d+tE+Xpk8lU/d06UZ4lMjHvczPvAQAAAAAAAAAgN989y813z6Bp7sUcuB/1IOph1CNzIpX9yPtx1JOop1HP5J/K88j7RdTLqFdRr+UPAABQJPdvcnP/Jjf3bwDm4XMCufmcAAAAAEA93OvLzb0+mJ/f78/N7/cD0MU+ITf7hPKYk7mZkwD1K2WtL+U4sillrW+PwzjIrZTxyG6OI8MTOaZ1GtmfyX9V1tLc7KnK9XehPK6yt6fKa+7s38TfPjC2qtW1j38bjx9GvYs6Mgaq1LWPfx+Pf4j6GPVJ/ul8jsy/RH2N+jZh/var2/D9v4x+TJiX/SrkoufntsS9qqXuuTCetR+mZ33Nzf+CuGJ9BZZgrcmpzd1ak5Pct0vPzs3cBQAAAKA0/wDK3sJsAAABAA==
H4sIAAAAAAAACu3cyW7UQBAGYOfOIrGFHR6AiBB2kLhkkVieitdL8k5UDpa4xLE9Xtpd3yfVZTQTefx3V7edmWkaAAAAxrq11zS399Y+CtZyJ7K/K3+gUsfR30569rghz61JzfuA03hfZz3f25DnbslN+doH1K3Nd5d53ve1NfeSOZ3HObsYUZcDzvUu87zva/USqMPPmMe/zOW0fkf2fzryHzs+7BHqcNP4uI49Qnn0+tzGzuUh2r6v/89vrXPc1Ufavq//z2+tc7xEH2E8vTc3vZe+XBPkZi2nD31iu6bYD+oT29Pm3nc/6LqhLkOvA8ZcNxgzubnWhHpN1d+tE+Xpk8lU/d06UZ4lMjHvczPvAQAAAAAAAAAgN989y813z6Bp7sUcuB/1IOph1CNzIpX9yPtx1JOop1HP5J/K88j7RdTLqFdRr+UPAABQJPdvcnP/Jjf3bwDm4XMCufmcAAAAAEA93OvLzb0+mJ/f78/N7/cD0MU+ITf7hPKYk7mZkwD1K2WtL+U4sillrW+PwzjIrZTxyG6OI8MTOaZ1GtmfyX9V1tLc7KnK9XehPK6yt6fKa+7s38TfPjC2qtW1j38bjx9GvYs6Mgaq1LWPfx+Pf4j6GPVJ/ul8jsy/RH2N+jZh/var2/D9v4x+TJiX/SrkoufntsS9qqXuuTCetR+mZ33Nzf+CuGJ9BZZgrcmpzd1ak5Pct0vPzs3cBQAAAKA0/wD8LuvAAAABAA==
</data>
</layer>
<layer id="5" name="4_roof_add" width="128" height="128">
<data encoding="base64" compression="gzip">
H4sIAAAAAAAAA+3dSwqAMAwFwGTv59LeSr2b3kCR0hY7A9mHZhVIeREAAAAAAABATVNGzNm6C1pZ7tmv5g8AAFCdfXxs9nEAAAAAAAAAAAAAAAAAAOAP9ow4OqnTH24AAAAAAAAAAAAAAAAAAB7Ilh6bbGkAAAAAAAAAKMstxtjcYgAAAPTpTbaYzK9vNu8GAAAAAAAAAAAA3bgAGq/hpQAAAQA=
H4sIAAAAAAAACu3dSwqAMAwFwGTv59LeTr2T3kCR0hY7A9mHZhVIeREAAAAAAABATVNGzNm6C1pZ7tmv5g8AAFCdfXxs9nEAAAAAAAAAAAAAAAAAAOAP9ow4OqnTH24AAAAAAAAAAAAAAAAAAB7Ilh6bbGkAAAAAAAAAKMstxtjcYgAAAPTpTbaYzK9vNu8GAAAAAAAAAAAA3bgAIDyWQQAAAQA=
</data>
</layer>
<layer id="6" name="objects" width="128" height="128">
<data encoding="base64" compression="gzip">
H4sIAAAAAAAAA+3cQRKCIBQGYDtjdbmmdYex7tO2VZvGETUQHn7f1g3jE/iBYhgAAAAgn9updgso4beu7zrNAIKJPCeMgdu+xZpaRa4rlHDXJ+hUrfH+qk+xs6PlvlxkQqBHsj0AWz3NIcBK9iMAgCOay0DOCAGAaFrf32m9fdCro/7uwJoOYtJ3WUKuBAAAAAAA2MfS87uz8xs64w4jAEiTAft2UV+CkuUpxbcFQDRHzfTu3wSAWKy3Kcn3BdAn4/u8qHtC6goAAOW42xHyeOhLADTMf7yAL+MBQB72AQAgNnM5ALTLPA1MMTYAAFu95IjVRu9skkwKQGT3xDyWeg7EIMvHlKpbD3W1nmpTD98WrGU8onXWZgAAkIf1X13/vn/1AwAAAGr6AHVYJfEAAAEA
H4sIAAAAAAAACu3cQRKCIBQGYDtjdcmmdYex7tG2VZvGETUQHn7f1g3jE/iBYhgAAAAgn9updgso4beu7zrNAIKJPCeMgdu+xZpaRa4rlHDXJ+hUrfH+qk+xs6PlvlxkQqBHsj0AWz3NIcBK9iMAgCOay0DOCAGAaFrf32m9fdCro/7uwJoOYtJ3WUKuBAAAAAAA2MfS87uz8xs64w4jAEiTAft2UV+CkuUpxbcFQDRHzfTu3wSAWKy3Kcn3BdAn4/u8qHtC6goAAOW42xHyeOhLADTMf7yAL+MBQB72AQAgNnM5ALTLPA1MMTYAAFu95IjVRu9skkwKQGT3xDyWeg7EIMvHlKpbD3W1nmpTD98WrGU8onXWZgAAkIf1X13/vn/1AwAAAGr6AKp6a7EAAAEA
</data>
</layer>
<layer id="7" name="collision" width="128" height="128" visible="0" opacity="0.37">
<data encoding="base64" compression="gzip">
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
</data>
</layer>
<layer id="8" name="protection" width="128" height="128" visible="0">
<data encoding="base64" compression="gzip">
H4sIAAAAAAAAA+3BAQEAAACAkP6v7ggKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAauuOl9cAAAEA
H4sIAAAAAAAACu3BAQEAAACAkP6v7ggKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAauuOl9cAAAEA
</data>
</layer>
</map>

View file

@ -1,163 +1,70 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE map SYSTEM "http://mapeditor.org/dtd/1.0/map.dtd">
<map version="1.0" orientation="orthogonal" width="64" height="64" tilewidth="32" tileheight="32">
<tileset firstgid="1" name="logic/collision" tilewidth="32" tileheight="32">
<image source="../../tileset/logic/collision.png"/>
<map version="1.10" tiledversion="1.10.2" orientation="orthogonal" renderorder="right-down" width="64" height="64" tilewidth="32" tileheight="32" infinite="0" nextlayerid="9" nextobjectid="1">
<tileset firstgid="1" name="logic/collision" tilewidth="32" tileheight="32" tilecount="1" columns="1">
<image source="../../tileset/logic/collision.png" width="32" height="32"/>
</tileset>
<tileset firstgid="2" name="logic/portal" tilewidth="32" tileheight="32">
<image source="../../tileset/logic/portal.png"/>
<tileset firstgid="2" name="logic/portal" tilewidth="32" tileheight="32" tilecount="24" columns="8">
<image source="../../tileset/logic/portal.png" width="256" height="96"/>
</tileset>
<tileset firstgid="26" name="sparkles" tilewidth="32" tileheight="32">
<image source="../../tileset/building/decoration/floor_sparkle.png"/>
<tileset firstgid="26" name="sparkles" tilewidth="32" tileheight="32" tilecount="18" columns="3">
<image source="../../tileset/building/decoration/floor_sparkle.png" width="96" height="192"/>
</tileset>
<tileset firstgid="44" name="clouds" tilewidth="32" tileheight="32">
<image source="../../tileset/sky/cloud/clouds.png"/>
<tileset firstgid="44" name="clouds" tilewidth="32" tileheight="32" tilecount="16" columns="4">
<image source="../../tileset/sky/cloud/clouds.png" width="128" height="128"/>
</tileset>
<tileset firstgid="60" name="logic/creature/elemental" tilewidth="32" tileheight="32">
<image source="../../tileset/logic/creature/elemental.png"/>
<tileset firstgid="60" name="logic/creature/elemental" tilewidth="32" tileheight="32" tilecount="16" columns="8">
<image source="../../tileset/logic/creature/elemental.png" width="256" height="64"/>
</tileset>
<tileset firstgid="76" name="dark clouds" tilewidth="32" tileheight="32">
<image source="../../tileset/sky/cloud/cloudtile.png"/>
<tileset firstgid="76" name="dark clouds" tilewidth="32" tileheight="32" tilecount="256" columns="16">
<image source="../../tileset/sky/cloud/cloudtile.png" width="512" height="512"/>
</tileset>
<tileset firstgid="332" name="friendly cloud" tilewidth="32" tileheight="32">
<image source="../../tileset/sky/cloud/friendlycloud.png"/>
<tileset firstgid="332" name="friendly cloud" tilewidth="32" tileheight="32" tilecount="270" columns="18">
<image source="../../tileset/sky/cloud/friendlycloud.png" width="576" height="480"/>
</tileset>
<tileset firstgid="602" name="logic/creature/mythical_being" tilewidth="32" tileheight="32">
<image source="../../tileset/logic/creature/mythical_being.png"/>
<tileset firstgid="602" name="logic/creature/mythical_being" tilewidth="32" tileheight="32" tilecount="24" columns="8">
<image source="../../tileset/logic/creature/mythical_being.png" width="256" height="96"/>
</tileset>
<tileset firstgid="626" name="logic/creature/angel" tilewidth="32" tileheight="32">
<image source="../../tileset/logic/creature/angel.png"/>
<tileset firstgid="626" name="logic/creature/angel" tilewidth="32" tileheight="32" tilecount="6" columns="6">
<image source="../../tileset/logic/creature/angel.png" width="192" height="32"/>
</tileset>
<layer name="0_floor" width="64" height="64">
<layer id="1" name="0_floor" width="64" height="64">
<data encoding="base64" compression="gzip">
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
</data>
</layer>
<layer name="1_terrain" width="64" height="64">
<layer id="2" name="1_terrain" width="64" height="64">
<data encoding="base64" compression="gzip">
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
skCCAEAAAA==
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
</data>
</layer>
<layer name="2_object" width="64" height="64">
<layer id="3" name="2_object" width="64" height="64">
<data encoding="base64" compression="gzip">
H4sIAAAAAAAAAO2avUrEQBDHExEOK7/AAys/D+0UP+4QCxXxTkFfwCcQH0HwASytBGtBe9Fe7JXj
rC3UwkpFxVJnMasx3ibZ3dlskpsf/OGK7O5MdjOZzJzjEIQamxpjD9GsIEyjus87ngqu4zScb92D
XPf3mldd4zLOnW0DLNPhRl8jYhvPjH/oxqcHFCuIvPCEONc64lxJwHx/tG0EIU1WcjSWUzRsG5EC
rm0bEJMN0K5tIyxShZxnGjQC6tfIf0Q840+JRhn87fb5PAG/1yTvwU2Ma9L4LBTBz8kmvg5L+h83
t2TngH93pYFRgZ8Lks/BO445iTMT4uOU5Blok7w+DTGhBjb3COzuVYyDdXVzlPjQHM/uQQm0FPBX
NgYESfo+MGRrN2eeTkBj4O8sqA+0AlrV9N818B4N4yrZ5f7A8903ULsr9p3nGbLv1zhkoW7H3jfz
rnpsCSOqbreHv6QUVS/XYP53IZ+BT42xJmt2fvjec2FxizeVFeYSjpNpw0QsSANlA36dgy5Bp/hT
Z4Jj0L6FdU3m6rLn/wB0YcQSXGox/VLJs4/kh/ywpTHWBLrfGUSCBPZKVD/JM2XvG4ZpscX8X25B
n/NAocX37MW2AYYoGqqlBKn41ih5NbIhy2eK1RMGvVqCDSqW7gGvofn7NgMx7dD5bxMWsn0FP8Fe
nZ+s5JGq/ot6dRzZnpUtVPcpTq6pc7aSQrWvENar4+S1lsQQ9eo6vb4N03iO/Wc069WlMe7p9s6i
8PfqTK8lSxZikA5R//XM+zNIEARBEARBEAQeXw8YFY8AQAAA
H4sIAAAAAAAACu2avUrEQBDHExEOK7/AAys/D+0UP+4QCxXxTkFfwCcQH0HwASytBGtBe9Fe7JXjrC3UwkpFxVJnMasx3ibZ3dlskpsf/OGK7O5MdjOZzJzjEIQamxpjD9GsIEyjus87ngqu4zScb92DXPf3mldd4zLOnW0DLNPhRl8jYhvPjH/oxqcHFCuIvPCEONc64lxJwHx/tG0EIU1WcjSWUzRsG5ECrm0bEJMN0K5tIyxShZxnGjQC6tfIf0Q840+JRhn87fb5PAG/1yTvwU2Ma9L4LBTBz8kmvg5L+h83t2TngH93pYFRgZ8Lks/BO445iTMT4uOU5Blok7w+DTGhBjb3COzuVYyDdXVzlPjQHM/uQQm0FPBXNgYESfo+MGRrN2eeTkBj4O8sqA+0AlrV9N818B4N4yrZ5f7A8903ULsr9p3nGbLv1zhkoW7H3jfzrnpsCSOqbreHv6QUVS/XYP53IZ+BT42xJmt2fvjec2FxizeVFeYSjpNpw0QsSANlA36dgy5Bp/hTZ4Jj0L6FdU3m6rLn/wB0YcQSXGox/VLJs4/kh/ywpTHWBLrfGUSCBPZKVD/JM2XvG4ZpscX8X25Bn/NAocX37MW2AYYoGqqlBKn41ih5NbIhy2eK1RMGvVqCDSqW7gGvofn7NgMx7dD5bxMWsn0FP8FenZ+s5JGq/ot6dRzZnpUtVPcpTq6pc7aSQrWvENar4+S1lsQQ9eo6vb4N03iO/Wc069WlMe7p9s6i8PfqTK8lSxZikA5R//XM+zNIEARBEARBEAQeXw8YFY8AQAAA
</data>
</layer>
<layer name="3_roof" width="64" height="64">
<layer id="4" name="3_roof" width="64" height="64" visible="0" locked="1">
<data encoding="base64" compression="gzip">
H4sIAAAAAAAAAO2aSU7DMBhG0zJK7AAxHICxrJkKrBnLjhm2DIWyBkRhj8QROAIXQOIiPQILZjbd
8JBaVEWVmqZJnCbfk56sRJX6/7FjO7YtSwghhBBOGUpa1jCO4CiO4TimcCJpOjrvyFa5N0l+UziN
MziLaZzDeVxwkf9dw5EGxyL5LeFyKc9VyjXM4HpI6r6ZnmeceTIdgEHURpuDIqYSpqMwx0qIc89g
3nQQBjnAnOkgXJIOcbuKCq884zd8xw/8xC/8xh+Dz9/PPuV/XGUumsAktmArtmE7dmBnSOaqftFN
fj3YW8qzj7IfB3DQp9w3qNdN3MJt3MFd3MP9iL/vh+R3hMd4glk8xTPM4XnE878gv0u8wgLX15R5
vMHbiOcuoke1tZ+4EMd+vFAq/ezHXzyJ1F/UjwshvCYue0bV8GPPqJIgx2s33+5O9ozc7gWY/u4q
t2tTBDleF23Xle3aKff47GVQBrG361r81c8DPjbwn/WueYd5/d4NQa95F2r/pG66IlYnQpjeI22m
/XT7OCrChddzFKf1bfodKmOfo8SxvWqMFiK8ZwgCQWcIAj9DIIQQQgghhF/8AiHa9iYAQAAA
H4sIAAAAAAAACu2aSU7DMBhG0zJK7AAxHICxrJkKrBnLjhm2DIWyBkRhj8QROAIXQOIiPQILZjbd8JBaVEWVmqZJnCbfk56sRJX6/7FjO7YtSwghhBBOGUpa1jCO4CiO4TimcCJpOjrvyFa5N0l+UziNMziLaZzDeVxwkf9dw5EGxyL5LeFyKc9VyjXM4HpI6r6ZnmeceTIdgEHURpuDIqYSpqMwx0qIc89g3nQQBjnAnOkgXJIOcbuKCq884zd8xw/8xC/8xh+Dz9/PPuV/XGUumsAktmArtmE7dmBnSOaqftFNfj3YW8qzj7IfB3DQp9w3qNdN3MJt3MFd3MP9iL/vh+R3hMd4glk8xTPM4XnE878gv0u8wgLX15R5vMHbiOcuoke1tZ+4EMd+vFAq/ezHXzyJ1F/UjwshvCYue0bV8GPPqJIgx2s33+5O9ozc7gWY/u4qt2tTBDleF23Xle3aKff47GVQBrG361r81c8DPjbwn/WueYd5/d4NQa95F2r/pG66IlYnQpjeI22m/XT7OCrChddzFKf1bfodKmOfo8SxvWqMFiK8ZwgCQWcIAj9DIIQQQgghhF/8AiHa9iYAQAAA
</data>
</layer>
<layer name="4_roof_add" width="64" height="64">
<layer id="5" name="4_roof_add" width="64" height="64" visible="0" locked="1">
<data encoding="base64" compression="gzip">
H4sIAAAAAAAAAO3ToREAAAgDse6/MoYVMFxNMsGbTwAAgKtpBwCvPA4AAAAAAAAAAAAAADQtVS9Q
swBAAAA=
H4sIAAAAAAAACu3ToREAAAgDse6/MoYVMFxNMsGbTwAAgKtpBwCvPA4AAAAAAAAAAAAAADQtVS9QswBAAAA=
</data>
</layer>
<layer name="objects" width="64" height="64">
<layer id="6" name="objects" width="64" height="64">
<data encoding="base64" compression="gzip">
H4sIAAAAAAAAAO3ZywnAIAwAUOmhU3WUbtHP/F1AKEqqFt87epAgmhhNCQDaWHsHAECVLTN2LOXz
qAPMJHdugBjqSX+j5bjR4gGIcFX0XACzcQ8ERlaao+Q0WrHX4r2t6a6/AwY3S204g/Lxl+92t5oR
zr8iAAAA8GcPfSksnQBAAAA=
H4sIAAAAAAAACu3ZywnAIAwAUOmhU3WUbtHP/F1AKEqqFt87epAgmhhNCQDaWHsHAECVLTN2LOXzqAPMJHdugBjqSX+j5bjR4gGIcFX0XACzcQ8ERlaao+Q0WrHX4r2t6a6/AwY3S204g/Lxl+92t5oRzr8iAAAA8GcPfSksnQBAAAA=
</data>
</layer>
<layer name="collision" width="64" height="64" visible="0" opacity="0.37">
<layer id="7" name="collision" width="64" height="64" visible="0" opacity="0.37">
<data encoding="base64" compression="gzip">
H4sIAAAAAAAAAO2VwQ6DMAxDu//d/593mjQh2rWJE6fUlnwCHL8UxKu19pJlWU7yrzJnVuC9in0W
LO6n85/A7hG7O4Od3bka+457eRv5r5yja1UdKTYbm78Beu2+A1SfCOaMHSDPIvP8EXuZ3f3KrN3Z
Ed9hND9K0V1O57fMqMzP+g4QusvK6BXBj9prNP/J7BH81XmfyL/Ki+x7l1+VH9l5lF+Nf+be3c4c
vSdrDpsJ8X5Y+dlcbH5vjmVOBf6Z7NP5vTtYzR3dN6OIvUacUy/Xq8yuiP6e56O+Tessq1C7i+T/
N4+hbP67mSxdO2SwX2ezhDh3Zn+vqvEzdlmFn/k+sXdgyendH/FPyuK3dB1dW8nNZPfm7MzvzRk9
Y83Neve9ORG9vOxIfrSzO1Th7vVhza7Az5rNYmf7dH5ZlmW576/YPcQvy7Lc9wcfY9XjAEAAAA==
H4sIAAAAAAAACu2VwQ6DMAxDu//d/593mjQh2rWJE6fUlnwCHL8UxKu19pJlWU7yrzJnVuC9in0WLO6n85/A7hG7O4Od3bka+457eRv5r5yja1UdKTYbm78Beu2+A1SfCOaMHSDPIvP8EXuZ3f3KrN3ZEd9hND9K0V1O57fMqMzP+g4QusvK6BXBj9prNP/J7BH81XmfyL/Ki+x7l1+VH9l5lF+Nf+be3c4cvSdrDpsJ8X5Y+dlcbH5vjmVOBf6Z7NP5vTtYzR3dN6OIvUacUy/Xq8yuiP6e56O+Tessq1C7i+T/N4+hbP67mSxdO2SwX2ezhDh3Zn+vqvEzdlmFn/k+sXdgyendH/FPyuK3dB1dW8nNZPfm7MzvzRk9Y83Neve9ORG9vOxIfrSzO1Th7vVhza7Az5rNYmf7dH5ZlmW576/YPcQvy7Lc9wcfY9XjAEAAAA==
</data>
</layer>
<layer name="protection" width="64" height="64" visible="0">
<layer id="8" name="protection" width="64" height="64" visible="0">
<data encoding="base64" compression="gzip">
H4sIAAAAAAAAAO3BMQEAAADCoPVPbQwfoAAAAAAAAAAAAAAAAAAAAIC3AYbSVKsAQAAA
H4sIAAAAAAAACu3BMQEAAADCoPVPbQwfoAAAAAAAAAAAAAAAAAAAAIC3AYbSVKsAQAAA
</data>
</layer>
</map>

Binary file not shown.

After

Width:  |  Height:  |  Size: 346 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 332 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.4 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Before After
Before After

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -1,6 +1,6 @@
--[[
***************************************************************************
* Copyright © 2022-2023 - Stendhal *
* Copyright © 2022-2024 - Stendhal *
***************************************************************************
***************************************************************************
* *
@ -589,7 +589,20 @@ local prepareMetalDetectorLender = function()
end
-- hint to players that they can borrow metal detector
lender:addOffer("I also have some items that I don't mind #loaning out.")
--~ lender:addOffer("I also have some items that I don't mind #loaning out.")
-- must remove original response to "offer" else function to force "loan" chat option trigger
-- doesn't work
lender:removeTransition(ConversationStates.ATTENDING, ConversationPhrases.OFFER_MESSAGES, nil)
lender:add(
ConversationStates.ATTENDING,
ConversationPhrases.OFFER_MESSAGES,
nil,
ConversationStates.ATTENDING,
"Please check the blackboard for a list of items that I buy. I also have some items that I"
.. " don't mind #loaning out.",
function(player, sentence, raiser)
lender:forceWordsInCurrentConversation({"loan"})
end)
lender:add(
ConversationStates.ATTENDING,
@ -599,7 +612,9 @@ local prepareMetalDetectorLender = function()
"So, you want to borrow my metal detector? Well, I don't lend things out"
.. " without some form of collateral. What would you like to leave"
.. " behind?",
nil)
function(player, sentence, raiser)
lender:forceWordsInCurrentConversation({"nothing"})
end)
lender:add(
ConversationStates.ATTENDING,

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 371 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 371 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 371 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 371 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 307 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 478 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 380 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 409 B

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 596 B

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