widelands-dev team mailing list archive
-
widelands-dev team
-
Mailing list archive
-
Message #18077
[Merge] lp:~widelands-dev/widelands/spritesheet_generation into lp:widelands
GunChleoc has proposed merging lp:~widelands-dev/widelands/spritesheet_generation into lp:widelands.
Commit message:
Add support for spritesheets
- Add support for spritesheets and refactor animation classes
- New utility wl_create_spritesheet to create spritesheets for animations
- Animations are also cropped to save more space
- Spritesheet animations are kept in separate Lua tables for performance reasons
- New Lua function add_custom_worker to support writing tests
- Convert Barbarian Carrier and Wood Hardener as examples
Requested reviews:
Widelands Developers (widelands-dev)
Related bugs:
Bug #1638356 in widelands: "Implement support for Spritemaps"
https://bugs.launchpad.net/widelands/+bug/1638356
For more details, see:
https://code.launchpad.net/~widelands-dev/widelands/spritesheet_generation/+merge/370824
Spritesheets :)
Note that the idle carrier gets a black background when zoomed out - this is a proof-of-concept that the correct mipmap files are being generated and used. The files at 0.5 scale can be deleted before merging.
The new tool still has a memory leak that I haven't found out how to fix yet.
Once this is in, we should look at exporting all 4 scales directly from Blender for maximum quality.
--
Your team Widelands Developers is requested to review the proposed merge of lp:~widelands-dev/widelands/spritesheet_generation into lp:widelands.
=== modified file '.bzrignore'
--- .bzrignore 2017-04-20 11:02:01 +0000
+++ .bzrignore 2019-08-30 22:19:30 +0000
@@ -11,6 +11,7 @@
update.sh
widelands
wl_map*_info
+wl_create_spritesheet
locale
VERSION
=== modified file 'compile.sh'
--- compile.sh 2019-07-20 13:07:07 +0000
+++ compile.sh 2019-08-30 22:19:30 +0000
@@ -301,6 +301,7 @@
mv src/widelands ../widelands
if [ $BUILD_WEBSITE = "ON" ]; then
+ mv ../build/src/website/wl_create_spritesheet ../wl_create_spritesheet
mv ../build/src/website/wl_map_object_info ../wl_map_object_info
mv ../build/src/website/wl_map_info ../wl_map_info
fi
=== modified file 'data/tribes/barbarians.lua'
--- data/tribes/barbarians.lua 2019-05-26 01:46:18 +0000
+++ data/tribes/barbarians.lua 2019-08-30 22:19:30 +0000
@@ -1,12 +1,23 @@
image_dirname = path.dirname(__file__) .. "images/barbarians/"
-animations = {}
-add_animation(animations, "frontier", image_dirname, "frontier", {1, 19})
-add_animation(animations, "flag", image_dirname, "flag", {10, 38}, 5)
-
tribes:new_tribe {
name = "barbarians",
- animations = animations,
+ animations = {
+ flag = {
+ directory = image_dirname,
+ basename = "flag",
+ fps = 5,
+ frames = 16,
+ columns = 4,
+ rows = 4,
+ hotspot = { 11, 39 }
+ },
+ frontier = {
+ directory = image_dirname,
+ basename = "frontier",
+ hotspot = { 1, 19 }
+ },
+ },
-- Image file paths for this tribe's road textures
roads = {
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/build_00.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/build_00.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/build_00.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/build_00_pc.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/build_00_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/build_00_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/build_01.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/build_01.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/build_01.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/build_01_pc.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/build_01_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/build_01_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/build_02.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/build_02.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/build_02.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/build_02_pc.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/build_02_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/build_02_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/build_03.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/build_03.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/build_03.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/build_03_pc.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/build_03_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/build_03_pc.png 1970-01-01 00:00:00 +0000 differ
=== added file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/build_1.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/build_1.png 1970-01-01 00:00:00 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/build_1.png 2019-08-30 22:19:30 +0000 differ
=== added file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/build_1_pc.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/build_1_pc.png 1970-01-01 00:00:00 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/build_1_pc.png 2019-08-30 22:19:30 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_00.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_00.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_00.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_00_pc.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_00_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_00_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_01.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_01.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_01.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_01_pc.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_01_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_01_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_02.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_02.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_02.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_02_pc.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_02_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_02_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_03.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_03.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_03.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_03_pc.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_03_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_03_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_04.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_04.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_04.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_04_pc.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_04_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_04_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_05.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_05.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_05.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_05_pc.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_05_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_05_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_06.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_06.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_06.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_06_pc.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_06_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_06_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_07.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_07.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_07.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_07_pc.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_07_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_07_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_08.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_08.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_08.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_08_pc.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_08_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_08_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_09.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_09.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_09.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_09_pc.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_09_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_09_pc.png 1970-01-01 00:00:00 +0000 differ
=== added file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_1.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_1.png 1970-01-01 00:00:00 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_1.png 2019-08-30 22:19:30 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_10.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_10.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_10.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_10_pc.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_10_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_10_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_11.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_11.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_11.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_11_pc.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_11_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_11_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_12.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_12.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_12.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_12_pc.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_12_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_12_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_13.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_13.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_13.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_13_pc.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_13_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_13_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_14.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_14.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_14.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_14_pc.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_14_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_14_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_15.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_15.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_15.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_15_pc.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_15_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_15_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_16.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_16.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_16.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_16_pc.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_16_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_16_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_17.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_17.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_17.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_17_pc.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_17_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_17_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_18.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_18.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_18.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_18_pc.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_18_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_18_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_19.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_19.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_19.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_19_pc.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_19_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_19_pc.png 1970-01-01 00:00:00 +0000 differ
=== added file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_1_pc.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_1_pc.png 1970-01-01 00:00:00 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/idle_1_pc.png 2019-08-30 22:19:30 +0000 differ
=== modified file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/init.lua'
--- data/tribes/buildings/productionsites/barbarians/wood_hardener/init.lua 2019-05-29 18:29:28 +0000
+++ data/tribes/buildings/productionsites/barbarians/wood_hardener/init.lua 2019-08-30 22:19:30 +0000
@@ -19,22 +19,37 @@
},
animations = {
+ unoccupied = {
+ directory = dirname,
+ basename = "unoccupied",
+ hotspot = { 52, 64 },
+ }
+ },
+ spritesheets = {
idle = {
- pictures = path.list_files(dirname .. "idle_??.png"),
- hotspot = { 52, 64 },
+ directory = dirname,
+ basename = "idle",
+ frames = 20,
+ columns = 4,
+ rows = 5,
+ hotspot = { 50, 65 }
},
build = {
- pictures = path.list_files(dirname .. "build_??.png"),
- hotspot = { 52, 64 },
+ directory = dirname,
+ basename = "build",
+ frames = 4,
+ columns = 2,
+ rows = 2,
+ hotspot = { 50, 61 }
},
working = {
- pictures = path.list_files(dirname .. "working_??.png"),
- hotspot = { 52, 64 },
- },
- unoccupied = {
- pictures = path.list_files(dirname .. "unoccupied_??.png"),
- hotspot = { 52, 64 },
- },
+ directory = dirname,
+ basename = "working",
+ frames = 20,
+ columns = 4,
+ rows = 5,
+ hotspot = { 53, 65 }
+ }
},
aihints = {
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/working_00.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/working_00.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/working_00.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/working_00_pc.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/working_00_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/working_00_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/working_01.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/working_01.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/working_01.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/working_01_pc.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/working_01_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/working_01_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/working_02.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/working_02.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/working_02.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/working_02_pc.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/working_02_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/working_02_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/working_03.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/working_03.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/working_03.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/working_03_pc.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/working_03_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/working_03_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/working_04.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/working_04.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/working_04.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/working_04_pc.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/working_04_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/working_04_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/working_05.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/working_05.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/working_05.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/working_05_pc.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/working_05_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/working_05_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/working_06.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/working_06.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/working_06.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/working_06_pc.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/working_06_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/working_06_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/working_07.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/working_07.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/working_07.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/working_07_pc.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/working_07_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/working_07_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/working_08.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/working_08.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/working_08.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/working_08_pc.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/working_08_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/working_08_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/working_09.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/working_09.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/working_09.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/working_09_pc.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/working_09_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/working_09_pc.png 1970-01-01 00:00:00 +0000 differ
=== added file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/working_1.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/working_1.png 1970-01-01 00:00:00 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/working_1.png 2019-08-30 22:19:30 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/working_10.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/working_10.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/working_10.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/working_10_pc.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/working_10_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/working_10_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/working_11.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/working_11.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/working_11.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/working_11_pc.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/working_11_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/working_11_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/working_12.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/working_12.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/working_12.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/working_12_pc.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/working_12_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/working_12_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/working_13.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/working_13.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/working_13.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/working_13_pc.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/working_13_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/working_13_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/working_14.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/working_14.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/working_14.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/working_14_pc.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/working_14_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/working_14_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/working_15.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/working_15.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/working_15.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/working_15_pc.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/working_15_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/working_15_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/working_16.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/working_16.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/working_16.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/working_16_pc.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/working_16_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/working_16_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/working_17.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/working_17.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/working_17.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/working_17_pc.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/working_17_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/working_17_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/working_18.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/working_18.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/working_18.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/working_18_pc.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/working_18_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/working_18_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/working_19.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/working_19.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/working_19.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/working_19_pc.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/working_19_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/working_19_pc.png 1970-01-01 00:00:00 +0000 differ
=== added file 'data/tribes/buildings/productionsites/barbarians/wood_hardener/working_1_pc.png'
Binary files data/tribes/buildings/productionsites/barbarians/wood_hardener/working_1_pc.png 1970-01-01 00:00:00 +0000 and data/tribes/buildings/productionsites/barbarians/wood_hardener/working_1_pc.png 2019-08-30 22:19:30 +0000 differ
=== removed file 'data/tribes/images/barbarians/flag_00.png'
Binary files data/tribes/images/barbarians/flag_00.png 2019-03-30 06:46:25 +0000 and data/tribes/images/barbarians/flag_00.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/images/barbarians/flag_00_pc.png'
Binary files data/tribes/images/barbarians/flag_00_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/images/barbarians/flag_00_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/images/barbarians/flag_01.png'
Binary files data/tribes/images/barbarians/flag_01.png 2019-03-30 06:46:25 +0000 and data/tribes/images/barbarians/flag_01.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/images/barbarians/flag_01_pc.png'
Binary files data/tribes/images/barbarians/flag_01_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/images/barbarians/flag_01_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/images/barbarians/flag_02.png'
Binary files data/tribes/images/barbarians/flag_02.png 2019-03-30 06:46:25 +0000 and data/tribes/images/barbarians/flag_02.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/images/barbarians/flag_02_pc.png'
Binary files data/tribes/images/barbarians/flag_02_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/images/barbarians/flag_02_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/images/barbarians/flag_03.png'
Binary files data/tribes/images/barbarians/flag_03.png 2019-03-30 06:46:25 +0000 and data/tribes/images/barbarians/flag_03.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/images/barbarians/flag_03_pc.png'
Binary files data/tribes/images/barbarians/flag_03_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/images/barbarians/flag_03_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/images/barbarians/flag_04.png'
Binary files data/tribes/images/barbarians/flag_04.png 2019-03-30 06:46:25 +0000 and data/tribes/images/barbarians/flag_04.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/images/barbarians/flag_04_pc.png'
Binary files data/tribes/images/barbarians/flag_04_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/images/barbarians/flag_04_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/images/barbarians/flag_05.png'
Binary files data/tribes/images/barbarians/flag_05.png 2019-03-30 06:46:25 +0000 and data/tribes/images/barbarians/flag_05.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/images/barbarians/flag_05_pc.png'
Binary files data/tribes/images/barbarians/flag_05_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/images/barbarians/flag_05_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/images/barbarians/flag_06.png'
Binary files data/tribes/images/barbarians/flag_06.png 2019-03-30 06:46:25 +0000 and data/tribes/images/barbarians/flag_06.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/images/barbarians/flag_06_pc.png'
Binary files data/tribes/images/barbarians/flag_06_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/images/barbarians/flag_06_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/images/barbarians/flag_07.png'
Binary files data/tribes/images/barbarians/flag_07.png 2019-03-30 06:46:25 +0000 and data/tribes/images/barbarians/flag_07.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/images/barbarians/flag_07_pc.png'
Binary files data/tribes/images/barbarians/flag_07_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/images/barbarians/flag_07_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/images/barbarians/flag_08.png'
Binary files data/tribes/images/barbarians/flag_08.png 2019-03-30 06:46:25 +0000 and data/tribes/images/barbarians/flag_08.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/images/barbarians/flag_08_pc.png'
Binary files data/tribes/images/barbarians/flag_08_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/images/barbarians/flag_08_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/images/barbarians/flag_09.png'
Binary files data/tribes/images/barbarians/flag_09.png 2019-03-30 06:46:25 +0000 and data/tribes/images/barbarians/flag_09.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/images/barbarians/flag_09_pc.png'
Binary files data/tribes/images/barbarians/flag_09_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/images/barbarians/flag_09_pc.png 1970-01-01 00:00:00 +0000 differ
=== added file 'data/tribes/images/barbarians/flag_1.png'
Binary files data/tribes/images/barbarians/flag_1.png 1970-01-01 00:00:00 +0000 and data/tribes/images/barbarians/flag_1.png 2019-08-30 22:19:30 +0000 differ
=== removed file 'data/tribes/images/barbarians/flag_10.png'
Binary files data/tribes/images/barbarians/flag_10.png 2019-03-30 06:46:25 +0000 and data/tribes/images/barbarians/flag_10.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/images/barbarians/flag_10_pc.png'
Binary files data/tribes/images/barbarians/flag_10_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/images/barbarians/flag_10_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/images/barbarians/flag_11.png'
Binary files data/tribes/images/barbarians/flag_11.png 2019-03-30 06:46:25 +0000 and data/tribes/images/barbarians/flag_11.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/images/barbarians/flag_11_pc.png'
Binary files data/tribes/images/barbarians/flag_11_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/images/barbarians/flag_11_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/images/barbarians/flag_12.png'
Binary files data/tribes/images/barbarians/flag_12.png 2019-03-30 06:46:25 +0000 and data/tribes/images/barbarians/flag_12.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/images/barbarians/flag_12_pc.png'
Binary files data/tribes/images/barbarians/flag_12_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/images/barbarians/flag_12_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/images/barbarians/flag_13.png'
Binary files data/tribes/images/barbarians/flag_13.png 2019-03-30 06:46:25 +0000 and data/tribes/images/barbarians/flag_13.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/images/barbarians/flag_13_pc.png'
Binary files data/tribes/images/barbarians/flag_13_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/images/barbarians/flag_13_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/images/barbarians/flag_14.png'
Binary files data/tribes/images/barbarians/flag_14.png 2019-03-30 06:46:25 +0000 and data/tribes/images/barbarians/flag_14.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/images/barbarians/flag_14_pc.png'
Binary files data/tribes/images/barbarians/flag_14_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/images/barbarians/flag_14_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/images/barbarians/flag_15.png'
Binary files data/tribes/images/barbarians/flag_15.png 2019-03-30 06:46:25 +0000 and data/tribes/images/barbarians/flag_15.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/images/barbarians/flag_15_pc.png'
Binary files data/tribes/images/barbarians/flag_15_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/images/barbarians/flag_15_pc.png 1970-01-01 00:00:00 +0000 differ
=== added file 'data/tribes/images/barbarians/flag_1_pc.png'
Binary files data/tribes/images/barbarians/flag_1_pc.png 1970-01-01 00:00:00 +0000 and data/tribes/images/barbarians/flag_1_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'data/tribes/workers/barbarians/carrier/idle_0.5.png'
Binary files data/tribes/workers/barbarians/carrier/idle_0.5.png 1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/carrier/idle_0.5.png 2019-08-30 22:19:30 +0000 differ
=== added file 'data/tribes/workers/barbarians/carrier/idle_0.5_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_0.5_pc.png 1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/carrier/idle_0.5_pc.png 2019-08-30 22:19:30 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_00.png'
Binary files data/tribes/workers/barbarians/carrier/idle_00.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_00.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_00_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_00_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_00_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_01.png'
Binary files data/tribes/workers/barbarians/carrier/idle_01.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_01.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_01_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_01_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_01_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_02.png'
Binary files data/tribes/workers/barbarians/carrier/idle_02.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_02.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_02_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_02_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_02_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_03.png'
Binary files data/tribes/workers/barbarians/carrier/idle_03.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_03.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_03_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_03_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_03_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_04.png'
Binary files data/tribes/workers/barbarians/carrier/idle_04.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_04.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_04_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_04_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_04_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_05.png'
Binary files data/tribes/workers/barbarians/carrier/idle_05.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_05.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_05_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_05_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_05_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_06.png'
Binary files data/tribes/workers/barbarians/carrier/idle_06.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_06.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_06_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_06_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_06_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_07.png'
Binary files data/tribes/workers/barbarians/carrier/idle_07.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_07.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_07_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_07_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_07_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_08.png'
Binary files data/tribes/workers/barbarians/carrier/idle_08.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_08.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_08_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_08_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_08_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_09.png'
Binary files data/tribes/workers/barbarians/carrier/idle_09.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_09.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_09_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_09_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_09_pc.png 1970-01-01 00:00:00 +0000 differ
=== added file 'data/tribes/workers/barbarians/carrier/idle_1.png'
Binary files data/tribes/workers/barbarians/carrier/idle_1.png 1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/carrier/idle_1.png 2019-08-30 22:19:30 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_10.png'
Binary files data/tribes/workers/barbarians/carrier/idle_10.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_10.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_10_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_10_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_10_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_11.png'
Binary files data/tribes/workers/barbarians/carrier/idle_11.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_11.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_11_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_11_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_11_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_12.png'
Binary files data/tribes/workers/barbarians/carrier/idle_12.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_12.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_12_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_12_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_12_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_13.png'
Binary files data/tribes/workers/barbarians/carrier/idle_13.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_13.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_13_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_13_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_13_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_14.png'
Binary files data/tribes/workers/barbarians/carrier/idle_14.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_14.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_14_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_14_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_14_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_15.png'
Binary files data/tribes/workers/barbarians/carrier/idle_15.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_15.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_15_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_15_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_15_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_16.png'
Binary files data/tribes/workers/barbarians/carrier/idle_16.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_16.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_16_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_16_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_16_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_17.png'
Binary files data/tribes/workers/barbarians/carrier/idle_17.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_17.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_17_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_17_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_17_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_18.png'
Binary files data/tribes/workers/barbarians/carrier/idle_18.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_18.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_18_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_18_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_18_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_19.png'
Binary files data/tribes/workers/barbarians/carrier/idle_19.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_19.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_19_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_19_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_19_pc.png 1970-01-01 00:00:00 +0000 differ
=== added file 'data/tribes/workers/barbarians/carrier/idle_1_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_1_pc.png 1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/carrier/idle_1_pc.png 2019-08-30 22:19:30 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_20.png'
Binary files data/tribes/workers/barbarians/carrier/idle_20.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_20.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_20_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_20_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_20_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_21.png'
Binary files data/tribes/workers/barbarians/carrier/idle_21.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_21.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_21_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_21_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_21_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_22.png'
Binary files data/tribes/workers/barbarians/carrier/idle_22.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_22.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_22_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_22_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_22_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_23.png'
Binary files data/tribes/workers/barbarians/carrier/idle_23.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_23.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_23_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_23_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_23_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_24.png'
Binary files data/tribes/workers/barbarians/carrier/idle_24.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_24.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_24_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_24_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_24_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_25.png'
Binary files data/tribes/workers/barbarians/carrier/idle_25.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_25.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_25_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_25_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_25_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_26.png'
Binary files data/tribes/workers/barbarians/carrier/idle_26.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_26.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_26_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_26_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_26_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_27.png'
Binary files data/tribes/workers/barbarians/carrier/idle_27.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_27.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_27_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_27_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_27_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_28.png'
Binary files data/tribes/workers/barbarians/carrier/idle_28.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_28.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_28_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_28_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_28_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_29.png'
Binary files data/tribes/workers/barbarians/carrier/idle_29.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_29.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_29_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_29_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_29_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_30.png'
Binary files data/tribes/workers/barbarians/carrier/idle_30.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_30.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_30_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_30_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_30_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_31.png'
Binary files data/tribes/workers/barbarians/carrier/idle_31.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_31.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_31_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_31_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_31_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_32.png'
Binary files data/tribes/workers/barbarians/carrier/idle_32.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_32.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_32_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_32_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_32_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_33.png'
Binary files data/tribes/workers/barbarians/carrier/idle_33.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_33.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_33_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_33_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_33_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_34.png'
Binary files data/tribes/workers/barbarians/carrier/idle_34.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_34.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_34_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_34_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_34_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_35.png'
Binary files data/tribes/workers/barbarians/carrier/idle_35.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_35.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_35_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_35_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_35_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_36.png'
Binary files data/tribes/workers/barbarians/carrier/idle_36.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_36.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_36_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_36_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_36_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_37.png'
Binary files data/tribes/workers/barbarians/carrier/idle_37.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_37.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_37_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_37_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_37_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_38.png'
Binary files data/tribes/workers/barbarians/carrier/idle_38.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_38.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_38_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_38_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_38_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_39.png'
Binary files data/tribes/workers/barbarians/carrier/idle_39.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_39.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_39_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_39_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_39_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_40.png'
Binary files data/tribes/workers/barbarians/carrier/idle_40.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_40.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_40_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_40_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_40_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_41.png'
Binary files data/tribes/workers/barbarians/carrier/idle_41.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_41.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_41_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_41_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_41_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_42.png'
Binary files data/tribes/workers/barbarians/carrier/idle_42.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_42.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_42_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_42_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_42_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_43.png'
Binary files data/tribes/workers/barbarians/carrier/idle_43.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_43.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_43_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_43_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_43_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_44.png'
Binary files data/tribes/workers/barbarians/carrier/idle_44.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_44.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_44_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_44_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_44_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_45.png'
Binary files data/tribes/workers/barbarians/carrier/idle_45.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_45.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_45_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_45_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_45_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_46.png'
Binary files data/tribes/workers/barbarians/carrier/idle_46.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_46.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_46_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_46_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_46_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_47.png'
Binary files data/tribes/workers/barbarians/carrier/idle_47.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_47.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_47_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_47_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_47_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_48.png'
Binary files data/tribes/workers/barbarians/carrier/idle_48.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_48.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_48_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_48_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_48_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_49.png'
Binary files data/tribes/workers/barbarians/carrier/idle_49.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_49.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_49_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_49_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_49_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_50.png'
Binary files data/tribes/workers/barbarians/carrier/idle_50.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_50.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_50_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_50_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_50_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_51.png'
Binary files data/tribes/workers/barbarians/carrier/idle_51.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_51.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_51_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_51_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_51_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_52.png'
Binary files data/tribes/workers/barbarians/carrier/idle_52.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_52.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_52_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_52_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_52_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_53.png'
Binary files data/tribes/workers/barbarians/carrier/idle_53.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_53.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_53_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_53_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_53_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_54.png'
Binary files data/tribes/workers/barbarians/carrier/idle_54.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_54.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_54_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_54_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_54_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_55.png'
Binary files data/tribes/workers/barbarians/carrier/idle_55.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_55.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_55_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_55_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_55_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_56.png'
Binary files data/tribes/workers/barbarians/carrier/idle_56.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_56.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_56_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_56_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_56_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_57.png'
Binary files data/tribes/workers/barbarians/carrier/idle_57.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_57.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_57_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_57_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_57_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_58.png'
Binary files data/tribes/workers/barbarians/carrier/idle_58.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_58.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_58_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_58_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_58_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_59.png'
Binary files data/tribes/workers/barbarians/carrier/idle_59.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_59.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_59_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_59_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_59_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_60.png'
Binary files data/tribes/workers/barbarians/carrier/idle_60.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_60.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_60_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_60_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_60_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_61.png'
Binary files data/tribes/workers/barbarians/carrier/idle_61.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_61.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_61_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_61_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_61_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_62.png'
Binary files data/tribes/workers/barbarians/carrier/idle_62.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_62.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_62_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_62_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_62_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_63.png'
Binary files data/tribes/workers/barbarians/carrier/idle_63.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_63.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_63_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_63_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_63_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_64.png'
Binary files data/tribes/workers/barbarians/carrier/idle_64.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_64.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_64_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_64_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_64_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_65.png'
Binary files data/tribes/workers/barbarians/carrier/idle_65.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_65.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_65_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_65_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_65_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_66.png'
Binary files data/tribes/workers/barbarians/carrier/idle_66.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_66.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_66_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_66_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_66_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_67.png'
Binary files data/tribes/workers/barbarians/carrier/idle_67.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_67.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_67_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_67_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_67_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_68.png'
Binary files data/tribes/workers/barbarians/carrier/idle_68.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_68.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_68_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_68_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_68_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_69.png'
Binary files data/tribes/workers/barbarians/carrier/idle_69.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_69.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_69_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_69_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_69_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_70.png'
Binary files data/tribes/workers/barbarians/carrier/idle_70.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_70.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_70_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_70_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_70_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_71.png'
Binary files data/tribes/workers/barbarians/carrier/idle_71.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_71.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_71_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_71_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_71_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_72.png'
Binary files data/tribes/workers/barbarians/carrier/idle_72.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_72.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_72_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_72_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_72_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_73.png'
Binary files data/tribes/workers/barbarians/carrier/idle_73.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_73.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_73_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_73_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_73_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_74.png'
Binary files data/tribes/workers/barbarians/carrier/idle_74.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_74.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_74_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_74_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_74_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_75.png'
Binary files data/tribes/workers/barbarians/carrier/idle_75.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_75.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_75_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_75_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_75_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_76.png'
Binary files data/tribes/workers/barbarians/carrier/idle_76.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_76.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_76_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_76_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_76_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_77.png'
Binary files data/tribes/workers/barbarians/carrier/idle_77.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_77.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_77_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_77_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_77_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_78.png'
Binary files data/tribes/workers/barbarians/carrier/idle_78.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_78.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_78_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_78_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_78_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_79.png'
Binary files data/tribes/workers/barbarians/carrier/idle_79.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_79.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_79_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_79_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_79_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_80.png'
Binary files data/tribes/workers/barbarians/carrier/idle_80.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_80.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_80_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_80_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_80_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_81.png'
Binary files data/tribes/workers/barbarians/carrier/idle_81.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_81.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_81_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_81_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_81_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_82.png'
Binary files data/tribes/workers/barbarians/carrier/idle_82.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_82.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_82_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_82_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_82_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_83.png'
Binary files data/tribes/workers/barbarians/carrier/idle_83.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_83.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_83_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_83_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_83_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_84.png'
Binary files data/tribes/workers/barbarians/carrier/idle_84.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_84.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_84_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_84_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_84_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_85.png'
Binary files data/tribes/workers/barbarians/carrier/idle_85.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_85.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_85_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_85_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_85_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_86.png'
Binary files data/tribes/workers/barbarians/carrier/idle_86.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_86.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_86_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_86_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_86_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_87.png'
Binary files data/tribes/workers/barbarians/carrier/idle_87.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_87.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_87_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_87_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_87_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_88.png'
Binary files data/tribes/workers/barbarians/carrier/idle_88.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_88.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_88_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_88_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_88_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_89.png'
Binary files data/tribes/workers/barbarians/carrier/idle_89.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_89.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_89_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_89_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_89_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_90.png'
Binary files data/tribes/workers/barbarians/carrier/idle_90.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_90.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_90_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_90_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_90_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_91.png'
Binary files data/tribes/workers/barbarians/carrier/idle_91.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_91.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_91_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_91_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_91_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_92.png'
Binary files data/tribes/workers/barbarians/carrier/idle_92.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_92.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_92_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_92_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_92_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_93.png'
Binary files data/tribes/workers/barbarians/carrier/idle_93.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_93.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_93_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_93_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_93_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_94.png'
Binary files data/tribes/workers/barbarians/carrier/idle_94.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_94.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_94_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_94_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_94_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_95.png'
Binary files data/tribes/workers/barbarians/carrier/idle_95.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_95.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_95_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_95_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_95_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_96.png'
Binary files data/tribes/workers/barbarians/carrier/idle_96.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_96.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_96_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_96_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_96_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_97.png'
Binary files data/tribes/workers/barbarians/carrier/idle_97.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_97.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_97_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_97_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_97_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_98.png'
Binary files data/tribes/workers/barbarians/carrier/idle_98.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_98.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_98_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_98_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_98_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_99.png'
Binary files data/tribes/workers/barbarians/carrier/idle_99.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_99.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/idle_99_pc.png'
Binary files data/tribes/workers/barbarians/carrier/idle_99_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/idle_99_pc.png 1970-01-01 00:00:00 +0000 differ
=== modified file 'data/tribes/workers/barbarians/carrier/init.lua'
--- data/tribes/workers/barbarians/carrier/init.lua 2019-04-21 12:23:33 +0000
+++ data/tribes/workers/barbarians/carrier/init.lua 2019-08-30 22:19:30 +0000
@@ -1,11 +1,5 @@
dirname = path.dirname(__file__)
-animations = {}
-add_animation(animations, "idle", dirname, "idle", {14, 21}, 5)
-add_directional_animation(animations, "walk", dirname, "walk", {9, 19}, 10)
-add_directional_animation(animations, "walkload", dirname, "walkload", {7, 22}, 10)
-
-
tribes:new_carrier_type {
msgctxt = "barbarians_worker",
name = "barbarians_carrier",
@@ -17,5 +11,36 @@
buildcost = {}, -- This will give the worker the property "buildable"
- animations = animations,
+ spritesheets = {
+ idle = {
+ directory = dirname,
+ basename = "idle",
+ fps = 5,
+ frames = 100,
+ columns = 10,
+ rows = 10,
+ hotspot = { 15, 22 }
+ },
+
+ walk = {
+ directory = dirname,
+ basename = "walk",
+ fps = 10,
+ frames = 10,
+ columns = 3,
+ rows = 4,
+ directional = true,
+ hotspot = { 10, 20 }
+ },
+ walkload = {
+ directory = dirname,
+ basename = "walkload",
+ fps = 10,
+ frames = 10,
+ columns = 3,
+ rows = 4,
+ directional = true,
+ hotspot = { 8, 23 }
+ }
+ }
}
=== removed file 'data/tribes/workers/barbarians/carrier/walk_e_00.png'
Binary files data/tribes/workers/barbarians/carrier/walk_e_00.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_e_00.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_e_00_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walk_e_00_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_e_00_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_e_01.png'
Binary files data/tribes/workers/barbarians/carrier/walk_e_01.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_e_01.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_e_01_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walk_e_01_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_e_01_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_e_02.png'
Binary files data/tribes/workers/barbarians/carrier/walk_e_02.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_e_02.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_e_02_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walk_e_02_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_e_02_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_e_03.png'
Binary files data/tribes/workers/barbarians/carrier/walk_e_03.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_e_03.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_e_03_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walk_e_03_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_e_03_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_e_04.png'
Binary files data/tribes/workers/barbarians/carrier/walk_e_04.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_e_04.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_e_04_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walk_e_04_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_e_04_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_e_05.png'
Binary files data/tribes/workers/barbarians/carrier/walk_e_05.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_e_05.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_e_05_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walk_e_05_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_e_05_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_e_06.png'
Binary files data/tribes/workers/barbarians/carrier/walk_e_06.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_e_06.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_e_06_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walk_e_06_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_e_06_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_e_07.png'
Binary files data/tribes/workers/barbarians/carrier/walk_e_07.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_e_07.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_e_07_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walk_e_07_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_e_07_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_e_08.png'
Binary files data/tribes/workers/barbarians/carrier/walk_e_08.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_e_08.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_e_08_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walk_e_08_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_e_08_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_e_09.png'
Binary files data/tribes/workers/barbarians/carrier/walk_e_09.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_e_09.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_e_09_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walk_e_09_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_e_09_pc.png 1970-01-01 00:00:00 +0000 differ
=== added file 'data/tribes/workers/barbarians/carrier/walk_e_1.png'
Binary files data/tribes/workers/barbarians/carrier/walk_e_1.png 1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/carrier/walk_e_1.png 2019-08-30 22:19:30 +0000 differ
=== added file 'data/tribes/workers/barbarians/carrier/walk_e_1_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walk_e_1_pc.png 1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/carrier/walk_e_1_pc.png 2019-08-30 22:19:30 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_ne_00.png'
Binary files data/tribes/workers/barbarians/carrier/walk_ne_00.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_ne_00.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_ne_00_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walk_ne_00_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_ne_00_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_ne_01.png'
Binary files data/tribes/workers/barbarians/carrier/walk_ne_01.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_ne_01.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_ne_01_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walk_ne_01_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_ne_01_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_ne_02.png'
Binary files data/tribes/workers/barbarians/carrier/walk_ne_02.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_ne_02.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_ne_02_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walk_ne_02_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_ne_02_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_ne_03.png'
Binary files data/tribes/workers/barbarians/carrier/walk_ne_03.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_ne_03.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_ne_03_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walk_ne_03_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_ne_03_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_ne_04.png'
Binary files data/tribes/workers/barbarians/carrier/walk_ne_04.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_ne_04.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_ne_04_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walk_ne_04_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_ne_04_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_ne_05.png'
Binary files data/tribes/workers/barbarians/carrier/walk_ne_05.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_ne_05.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_ne_05_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walk_ne_05_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_ne_05_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_ne_06.png'
Binary files data/tribes/workers/barbarians/carrier/walk_ne_06.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_ne_06.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_ne_06_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walk_ne_06_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_ne_06_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_ne_07.png'
Binary files data/tribes/workers/barbarians/carrier/walk_ne_07.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_ne_07.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_ne_07_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walk_ne_07_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_ne_07_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_ne_08.png'
Binary files data/tribes/workers/barbarians/carrier/walk_ne_08.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_ne_08.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_ne_08_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walk_ne_08_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_ne_08_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_ne_09.png'
Binary files data/tribes/workers/barbarians/carrier/walk_ne_09.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_ne_09.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_ne_09_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walk_ne_09_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_ne_09_pc.png 1970-01-01 00:00:00 +0000 differ
=== added file 'data/tribes/workers/barbarians/carrier/walk_ne_1.png'
Binary files data/tribes/workers/barbarians/carrier/walk_ne_1.png 1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/carrier/walk_ne_1.png 2019-08-30 22:19:30 +0000 differ
=== added file 'data/tribes/workers/barbarians/carrier/walk_ne_1_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walk_ne_1_pc.png 1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/carrier/walk_ne_1_pc.png 2019-08-30 22:19:30 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_nw_00.png'
Binary files data/tribes/workers/barbarians/carrier/walk_nw_00.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_nw_00.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_nw_00_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walk_nw_00_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_nw_00_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_nw_01.png'
Binary files data/tribes/workers/barbarians/carrier/walk_nw_01.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_nw_01.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_nw_01_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walk_nw_01_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_nw_01_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_nw_02.png'
Binary files data/tribes/workers/barbarians/carrier/walk_nw_02.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_nw_02.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_nw_02_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walk_nw_02_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_nw_02_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_nw_03.png'
Binary files data/tribes/workers/barbarians/carrier/walk_nw_03.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_nw_03.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_nw_03_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walk_nw_03_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_nw_03_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_nw_04.png'
Binary files data/tribes/workers/barbarians/carrier/walk_nw_04.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_nw_04.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_nw_04_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walk_nw_04_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_nw_04_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_nw_05.png'
Binary files data/tribes/workers/barbarians/carrier/walk_nw_05.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_nw_05.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_nw_05_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walk_nw_05_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_nw_05_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_nw_06.png'
Binary files data/tribes/workers/barbarians/carrier/walk_nw_06.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_nw_06.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_nw_06_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walk_nw_06_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_nw_06_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_nw_07.png'
Binary files data/tribes/workers/barbarians/carrier/walk_nw_07.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_nw_07.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_nw_07_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walk_nw_07_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_nw_07_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_nw_08.png'
Binary files data/tribes/workers/barbarians/carrier/walk_nw_08.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_nw_08.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_nw_08_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walk_nw_08_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_nw_08_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_nw_09.png'
Binary files data/tribes/workers/barbarians/carrier/walk_nw_09.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_nw_09.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_nw_09_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walk_nw_09_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_nw_09_pc.png 1970-01-01 00:00:00 +0000 differ
=== added file 'data/tribes/workers/barbarians/carrier/walk_nw_1.png'
Binary files data/tribes/workers/barbarians/carrier/walk_nw_1.png 1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/carrier/walk_nw_1.png 2019-08-30 22:19:30 +0000 differ
=== added file 'data/tribes/workers/barbarians/carrier/walk_nw_1_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walk_nw_1_pc.png 1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/carrier/walk_nw_1_pc.png 2019-08-30 22:19:30 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_se_00.png'
Binary files data/tribes/workers/barbarians/carrier/walk_se_00.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_se_00.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_se_00_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walk_se_00_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_se_00_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_se_01.png'
Binary files data/tribes/workers/barbarians/carrier/walk_se_01.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_se_01.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_se_01_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walk_se_01_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_se_01_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_se_02.png'
Binary files data/tribes/workers/barbarians/carrier/walk_se_02.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_se_02.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_se_02_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walk_se_02_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_se_02_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_se_03.png'
Binary files data/tribes/workers/barbarians/carrier/walk_se_03.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_se_03.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_se_03_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walk_se_03_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_se_03_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_se_04.png'
Binary files data/tribes/workers/barbarians/carrier/walk_se_04.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_se_04.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_se_04_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walk_se_04_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_se_04_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_se_05.png'
Binary files data/tribes/workers/barbarians/carrier/walk_se_05.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_se_05.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_se_05_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walk_se_05_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_se_05_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_se_06.png'
Binary files data/tribes/workers/barbarians/carrier/walk_se_06.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_se_06.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_se_06_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walk_se_06_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_se_06_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_se_07.png'
Binary files data/tribes/workers/barbarians/carrier/walk_se_07.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_se_07.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_se_07_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walk_se_07_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_se_07_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_se_08.png'
Binary files data/tribes/workers/barbarians/carrier/walk_se_08.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_se_08.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_se_08_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walk_se_08_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_se_08_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_se_09.png'
Binary files data/tribes/workers/barbarians/carrier/walk_se_09.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_se_09.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_se_09_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walk_se_09_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_se_09_pc.png 1970-01-01 00:00:00 +0000 differ
=== added file 'data/tribes/workers/barbarians/carrier/walk_se_1.png'
Binary files data/tribes/workers/barbarians/carrier/walk_se_1.png 1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/carrier/walk_se_1.png 2019-08-30 22:19:30 +0000 differ
=== added file 'data/tribes/workers/barbarians/carrier/walk_se_1_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walk_se_1_pc.png 1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/carrier/walk_se_1_pc.png 2019-08-30 22:19:30 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_sw_00.png'
Binary files data/tribes/workers/barbarians/carrier/walk_sw_00.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_sw_00.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_sw_00_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walk_sw_00_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_sw_00_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_sw_01.png'
Binary files data/tribes/workers/barbarians/carrier/walk_sw_01.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_sw_01.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_sw_01_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walk_sw_01_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_sw_01_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_sw_02.png'
Binary files data/tribes/workers/barbarians/carrier/walk_sw_02.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_sw_02.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_sw_02_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walk_sw_02_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_sw_02_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_sw_03.png'
Binary files data/tribes/workers/barbarians/carrier/walk_sw_03.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_sw_03.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_sw_03_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walk_sw_03_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_sw_03_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_sw_04.png'
Binary files data/tribes/workers/barbarians/carrier/walk_sw_04.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_sw_04.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_sw_04_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walk_sw_04_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_sw_04_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_sw_05.png'
Binary files data/tribes/workers/barbarians/carrier/walk_sw_05.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_sw_05.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_sw_05_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walk_sw_05_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_sw_05_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_sw_06.png'
Binary files data/tribes/workers/barbarians/carrier/walk_sw_06.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_sw_06.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_sw_06_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walk_sw_06_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_sw_06_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_sw_07.png'
Binary files data/tribes/workers/barbarians/carrier/walk_sw_07.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_sw_07.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_sw_07_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walk_sw_07_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_sw_07_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_sw_08.png'
Binary files data/tribes/workers/barbarians/carrier/walk_sw_08.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_sw_08.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_sw_08_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walk_sw_08_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_sw_08_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_sw_09.png'
Binary files data/tribes/workers/barbarians/carrier/walk_sw_09.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_sw_09.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_sw_09_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walk_sw_09_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_sw_09_pc.png 1970-01-01 00:00:00 +0000 differ
=== added file 'data/tribes/workers/barbarians/carrier/walk_sw_1.png'
Binary files data/tribes/workers/barbarians/carrier/walk_sw_1.png 1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/carrier/walk_sw_1.png 2019-08-30 22:19:30 +0000 differ
=== added file 'data/tribes/workers/barbarians/carrier/walk_sw_1_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walk_sw_1_pc.png 1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/carrier/walk_sw_1_pc.png 2019-08-30 22:19:30 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_w_00.png'
Binary files data/tribes/workers/barbarians/carrier/walk_w_00.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_w_00.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_w_00_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walk_w_00_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_w_00_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_w_01.png'
Binary files data/tribes/workers/barbarians/carrier/walk_w_01.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_w_01.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_w_01_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walk_w_01_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_w_01_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_w_02.png'
Binary files data/tribes/workers/barbarians/carrier/walk_w_02.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_w_02.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_w_02_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walk_w_02_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_w_02_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_w_03.png'
Binary files data/tribes/workers/barbarians/carrier/walk_w_03.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_w_03.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_w_03_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walk_w_03_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_w_03_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_w_04.png'
Binary files data/tribes/workers/barbarians/carrier/walk_w_04.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_w_04.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_w_04_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walk_w_04_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_w_04_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_w_05.png'
Binary files data/tribes/workers/barbarians/carrier/walk_w_05.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_w_05.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_w_05_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walk_w_05_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_w_05_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_w_06.png'
Binary files data/tribes/workers/barbarians/carrier/walk_w_06.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_w_06.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_w_06_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walk_w_06_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_w_06_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_w_07.png'
Binary files data/tribes/workers/barbarians/carrier/walk_w_07.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_w_07.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_w_07_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walk_w_07_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_w_07_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_w_08.png'
Binary files data/tribes/workers/barbarians/carrier/walk_w_08.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_w_08.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_w_08_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walk_w_08_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_w_08_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_w_09.png'
Binary files data/tribes/workers/barbarians/carrier/walk_w_09.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_w_09.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walk_w_09_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walk_w_09_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walk_w_09_pc.png 1970-01-01 00:00:00 +0000 differ
=== added file 'data/tribes/workers/barbarians/carrier/walk_w_1.png'
Binary files data/tribes/workers/barbarians/carrier/walk_w_1.png 1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/carrier/walk_w_1.png 2019-08-30 22:19:30 +0000 differ
=== added file 'data/tribes/workers/barbarians/carrier/walk_w_1_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walk_w_1_pc.png 1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/carrier/walk_w_1_pc.png 2019-08-30 22:19:30 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_e_00.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_e_00.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_e_00.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_e_00_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_e_00_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_e_00_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_e_01.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_e_01.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_e_01.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_e_01_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_e_01_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_e_01_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_e_02.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_e_02.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_e_02.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_e_02_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_e_02_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_e_02_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_e_03.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_e_03.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_e_03.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_e_03_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_e_03_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_e_03_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_e_04.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_e_04.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_e_04.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_e_04_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_e_04_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_e_04_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_e_05.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_e_05.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_e_05.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_e_05_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_e_05_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_e_05_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_e_06.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_e_06.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_e_06.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_e_06_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_e_06_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_e_06_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_e_07.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_e_07.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_e_07.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_e_07_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_e_07_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_e_07_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_e_08.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_e_08.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_e_08.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_e_08_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_e_08_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_e_08_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_e_09.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_e_09.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_e_09.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_e_09_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_e_09_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_e_09_pc.png 1970-01-01 00:00:00 +0000 differ
=== added file 'data/tribes/workers/barbarians/carrier/walkload_e_1.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_e_1.png 1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/carrier/walkload_e_1.png 2019-08-30 22:19:30 +0000 differ
=== added file 'data/tribes/workers/barbarians/carrier/walkload_e_1_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_e_1_pc.png 1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/carrier/walkload_e_1_pc.png 2019-08-30 22:19:30 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_ne_00.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_ne_00.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_ne_00.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_ne_00_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_ne_00_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_ne_00_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_ne_01.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_ne_01.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_ne_01.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_ne_01_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_ne_01_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_ne_01_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_ne_02.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_ne_02.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_ne_02.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_ne_02_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_ne_02_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_ne_02_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_ne_03.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_ne_03.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_ne_03.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_ne_03_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_ne_03_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_ne_03_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_ne_04.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_ne_04.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_ne_04.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_ne_04_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_ne_04_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_ne_04_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_ne_05.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_ne_05.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_ne_05.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_ne_05_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_ne_05_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_ne_05_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_ne_06.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_ne_06.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_ne_06.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_ne_06_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_ne_06_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_ne_06_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_ne_07.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_ne_07.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_ne_07.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_ne_07_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_ne_07_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_ne_07_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_ne_08.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_ne_08.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_ne_08.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_ne_08_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_ne_08_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_ne_08_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_ne_09.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_ne_09.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_ne_09.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_ne_09_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_ne_09_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_ne_09_pc.png 1970-01-01 00:00:00 +0000 differ
=== added file 'data/tribes/workers/barbarians/carrier/walkload_ne_1.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_ne_1.png 1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/carrier/walkload_ne_1.png 2019-08-30 22:19:30 +0000 differ
=== added file 'data/tribes/workers/barbarians/carrier/walkload_ne_1_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_ne_1_pc.png 1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/carrier/walkload_ne_1_pc.png 2019-08-30 22:19:30 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_nw_00.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_nw_00.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_nw_00.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_nw_00_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_nw_00_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_nw_00_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_nw_01.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_nw_01.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_nw_01.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_nw_01_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_nw_01_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_nw_01_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_nw_02.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_nw_02.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_nw_02.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_nw_02_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_nw_02_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_nw_02_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_nw_03.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_nw_03.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_nw_03.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_nw_03_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_nw_03_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_nw_03_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_nw_04.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_nw_04.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_nw_04.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_nw_04_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_nw_04_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_nw_04_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_nw_05.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_nw_05.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_nw_05.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_nw_05_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_nw_05_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_nw_05_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_nw_06.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_nw_06.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_nw_06.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_nw_06_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_nw_06_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_nw_06_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_nw_07.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_nw_07.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_nw_07.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_nw_07_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_nw_07_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_nw_07_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_nw_08.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_nw_08.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_nw_08.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_nw_08_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_nw_08_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_nw_08_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_nw_09.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_nw_09.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_nw_09.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_nw_09_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_nw_09_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_nw_09_pc.png 1970-01-01 00:00:00 +0000 differ
=== added file 'data/tribes/workers/barbarians/carrier/walkload_nw_1.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_nw_1.png 1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/carrier/walkload_nw_1.png 2019-08-30 22:19:30 +0000 differ
=== added file 'data/tribes/workers/barbarians/carrier/walkload_nw_1_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_nw_1_pc.png 1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/carrier/walkload_nw_1_pc.png 2019-08-30 22:19:30 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_se_00.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_se_00.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_se_00.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_se_00_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_se_00_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_se_00_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_se_01.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_se_01.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_se_01.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_se_01_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_se_01_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_se_01_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_se_02.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_se_02.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_se_02.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_se_02_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_se_02_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_se_02_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_se_03.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_se_03.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_se_03.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_se_03_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_se_03_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_se_03_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_se_04.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_se_04.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_se_04.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_se_04_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_se_04_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_se_04_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_se_05.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_se_05.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_se_05.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_se_05_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_se_05_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_se_05_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_se_06.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_se_06.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_se_06.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_se_06_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_se_06_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_se_06_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_se_07.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_se_07.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_se_07.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_se_07_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_se_07_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_se_07_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_se_08.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_se_08.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_se_08.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_se_08_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_se_08_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_se_08_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_se_09.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_se_09.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_se_09.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_se_09_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_se_09_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_se_09_pc.png 1970-01-01 00:00:00 +0000 differ
=== added file 'data/tribes/workers/barbarians/carrier/walkload_se_1.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_se_1.png 1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/carrier/walkload_se_1.png 2019-08-30 22:19:30 +0000 differ
=== added file 'data/tribes/workers/barbarians/carrier/walkload_se_1_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_se_1_pc.png 1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/carrier/walkload_se_1_pc.png 2019-08-30 22:19:30 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_sw_00.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_sw_00.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_sw_00.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_sw_00_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_sw_00_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_sw_00_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_sw_01.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_sw_01.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_sw_01.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_sw_01_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_sw_01_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_sw_01_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_sw_02.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_sw_02.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_sw_02.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_sw_02_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_sw_02_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_sw_02_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_sw_03.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_sw_03.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_sw_03.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_sw_03_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_sw_03_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_sw_03_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_sw_04.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_sw_04.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_sw_04.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_sw_04_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_sw_04_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_sw_04_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_sw_05.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_sw_05.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_sw_05.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_sw_05_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_sw_05_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_sw_05_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_sw_06.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_sw_06.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_sw_06.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_sw_06_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_sw_06_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_sw_06_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_sw_07.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_sw_07.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_sw_07.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_sw_07_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_sw_07_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_sw_07_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_sw_08.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_sw_08.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_sw_08.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_sw_08_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_sw_08_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_sw_08_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_sw_09.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_sw_09.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_sw_09.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_sw_09_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_sw_09_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_sw_09_pc.png 1970-01-01 00:00:00 +0000 differ
=== added file 'data/tribes/workers/barbarians/carrier/walkload_sw_1.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_sw_1.png 1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/carrier/walkload_sw_1.png 2019-08-30 22:19:30 +0000 differ
=== added file 'data/tribes/workers/barbarians/carrier/walkload_sw_1_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_sw_1_pc.png 1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/carrier/walkload_sw_1_pc.png 2019-08-30 22:19:30 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_w_00.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_w_00.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_w_00.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_w_00_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_w_00_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_w_00_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_w_01.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_w_01.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_w_01.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_w_01_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_w_01_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_w_01_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_w_02.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_w_02.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_w_02.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_w_02_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_w_02_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_w_02_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_w_03.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_w_03.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_w_03.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_w_03_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_w_03_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_w_03_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_w_04.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_w_04.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_w_04.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_w_04_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_w_04_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_w_04_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_w_05.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_w_05.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_w_05.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_w_05_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_w_05_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_w_05_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_w_06.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_w_06.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_w_06.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_w_06_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_w_06_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_w_06_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_w_07.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_w_07.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_w_07.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_w_07_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_w_07_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_w_07_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_w_08.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_w_08.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_w_08.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_w_08_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_w_08_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_w_08_pc.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_w_09.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_w_09.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_w_09.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'data/tribes/workers/barbarians/carrier/walkload_w_09_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_w_09_pc.png 2019-03-30 06:46:25 +0000 and data/tribes/workers/barbarians/carrier/walkload_w_09_pc.png 1970-01-01 00:00:00 +0000 differ
=== added file 'data/tribes/workers/barbarians/carrier/walkload_w_1.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_w_1.png 1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/carrier/walkload_w_1.png 2019-08-30 22:19:30 +0000 differ
=== added file 'data/tribes/workers/barbarians/carrier/walkload_w_1_pc.png'
Binary files data/tribes/workers/barbarians/carrier/walkload_w_1_pc.png 1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/carrier/walkload_w_1_pc.png 2019-08-30 22:19:30 +0000 differ
=== modified file 'doc/sphinx/source/animations.rst'
--- doc/sphinx/source/animations.rst 2019-05-25 08:51:42 +0000
+++ doc/sphinx/source/animations.rst 2019-08-30 22:19:30 +0000
@@ -7,10 +7,20 @@
For information on how to create the animations' images with Blender, see
`GraphicsDevelopment <https://wl.widelands.org/wiki/GraphicsDevelopment/>`_.
+The Blender export will give you a list of files for each animation.
+We call this a "file" animation.
+Once you have tested your animation in Widelands and are satisfied with the results,
+we recommend that you convert it to a :ref:`spritesheet <animations_spritesheets>`.
+This will save disk space and make animation loading faster.
+
Animations are defined as `Lua tables <http://lua-users.org/wiki/TablesTutorial>`_.
All :ref:`map objects <animations_map_object_types>` have a mandatory ``idle`` animation.
They can then have further animations, depending on what their specific capabilities are.
+
+File Animations
+---------------
+
We recommend that you use the :ref:`animations_convenience_functions` below for
the Lua coding, but let's look at an example first to understand which options
are available, and what your image files need to look like:
@@ -90,6 +100,71 @@
``walk_ne_1_01.png`` etc. for scale `1` and so on.
+.. _animations_spritesheets:
+
+Spritesheet Animations
+----------------------
+
+The same map object can have a mix of file and spritesheet animations.
+For converting a file animation to a spritesheet animation, use the command line
+to call ``./wl_create_spritesheet`` from the Widelands program directory.
+This will print the command line options to use for converting your animation.
+
+After conversion, you will need to delete the old files and copy over the new files,
+then delete the old animation code in the map object's ``init.lua`` file and add the new code.
+The tool will print the new code to the console for you, so all you need to do is copy/paste
+and then add any missing optional parameters back in.
+
+Note that except for flag and frontier animations, the table for spritesheets is
+called ``spritesheets``, not ``animations``!
+This distinction is necessary for performance reasons.
+
+Spritesheets have three additional mandatory parameters so that the engine can
+identify the individual textures in the sheet:
+
+**frames**
+ The number of frames (images) that this animation has. Equal to the number of
+ files in a file animation.
+
+**columns**
+ The number of image columns in the spritesheet.
+
+**rows**
+ The number of image rows in the spritesheet.
+
+
+Here's the example from above as spritesheets:
+
+.. code-block:: lua
+
+ spritesheets = {
+ idle = {
+ directory = path.dirname(__file__),
+ basename = "idle",
+ fps = 4,
+ frames = 150,
+ rows = 13,
+ columns = 12,
+ hotspot = { 5, 7 }
+ sound_effect = {
+ path = "sound/foo/bar",
+ priority = 128
+ },
+ representative_frame = 3,
+ },
+ walk = {
+ directory = path.dirname(__file__),
+ basename = "walk",
+ fps = 4,
+ frames = 10,
+ rows = 4,
+ columns = 3,
+ directional = true,
+ hotspot = { 5, 7 }
+ },
+ ...
+ }
+
.. _animations_convenience_functions:
=== modified file 'src/graphic/CMakeLists.txt'
--- src/graphic/CMakeLists.txt 2019-06-01 14:07:35 +0000
+++ src/graphic/CMakeLists.txt 2019-08-30 22:19:30 +0000
@@ -1,3 +1,4 @@
+add_subdirectory(animation)
add_subdirectory(styles)
add_subdirectory(text)
@@ -310,10 +311,7 @@
wl_library(graphic
SRCS
- animation.cc
- animation.h
default_resolution.h
- diranimations.h
graphic.cc
graphic.h
style_manager.cc
@@ -330,13 +328,13 @@
base_scoped_timer
build_info
graphic_align
+ graphic_animation
graphic_build_texture_atlas
graphic_color
graphic_draw_programs
graphic_gl_utils
graphic_image_cache
graphic_image_io
- graphic_playercolor
graphic_render_queue
graphic_styles
graphic_surface
@@ -349,6 +347,5 @@
notifications
scripting_lua_interface
scripting_lua_table
- sound
)
=== added directory 'src/graphic/animation'
=== added file 'src/graphic/animation/CMakeLists.txt'
--- src/graphic/animation/CMakeLists.txt 1970-01-01 00:00:00 +0000
+++ src/graphic/animation/CMakeLists.txt 2019-08-30 22:19:30 +0000
@@ -0,0 +1,26 @@
+wl_library(graphic_animation
+ SRCS
+ animation.cc
+ animation.h
+ animation_manager.cc
+ animation_manager.h
+ diranimations.h
+ diranimations.cc
+ nonpacked_animation.cc
+ nonpacked_animation.h
+ spritesheet_animation.cc
+ spritesheet_animation.h
+ DEPENDS
+ base_exceptions
+ base_geometry
+ base_macros
+ graphic
+ graphic_color
+ graphic_playercolor
+ graphic_surface
+ io_filesystem
+ logic_constants
+ note_sound
+ scripting_lua_table
+ sound
+)
=== added file 'src/graphic/animation/animation.cc'
--- src/graphic/animation/animation.cc 1970-01-01 00:00:00 +0000
+++ src/graphic/animation/animation.cc 2019-08-30 22:19:30 +0000
@@ -0,0 +1,195 @@
+/*
+ * Copyright (C) 2002-2019 by the Widelands Development Team
+ *
+ * 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.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "graphic/animation/animation.h"
+
+#include <cassert>
+#include <memory>
+
+#include "base/vector.h"
+#include "io/filesystem/layered_filesystem.h"
+#include "logic/game_data_error.h"
+#include "scripting/lua_table.h"
+#include "sound/note_sound.h"
+#include "sound/sound_handler.h"
+
+const std::map<float, std::string> Animation::kSupportedScales { {0.5, "_0.5"}, {1, "_1"}, {2, "_2"}, {4, "_4"}};
+
+Animation::MipMapEntry::MipMapEntry() : has_playercolor_masks(false) {
+}
+
+Animation::Animation(const LuaTable& table) :
+ representative_frame_(table.has_key("representative_frame") ? table.get_int("representative_frame") : 0),
+ hotspot_(table.get_vector<std::string, int>("hotspot")),
+ frametime_(table.has_key("fps") ? (1000 / get_positive_int(table, "fps")) : kFrameLength),
+ play_once_(table.has_key("play_once") ? table.get_bool("play_once") : false),
+ sound_effect_(kNoSoundEffect),
+ sound_priority_(kFxPriorityLowest) {
+ try {
+ // Sound
+ if (table.has_key("sound_effect")) {
+ std::unique_ptr<LuaTable> sound_effects = table.get_table("sound_effect");
+ sound_effect_ =
+ SoundHandler::register_fx(SoundType::kAmbient, sound_effects->get_string("path"));
+
+ if (sound_effects->has_key<std::string>("priority")) {
+ sound_priority_ = sound_effects->get_int("priority");
+ }
+
+ if (sound_priority_ < kFxPriorityLowest) {
+ throw Widelands::GameDataError(
+ "Minmum priority for sounds is %d, but only %d was specified for %s",
+ kFxPriorityLowest, sound_priority_, sound_effects->get_string("path").c_str());
+ }
+ }
+ } catch (const LuaError& e) {
+ throw wexception("Error in animation table: %s", e.what());
+ }
+ assert(frametime_ > 0);
+}
+
+const Animation::MipMapEntry& Animation::mipmap_entry(float scale) const {
+ assert(mipmaps_.count(scale) == 1);
+ const MipMapEntry& mipmap = *mipmaps_.at(scale);
+ mipmap.ensure_graphics_are_loaded();
+ return mipmap;
+}
+
+Rectf Animation::source_rectangle(const int percent_from_bottom, float scale) const {
+ const MipMapEntry& mipmap = mipmap_entry(find_best_scale(scale));
+ const float h = percent_from_bottom * mipmap.height() / 100;
+ // Using floor for pixel perfect positioning
+ return Rectf(0.f, std::floor(mipmap.height() - h), mipmap.width(), h);
+}
+
+Rectf Animation::destination_rectangle(const Vector2f& position,
+ const Rectf& source_rect,
+ const float scale) const {
+ const float best_scale = find_best_scale(scale);
+ return Rectf(position.x - (hotspot_.x - source_rect.x / best_scale) * scale,
+ position.y - (hotspot_.y - source_rect.y / best_scale) * scale,
+ source_rect.w * scale / best_scale, source_rect.h * scale / best_scale);
+}
+
+uint16_t Animation::nr_frames() const {
+ assert(nr_frames_ > 0);
+ return nr_frames_;
+}
+
+int Animation::height() const {
+ return mipmap_entry(1.0f).height();
+}
+
+int Animation::width() const {
+ return mipmap_entry(1.0f).width();
+}
+
+uint32_t Animation::frametime() const {
+ assert(frametime_ > 0);
+ return frametime_;
+}
+
+const Vector2i& Animation::hotspot() const {
+ return hotspot_;
+}
+
+uint32_t Animation::current_frame(uint32_t time) const {
+ if (nr_frames() > 1) {
+ return (play_once_ && time / frametime_ > static_cast<uint32_t>(nr_frames() - 1)) ?
+ static_cast<uint32_t>(nr_frames() - 1) :
+ time / frametime_ % nr_frames();
+ }
+ return 0;
+}
+
+void Animation::add_available_scales(const std::string& basename, const std::string& directory) {
+ for (const auto& scale : kSupportedScales) {
+ add_scale_if_files_present(basename, directory, scale.first, scale.second);
+ }
+
+ if (mipmaps_.count(1.0f) == 0) {
+ // There might be only 1 scale
+ add_scale_if_files_present(basename, directory, 1.0f, "");
+ if (mipmaps_.count(1.0f) == 0) {
+ // No files found at all
+ throw Widelands::GameDataError(
+ "Animation in directory '%s' with basename '%s' has no images for mandatory "
+ "scale '1' in mipmap - supported scales are: 0.5, 1, 2, 4",
+ directory.c_str(), basename.c_str());
+ }
+ }
+}
+
+// TODO(unknown): The chosen semantics of animation sound effects is problematic:
+// What if the game runs very slowly or very quickly?
+void Animation::trigger_sound(uint32_t time, const Widelands::Coords& coords) const {
+ if (sound_effect_ == kNoSoundEffect || coords == Widelands::Coords::null()) {
+ return;
+ }
+ if (current_frame(time) == 0) {
+ Notifications::publish(
+ NoteSound(SoundType::kAmbient, sound_effect_, coords, sound_priority_));
+ }
+}
+
+std::set<float> Animation::available_scales() const {
+ std::set<float> result;
+ for (const auto& scale : kSupportedScales) {
+ if (mipmaps_.count(scale.first) == 1) {
+ result.insert(scale.first);
+ }
+ }
+ return result;
+}
+
+void Animation::blit(uint32_t time,
+ const Widelands::Coords& coords,
+ const Rectf& source_rect,
+ const Rectf& destination_rect,
+ const RGBColor* clr,
+ Surface* target,
+ float scale) const {
+ mipmap_entry(find_best_scale(scale))
+ .blit(current_frame(time), source_rect, destination_rect, clr, target);
+ trigger_sound(time, coords);
+}
+
+void Animation::load_default_scale_and_sounds() const {
+ mipmaps_.at(1.0f)->ensure_graphics_are_loaded();
+ if (sound_effect_ != kNoSoundEffect && !SoundHandler::is_backend_disabled()) {
+ g_sh->load_fx(SoundType::kAmbient, sound_effect_);
+ }
+}
+
+float Animation::find_best_scale(float scale) const {
+ assert(!mipmaps_.empty());
+ float result = mipmaps_.begin()->first;
+ for (const auto& mipmap : mipmaps_) {
+ // The map is reverse sorted, so we can break as soon as we are lower than the wanted scale
+ if (mipmap.first < scale) {
+ break;
+ }
+ result = mipmap.first;
+ }
+ return result;
+}
+
+int Animation::representative_frame() const {
+ return representative_frame_;
+}
=== renamed file 'src/graphic/animation.h' => 'src/graphic/animation/animation.h'
--- src/graphic/animation.h 2019-05-27 21:04:13 +0000
+++ src/graphic/animation/animation.h 2019-08-30 22:19:30 +0000
@@ -17,12 +17,12 @@
*
*/
-#ifndef WL_GRAPHIC_ANIMATION_H
-#define WL_GRAPHIC_ANIMATION_H
+#ifndef WL_GRAPHIC_ANIMATION_ANIMATION_H
+#define WL_GRAPHIC_ANIMATION_ANIMATION_H
-#include <cstring>
#include <map>
#include <memory>
+#include <set>
#include <string>
#include <vector>
@@ -31,16 +31,14 @@
#include "base/macros.h"
#include "base/rect.h"
#include "base/vector.h"
+#include "graphic/color.h"
+#include "graphic/image.h"
#include "graphic/surface.h"
-#include "logic/widelands_geometry.h"
-
-class Image;
-class LuaTable;
-class Surface;
-struct RGBColor;
-
-/// FRAME_LENGTH is the default animation speed
-constexpr int FRAME_LENGTH = 250;
+#include "scripting/lua_table.h"
+#include "sound/constants.h"
+
+/// The default animation speed
+constexpr int kFrameLength = 250;
/**
* Representation of an Animation in the game. An animation is a looping set of
@@ -53,30 +51,44 @@
*/
class Animation {
public:
- Animation(int representative_frame) : representative_frame_(representative_frame) {
- }
- virtual ~Animation() {
- }
+ /// Whether we have an animation consisting of multiple files or of 1 single spritesheet file
+ enum class Type {
+ kFile,
+ kSpritesheet
+ };
+
+ /// The mipmap scales supported by the engine as float and filename suffix.
+ /// Ensure that this always matches supported_scales in data/scripting/mapobjects.lua.
+ static const std::map<float, std::string> kSupportedScales;
+ explicit Animation(const LuaTable& table);
+ virtual ~Animation() = default;
/// The height of this animation.
- virtual float height() const = 0;
+ int height() const;
+ /// The width of this animation.
+ int width() const;
+ /// The hotspot of this animation for aligning it on the map.
+ const Vector2i& hotspot() const;
+
+ /// The frame to be blitted for the given 'time'
+ uint32_t current_frame(uint32_t time) const;
/// The size of the animation source images in pixels. Use 'percent_from_bottom' to crop the
/// animation.
- virtual Rectf source_rectangle(int percent_from_bottom, float scale) const = 0;
+ Rectf source_rectangle(int percent_from_bottom, float scale) const;
/// Calculates the destination rectangle for blitting the animation in pixels.
/// 'position' is where the top left corner of the animation will end up,
/// 'source_rect' is the rectangle calculated by source_rectangle,
/// 'scale' is the zoom scale.
- virtual Rectf
- destination_rectangle(const Vector2f& position, const Rectf& source_rect, float scale) const = 0;
-
- /// The number of animation frames of this animation.
- virtual uint16_t nr_frames() const = 0;
-
- /// The number of milliseconds each frame will be displayed.
- virtual uint32_t frametime() const = 0;
+ Rectf
+ destination_rectangle(const Vector2f& position, const Rectf& source_rect, float scale) const;
+
+ /// The number of animation frames of this animation. Returns a positive integer.
+ uint16_t nr_frames() const;
+
+ /// The number of milliseconds each frame will be displayed. Returns a positive integer.
+ uint32_t frametime() const;
/// An image of the first frame, blended with the given player color.
/// The 'clr' is the player color used for blending - the parameter can be
@@ -89,66 +101,107 @@
/// The 'clr' is the player color used for blitting - the parameter can be 'nullptr',
/// in which case the neutral image will be blitted. The Surface is the 'target'
/// for the blit operation and must be non-null.
- virtual void blit(uint32_t time,
+ void blit(uint32_t time,
const Widelands::Coords& coords,
const Rectf& source_rect,
const Rectf& destination_rect,
const RGBColor* clr,
- Surface* target,
- float scale) const = 0;
+ Surface* target, float scale) const;
+
+ /// We need to expose these for the packed animation,
+ /// so that the create_spritesheet utility can use them.
+ /// Do not use otherwise.
+ virtual std::vector<const Image*> images(float scale) const = 0;
+ /// We need to expose these for the packed animation,
+ /// so that the create_spritemap utility can use them.
+ /// Do not use otherwise.
+ virtual std::vector<const Image*> pc_masks(float scale) const = 0;
+
+ /// The scales for which this animation has exact images.
+ std::set<float> available_scales() const;
/// Load animation images into memory for default scale.
- virtual void load_default_scale_and_sounds() const = 0;
+ void load_default_scale_and_sounds() const;
+
+ /// The frame to be shown in menus etc.
+ int representative_frame() const;
protected:
+ /// Animation data for a particular scale
+ struct MipMapEntry {
+
+ MipMapEntry();
+ virtual ~MipMapEntry() {}
+
+ /// Loads the graphics if they are not yet loaded.
+ virtual void ensure_graphics_are_loaded() const = 0;
+
+ /// Load the needed graphics from disk.
+ virtual void load_graphics() = 0;
+
+ /// Blit the frame at the given index
+ virtual void blit(uint32_t idx,
+ const Rectf& source_rect,
+ const Rectf& destination_rect,
+ const RGBColor* clr,
+ Surface* target) const = 0;
+
+ /// The width of this mipmap entry's textures
+ virtual int width() const = 0;
+ /// The height of this mipmap entry's textures
+ virtual int height() const = 0;
+
+ /// Whether this texture set has player color masks provided
+ bool has_playercolor_masks;
+ };
+
+ /// Register animations for the scales listed in kSupportedScales if available. The scale of 1.0 is mandatory.
+ void add_available_scales(const std::string& basename, const std::string& directory);
+
/// Play the sound effect associated with this animation at the given time.
/// Any sound effects are played with stereo position according to 'coords'.
/// If 'coords' == Widelands::Coords::null(), skip playing any sound effects.
- virtual void trigger_sound(uint32_t time, const Widelands::Coords& coords) const = 0;
-
-protected:
+ void trigger_sound(uint32_t time, const Widelands::Coords& coords) const;
+
+ /// Ensures that the graphics are loaded before returning the entry
+ const Animation::MipMapEntry& mipmap_entry(float scale) const;
+
+ /// The number of textures this animation will play
+ uint16_t nr_frames_;
+
+ /// Reverse sort the zoom scales for faster lookup
+ struct MipMapCompare {
+ inline bool operator() (const float lhs, const float rhs) const
+ {return lhs > rhs;}
+ };
+ /// Texture sets for different zoom scales
+ std::map<float, std::unique_ptr<MipMapEntry>, MipMapCompare> mipmaps_;
+
+private:
+ DISALLOW_COPY_AND_ASSIGN(Animation);
+
+ /// Look for a file or files for the given scale, and if we have any, add a mipmap entry for them.
+ virtual void add_scale_if_files_present(const std::string& basename, const std::string& directory,
+ float scale_as_float, const std::string& scale_as_string) = 0;
+
+ /// Find the best scale for blitting at the given zoom 'scale'
+ float find_best_scale(float scale) const;
+
+ /// The frame to show in menus, in the in-game help etc.
int representative_frame_;
-private:
- DISALLOW_COPY_AND_ASSIGN(Animation);
-};
-
-/**
- * The animation manager manages a list of all active animations.
- */
-class AnimationManager {
-public:
- /**
- * Loads an animation, graphics sound and everything from a Lua table.
- *
- * The 'basename' is the filename prefix for loading the images, e.g. "idle" or "walk_ne".
- *
- * The Lua table must contain a table 'pictures' with image paths and a 'hotspot' table.
- *
- * Optional parameters in the Lua table are 'fps' and 'sound_effect'.
- */
- uint32_t load(const LuaTable& table, const std::string& basename);
- /// Same as above, but this animation will be used for getting a representative image by map
- /// object name
- uint32_t
- load(const std::string& map_object_name, const LuaTable& table, const std::string& basename);
-
- /// Returns the animation with the given ID or throws an exception if it is
- /// unknown.
- const Animation& get_animation(uint32_t id) const;
-
- /// Returns the representative image, using the given player color.
- /// If this image has been generated before, it is pulled from the cache using
- /// the clr argument that was used previously.
- const Image* get_representative_image(uint32_t id, const RGBColor* clr = nullptr);
- const Image* get_representative_image(const std::string& map_object_name,
- const RGBColor* clr = nullptr);
-
-private:
- std::vector<std::unique_ptr<Animation>> animations_;
- std::map<std::pair<uint32_t, const RGBColor*>, std::unique_ptr<const Image>>
- representative_images_;
- std::map<std::string, uint32_t> representative_animations_by_map_object_name_;
-};
-
-#endif // end of include guard: WL_GRAPHIC_ANIMATION_H
+ /// For aligning the image on the map
+ Vector2i hotspot_ = Vector2i::zero();
+
+ /// The length of each frame
+ const uint32_t frametime_;
+ /// If this is 'true', don't loop the animation
+ const bool play_once_;
+
+ /// ID of sound effect that will be played at frame 0, or kNoSoundEffect if there is no sound effect to be played.
+ FxId sound_effect_;
+ /// How likely it is that the sound effect will be played
+ int32_t sound_priority_;
+};
+
+#endif // end of include guard: WL_GRAPHIC_ANIMATION_ANIMATION_H
=== added file 'src/graphic/animation/animation_manager.cc'
--- src/graphic/animation/animation_manager.cc 1970-01-01 00:00:00 +0000
+++ src/graphic/animation/animation_manager.cc 2019-08-30 22:19:30 +0000
@@ -0,0 +1,74 @@
+/*
+ * Copyright (C) 2002-2019 by the Widelands Development Team
+ *
+ * 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.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "graphic/animation/animation_manager.h"
+
+#include <memory>
+
+#include "graphic/animation/nonpacked_animation.h"
+#include "graphic/animation/spritesheet_animation.h"
+#include "graphic/graphic.h"
+
+
+uint32_t AnimationManager::load(const LuaTable& table, const std::string& basename, Animation::Type type) {
+ switch (type) {
+ case Animation::Type::kFile:
+ animations_.push_back(std::unique_ptr<Animation>(new NonPackedAnimation(table, basename)));
+ break;
+ case Animation::Type::kSpritesheet:
+ animations_.push_back(std::unique_ptr<Animation>(new SpriteSheetAnimation(table, basename)));
+ }
+ return animations_.size();
+}
+uint32_t AnimationManager::load(const std::string& map_object_name,
+ const LuaTable& table,
+ const std::string& basename, Animation::Type type) {
+ const size_t result = load(table, basename, type);
+ representative_animations_by_map_object_name_.insert(std::make_pair(map_object_name, result));
+ return result;
+}
+
+const Animation& AnimationManager::get_animation(uint32_t id) const {
+ if (!id || id > animations_.size()) {
+ throw wexception("Requested unknown animation with id: %i", id);
+ }
+ return *animations_[id - 1];
+}
+
+const Image* AnimationManager::get_representative_image(uint32_t id, const RGBColor* clr) {
+ const auto hash = std::make_pair(id, clr);
+ if (representative_images_.count(hash) != 1) {
+ representative_images_.insert(std::make_pair(
+ hash, std::unique_ptr<const Image>(
+ std::move(g_gr->animations().get_animation(id).representative_image(clr)))));
+ }
+ return representative_images_.at(hash).get();
+}
+
+const Image* AnimationManager::get_representative_image(const std::string& map_object_name,
+ const RGBColor* clr) {
+ if (representative_animations_by_map_object_name_.count(map_object_name) != 1) {
+ log("Warning: %s has no animation assigned for its representative image, or it's not a known "
+ "map object\n",
+ map_object_name.c_str());
+ return new Texture(0, 0);
+ }
+ return get_representative_image(
+ representative_animations_by_map_object_name_.at(map_object_name), clr);
+}
=== added file 'src/graphic/animation/animation_manager.h'
--- src/graphic/animation/animation_manager.h 1970-01-01 00:00:00 +0000
+++ src/graphic/animation/animation_manager.h 2019-08-30 22:19:30 +0000
@@ -0,0 +1,73 @@
+/*
+ * Copyright (C) 2002-2019 by the Widelands Development Team
+ *
+ * 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.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef WL_GRAPHIC_ANIMATION_ANIMATION_MANAGER_H
+#define WL_GRAPHIC_ANIMATION_ANIMATION_MANAGER_H
+
+#include <map>
+#include <memory>
+#include <vector>
+
+#include "graphic/animation/animation.h"
+#include "graphic/color.h"
+#include "graphic/image.h"
+#include "scripting/lua_table.h"
+
+/**
+* The animation manager manages a list of all active animations.
+*/
+class AnimationManager {
+public:
+ /**
+ * Loads an animation, graphics sound and everything from a Lua table.
+ * For the contents of the Lua table, cf. doc/sphinx/source/animations.rst or https://www.widelands.org/documentation/animations/.
+ *
+ * The 'basename' is the filename prefix for loading the images, e.g. "idle" or "walk_ne".
+ */
+ uint32_t load(const LuaTable& table, const std::string& basename, Animation::Type type);
+ /// Same as above, but this animation will be used for getting a representative image by map
+ /// object name
+ uint32_t load(const std::string& map_object_name, const LuaTable& table, const std::string& basename, Animation::Type type);
+
+ /// Returns the animation with the given ID or throws an exception if it is
+ /// unknown.
+ const Animation& get_animation(uint32_t id) const;
+
+ /// Returns the representative image for the animation with the given 'id', using the given player color.
+ /// If this image has already been generated, it is pulled from the cache using
+ /// the clr argument that was used previously.
+ const Image* get_representative_image(uint32_t id, const RGBColor* clr = nullptr);
+
+ /// Returns the representative image for the given map object, using the given player color.
+ /// If this image has already been generated, it is pulled from the cache using
+ /// the clr argument that was used previously.
+ const Image* get_representative_image(const std::string& map_object_name,
+ const RGBColor* clr = nullptr);
+
+private:
+ /// A list of all known animations
+ std::vector<std::unique_ptr<Animation>> animations_;
+ /// Maps the animations' vector indices + player colors to their representative images
+ std::map<std::pair<uint32_t, const RGBColor*>, std::unique_ptr<const Image>>
+ representative_images_;
+ /// Maps map object names to the ID of the animations that contain their representative images
+ std::map<std::string, uint32_t> representative_animations_by_map_object_name_;
+};
+
+#endif // end of include guard: WL_GRAPHIC_ANIMATION_ANIMATION_MANAGER_H
=== added file 'src/graphic/animation/diranimations.cc'
--- src/graphic/animation/diranimations.cc 1970-01-01 00:00:00 +0000
+++ src/graphic/animation/diranimations.cc 2019-08-30 22:19:30 +0000
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2002-2019 by the Widelands Development Team
+ *
+ * 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.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "graphic/animation/diranimations.h"
+
+DirAnimations::DirAnimations(
+ uint32_t dir1, uint32_t dir2, uint32_t dir3, uint32_t dir4, uint32_t dir5, uint32_t dir6) {
+ animations_[0] = dir1;
+ animations_[1] = dir2;
+ animations_[2] = dir3;
+ animations_[3] = dir4;
+ animations_[4] = dir5;
+ animations_[5] = dir6;
+}
=== renamed file 'src/graphic/diranimations.h' => 'src/graphic/animation/diranimations.h'
--- src/graphic/diranimations.h 2019-02-23 11:00:49 +0000
+++ src/graphic/animation/diranimations.h 2019-08-30 22:19:30 +0000
@@ -17,8 +17,8 @@
*
*/
-#ifndef WL_GRAPHIC_DIRANIMATIONS_H
-#define WL_GRAPHIC_DIRANIMATIONS_H
+#ifndef WL_GRAPHIC_ANIMATION_DIRANIMATIONS_H
+#define WL_GRAPHIC_ANIMATION_DIRANIMATIONS_H
#include <string>
@@ -54,4 +54,4 @@
uint32_t animations_[6];
};
-#endif // end of include guard: WL_GRAPHIC_DIRANIMATIONS_H
+#endif // end of include guard: WL_GRAPHIC_ANIMATION_DIRANIMATIONS_H
=== renamed file 'src/graphic/animation.cc' => 'src/graphic/animation/nonpacked_animation.cc'
--- src/graphic/animation.cc 2019-05-27 21:04:13 +0000
+++ src/graphic/animation/nonpacked_animation.cc 2019-08-30 22:19:30 +0000
@@ -17,124 +17,25 @@
*
*/
-#include "graphic/animation.h"
+#include "graphic/animation/nonpacked_animation.h"
#include <cassert>
#include <cstdio>
#include <limits>
#include <memory>
-#include <set>
#include <boost/algorithm/string/replace.hpp>
#include <boost/format.hpp>
-#include "base/i18n.h"
-#include "base/log.h"
#include "base/macros.h"
-#include "graphic/diranimations.h"
#include "graphic/graphic.h"
#include "graphic/image.h"
-#include "graphic/image_cache.h"
#include "graphic/playercolor.h"
#include "graphic/texture.h"
#include "io/filesystem/filesystem.h"
#include "io/filesystem/layered_filesystem.h"
#include "logic/game_data_error.h"
#include "scripting/lua_table.h"
-#include "sound/note_sound.h"
-#include "sound/sound_handler.h"
-
-namespace {
-// The mipmap scales supported by the engine.
-// Ensure that this always matches supported_scales in data/scripting/mapobjects.lua.
-const std::set<float> kSupportedScales{0.5, 1, 2, 4};
-
-/**
- * Implements the Animation interface for an animation that is unpacked on disk, that
- * is every frame and every pc color frame is an singular file on disk.
- */
-class NonPackedAnimation : public Animation {
-public:
- struct MipMapEntry {
- explicit MipMapEntry(std::vector<std::string> files);
-
- // Loads the graphics if they are not yet loaded.
- void ensure_graphics_are_loaded() const;
-
- // Load the needed graphics from disk.
- void load_graphics();
-
- void blit(uint32_t idx,
- const Rectf& source_rect,
- const Rectf& destination_rect,
- const RGBColor* clr,
- Surface* target) const;
-
- // Whether this image set has player color masks provided
- bool has_playercolor_masks;
-
- // Image files on disk
- std::vector<std::string> image_files;
-
- // Loaded images for each frame
- std::vector<const Image*> frames;
-
- private:
- // Player color mask files on disk
- std::vector<std::string> playercolor_mask_image_files;
-
- // Loaded player color mask images for each frame
- std::vector<const Image*> playercolor_mask_frames;
- };
-
- ~NonPackedAnimation() override {
- }
- explicit NonPackedAnimation(const LuaTable& table, const std::string& basename);
-
- // Implements Animation.
- float height() const override;
- Rectf source_rectangle(int percent_from_bottom, float scale) const override;
- Rectf destination_rectangle(const Vector2f& position,
- const Rectf& source_rect,
- float scale) const override;
- uint16_t nr_frames() const override;
- uint32_t frametime() const override;
- const Image* representative_image(const RGBColor* clr) const override;
- virtual void blit(uint32_t time,
- const Widelands::Coords& coords,
- const Rectf& source_rect,
- const Rectf& destination_rect,
- const RGBColor* clr,
- Surface* target,
- float scale) const override;
- void load_default_scale_and_sounds() const override;
-
-private:
- float find_best_scale(float scale) const;
-
- // TODO(unknown): The chosen semantics of animation sound effects is problematic:
- // What if the game runs very slowly or very quickly?
- void trigger_sound(uint32_t framenumber, const Widelands::Coords& coords) const override;
-
- uint32_t current_frame(uint32_t time) const;
-
- uint32_t frametime_;
- uint16_t nr_frames_;
-
- Vector2i hotspot_;
-
- struct MipMapCompare {
- bool operator()(const float lhs, const float rhs) const {
- return lhs > rhs;
- }
- };
- std::map<float, std::unique_ptr<MipMapEntry>, MipMapCompare> mipmaps_;
-
- // ID of sound effect that will be played at frame 0.
- FxId sound_effect_;
- int32_t sound_priority_;
- bool play_once_;
-};
/*
==============================================================================
@@ -144,8 +45,8 @@
==============================================================================
*/
-NonPackedAnimation::MipMapEntry::MipMapEntry(std::vector<std::string> files)
- : has_playercolor_masks(false), image_files(files) {
+NonPackedAnimation::NonPackedMipMapEntry::NonPackedMipMapEntry(std::vector<std::string> files)
+ : Animation::MipMapEntry(), image_files(files) {
if (image_files.empty()) {
throw Widelands::GameDataError(
"Animation without image files. For a scale of 1.0, the template should look similar to "
@@ -165,19 +66,15 @@
}
assert(!image_files.empty());
- assert(playercolor_mask_image_files.size() == image_files.size() ||
- playercolor_mask_image_files.empty());
}
-// Loads the graphics if they are not yet loaded.
-void NonPackedAnimation::MipMapEntry::ensure_graphics_are_loaded() const {
+void NonPackedAnimation::NonPackedMipMapEntry::ensure_graphics_are_loaded() const {
if (frames.empty()) {
- const_cast<MipMapEntry*>(this)->load_graphics();
+ const_cast<NonPackedMipMapEntry*>(this)->load_graphics();
}
}
-// Load the needed graphics from disk.
-void NonPackedAnimation::MipMapEntry::load_graphics() {
+void NonPackedAnimation::NonPackedMipMapEntry::load_graphics() {
if (image_files.empty()) {
throw Widelands::GameDataError("animation without image files.");
}
@@ -216,7 +113,7 @@
}
}
-void NonPackedAnimation::MipMapEntry::blit(uint32_t idx,
+void NonPackedAnimation::NonPackedMipMapEntry::blit(uint32_t idx,
const Rectf& source_rect,
const Rectf& destination_rect,
const RGBColor* clr,
@@ -233,6 +130,13 @@
}
}
+int NonPackedAnimation::NonPackedMipMapEntry::width() const {
+ return frames.at(0)->width();
+}
+int NonPackedAnimation::NonPackedMipMapEntry::height() const {
+ return frames.at(0)->height();
+}
+
/*
==============================================================================
@@ -242,102 +146,47 @@
*/
NonPackedAnimation::NonPackedAnimation(const LuaTable& table, const std::string& basename)
- : Animation(table.has_key("representative_frame") ? table.get_int("representative_frame") : 0),
- frametime_(FRAME_LENGTH),
- hotspot_(table.get_vector<std::string, int>("hotspot")),
- sound_effect_(kNoSoundEffect),
- sound_priority_(kFxPriorityLowest),
- play_once_(false) {
+ : Animation(table) {
try {
- // Sound
- if (table.has_key("sound_effect")) {
- std::unique_ptr<LuaTable> sound_effects = table.get_table("sound_effect");
- sound_effect_ =
- SoundHandler::register_fx(SoundType::kAmbient, sound_effects->get_string("path"));
-
- if (sound_effects->has_key<std::string>("priority")) {
- sound_priority_ = sound_effects->get_int("priority");
- }
-
- if (sound_priority_ < kFxPriorityLowest) {
- throw Widelands::GameDataError(
- "Minmum priority for sounds is %d, but only %d was specified for %s",
- kFxPriorityLowest, sound_priority_, sound_effects->get_string("path").c_str());
- }
- }
-
- // Repetition
- if (table.has_key("play_once")) {
- play_once_ = table.get_bool("play_once");
- }
-
// Get image files
if (table.has_key("pictures")) {
// TODO(GunChleoc): Old code - remove this option once conversion has been completed
mipmaps_.insert(std::make_pair(
- 1.0f, std::unique_ptr<MipMapEntry>(
- new MipMapEntry(table.get_table("pictures")->array_entries<std::string>()))));
+ 1.0f, std::unique_ptr<NonPackedMipMapEntry>(
+ new NonPackedMipMapEntry(table.get_table("pictures")->array_entries<std::string>()))));
} else {
if (basename.empty() || !table.has_key("directory")) {
throw Widelands::GameDataError(
"Animation did not define both a basename and a directory for its image files");
}
- const std::string directory = table.get_string("directory");
-
- // List files for the given scale, and if we have any, add a mipmap entry for them.
- auto add_scale = [this, basename, directory](
- float scale_as_float, const std::string& scale_as_string) {
- std::vector<std::string> filenames =
- g_fs->get_sequential_files(directory, basename + scale_as_string, "png");
- if (!filenames.empty()) {
- mipmaps_.insert(std::make_pair(
- scale_as_float, std::unique_ptr<MipMapEntry>(new MipMapEntry(filenames))));
- }
- };
- add_scale(0.5f, "_0.5");
- add_scale(1.0f, "_1");
- add_scale(2.0f, "_2");
- add_scale(4.0f, "_4");
-
- if (mipmaps_.count(1.0f) == 0) {
- // There might be only 1 scale
- add_scale(1.0f, "");
- if (mipmaps_.count(1.0f) == 0) {
- // No files found at all
- throw Widelands::GameDataError(
- "Animation in directory '%s' with basename '%s' has no images for mandatory "
- "scale '1' in mipmap - supported scales are: 0.5, 1, 2, 4",
- directory.c_str(), basename.c_str());
- }
- }
+ add_available_scales(basename, table.get_string("directory"));
}
- // Frames and FPS
- nr_frames_ = mipmaps_.begin()->second->image_files.size();
- if (table.has_key("fps")) {
- if (nr_frames_ == 1) {
+ // Frames
+ const NonPackedMipMapEntry& first = dynamic_cast<const NonPackedMipMapEntry&>(*mipmaps_.begin()->second.get());
+ nr_frames_ = first.image_files.size();
+ if (table.has_key("fps") && nr_frames_ == 1) {
throw Widelands::GameDataError("Animation with one picture %s must not have 'fps'",
- mipmaps_.begin()->second->image_files.front().c_str());
- }
- frametime_ = 1000 / get_positive_int(table, "fps");
+ first.image_files.front().c_str());
}
- if (representative_frame_ < 0 || representative_frame_ > nr_frames_ - 1) {
+ if (representative_frame() < 0 || representative_frame() > nr_frames_ - 1) {
throw wexception("Animation has %d as its representative frame, but the frame indices "
"available are 0 - %d",
- representative_frame_, nr_frames_ - 1);
+ representative_frame(), nr_frames_ - 1);
}
// Perform some checks to make sure that the data is complete and consistent
const bool should_have_playercolor = mipmaps_.begin()->second->has_playercolor_masks;
for (const auto& mipmap : mipmaps_) {
- if (mipmap.second->image_files.size() != nr_frames_) {
+ const NonPackedMipMapEntry& nonpacked_mipmap = dynamic_cast<const NonPackedMipMapEntry&>(*mipmap.second.get());
+ if (nonpacked_mipmap.image_files.size() != nr_frames_) {
throw Widelands::GameDataError(
"Mismatched number of images for different scales in animation table: %" PRIuS
" vs. %u at scale %.2f",
- mipmap.second->image_files.size(), nr_frames_, static_cast<double>(mipmap.first));
+ nonpacked_mipmap.image_files.size(), nr_frames_, static_cast<double>(mipmap.first));
}
- if (mipmap.second->has_playercolor_masks != should_have_playercolor) {
+ if (nonpacked_mipmap.has_playercolor_masks != should_have_playercolor) {
throw Widelands::GameDataError(
"Mismatched existence of player colors in animation table for scales %.2f and %.2f",
static_cast<double>(mipmaps_.begin()->first), static_cast<double>(mipmap.first));
@@ -352,40 +201,23 @@
}
}
-float NonPackedAnimation::find_best_scale(float scale) const {
- assert(!mipmaps_.empty());
- float result = mipmaps_.begin()->first;
- for (const auto& mipmap : mipmaps_) {
- // The map is reverse sorted, so we can break as soon as we are lower than the wanted scale
- if (mipmap.first < scale) {
- break;
- }
- result = mipmap.first;
- }
- return result;
-}
-
-float NonPackedAnimation::height() const {
- const MipMapEntry& mipmap = *mipmaps_.at(1.0f);
- mipmap.ensure_graphics_are_loaded();
- return mipmap.frames.front()->height();
-}
-
-uint16_t NonPackedAnimation::nr_frames() const {
- return nr_frames_;
-}
-
-uint32_t NonPackedAnimation::frametime() const {
- return frametime_;
+std::vector<const Image*> NonPackedAnimation::images(float scale) const {
+ const NonPackedMipMapEntry& mipmap = dynamic_cast<const NonPackedMipMapEntry&>(mipmap_entry(scale));
+ return mipmap.frames;
+}
+
+std::vector<const Image*> NonPackedAnimation::pc_masks(float scale) const {
+ const NonPackedMipMapEntry& mipmap = dynamic_cast<const NonPackedMipMapEntry&>(mipmap_entry(scale));
+ return mipmap.playercolor_mask_frames;
}
const Image* NonPackedAnimation::representative_image(const RGBColor* clr) const {
- const MipMapEntry& mipmap = *mipmaps_.at(1.0f);
+ const NonPackedMipMapEntry& mipmap = dynamic_cast<const NonPackedMipMapEntry&>(mipmap_entry(1.0f));
std::vector<std::string> images = mipmap.image_files;
assert(!images.empty());
const Image* image = (mipmap.has_playercolor_masks && clr) ?
- playercolor_image(*clr, images[representative_frame_]) :
- g_gr->images().get(images[representative_frame_]);
+ playercolor_image(*clr, images[representative_frame()]) :
+ g_gr->images().get(images[representative_frame()]);
const int w = image->width();
const int h = image->height();
@@ -395,130 +227,12 @@
return rv;
}
-uint32_t NonPackedAnimation::current_frame(uint32_t time) const {
- if (nr_frames() > 1) {
- return (play_once_ && time / frametime_ > static_cast<uint32_t>(nr_frames() - 1)) ?
- static_cast<uint32_t>(nr_frames() - 1) :
- time / frametime_ % nr_frames();
- }
- return 0;
-}
-
-void NonPackedAnimation::trigger_sound(uint32_t time, const Widelands::Coords& coords) const {
- if (sound_effect_ == kNoSoundEffect || coords == Widelands::Coords::null()) {
- return;
- }
-
- const uint32_t framenumber = current_frame(time);
-
- if (framenumber == 0) {
- Notifications::publish(
- NoteSound(SoundType::kAmbient, sound_effect_, coords, sound_priority_));
- }
-}
-
-Rectf NonPackedAnimation::source_rectangle(const int percent_from_bottom, float scale) const {
- const MipMapEntry& mipmap = *mipmaps_.at(find_best_scale(scale));
- mipmap.ensure_graphics_are_loaded();
- const Image* first_frame = mipmap.frames.front();
- const float h = percent_from_bottom * first_frame->height() / 100;
- // Using floor for pixel perfect positioning
- return Rectf(0.f, std::floor(first_frame->height() - h), first_frame->width(), h);
-}
-
-Rectf NonPackedAnimation::destination_rectangle(const Vector2f& position,
- const Rectf& source_rect,
- const float scale) const {
- const float best_scale = find_best_scale(scale);
- return Rectf(position.x - (hotspot_.x - source_rect.x / best_scale) * scale,
- position.y - (hotspot_.y - source_rect.y / best_scale) * scale,
- source_rect.w * scale / best_scale, source_rect.h * scale / best_scale);
-}
-
-void NonPackedAnimation::blit(uint32_t time,
- const Widelands::Coords& coords,
- const Rectf& source_rect,
- const Rectf& destination_rect,
- const RGBColor* clr,
- Surface* target,
- float scale) const {
- mipmaps_.at(find_best_scale(scale))
- ->blit(current_frame(time), source_rect, destination_rect, clr, target);
- trigger_sound(time, coords);
-}
-
-void NonPackedAnimation::load_default_scale_and_sounds() const {
- mipmaps_.at(1.0f)->ensure_graphics_are_loaded();
- if (sound_effect_ != kNoSoundEffect && !SoundHandler::is_backend_disabled()) {
- g_sh->load_fx(SoundType::kAmbient, sound_effect_);
- }
-}
-
-} // namespace
-
-/*
-==============================================================================
-
-DirAnimations IMPLEMENTAION
-
-==============================================================================
-*/
-
-DirAnimations::DirAnimations(
- uint32_t dir1, uint32_t dir2, uint32_t dir3, uint32_t dir4, uint32_t dir5, uint32_t dir6) {
- animations_[0] = dir1;
- animations_[1] = dir2;
- animations_[2] = dir3;
- animations_[3] = dir4;
- animations_[4] = dir5;
- animations_[5] = dir6;
-}
-
-/*
-==============================================================================
-
-AnimationManager IMPLEMENTATION
-
-==============================================================================
-*/
-uint32_t AnimationManager::load(const LuaTable& table, const std::string& basename) {
- animations_.push_back(std::unique_ptr<Animation>(new NonPackedAnimation(table, basename)));
- return animations_.size();
-}
-uint32_t AnimationManager::load(const std::string& map_object_name,
- const LuaTable& table,
- const std::string& basename) {
- animations_.push_back(std::unique_ptr<Animation>(new NonPackedAnimation(table, basename)));
- const size_t result = animations_.size();
- representative_animations_by_map_object_name_.insert(std::make_pair(map_object_name, result));
- return result;
-}
-
-const Animation& AnimationManager::get_animation(uint32_t id) const {
- if (!id || id > animations_.size())
- throw Widelands::GameDataError("Requested unknown animation with id: %i", id);
-
- return *animations_[id - 1];
-}
-
-const Image* AnimationManager::get_representative_image(uint32_t id, const RGBColor* clr) {
- const auto hash = std::make_pair(id, clr);
- if (representative_images_.count(hash) != 1) {
- representative_images_.insert(std::make_pair(
- hash, std::unique_ptr<const Image>(
- std::move(g_gr->animations().get_animation(id).representative_image(clr)))));
- }
- return representative_images_.at(hash).get();
-}
-
-const Image* AnimationManager::get_representative_image(const std::string& map_object_name,
- const RGBColor* clr) {
- if (representative_animations_by_map_object_name_.count(map_object_name) != 1) {
- log("Warning: %s has no animation assigned for its representative image, or it's not a known "
- "map object\n",
- map_object_name.c_str());
- return new Texture(0, 0);
- }
- return get_representative_image(
- representative_animations_by_map_object_name_.at(map_object_name), clr);
+void NonPackedAnimation::add_scale_if_files_present(const std::string& basename, const std::string& directory,
+ float scale_as_float, const std::string& scale_as_string) {
+ std::vector<std::string> filenames =
+ g_fs->get_sequential_files(directory, basename + scale_as_string, "png");
+ if (!filenames.empty()) {
+ mipmaps_.insert(std::make_pair(
+ scale_as_float, std::unique_ptr<NonPackedMipMapEntry>(new NonPackedMipMapEntry(std::move(filenames)))));
+ }
}
=== added file 'src/graphic/animation/nonpacked_animation.h'
--- src/graphic/animation/nonpacked_animation.h 1970-01-01 00:00:00 +0000
+++ src/graphic/animation/nonpacked_animation.h 2019-08-30 22:19:30 +0000
@@ -0,0 +1,84 @@
+/*
+ * Copyright (C) 2002-2019 by the Widelands Development Team
+ *
+ * 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.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef WL_GRAPHIC_ANIMATION_NONPACKED_ANIMATION_H
+#define WL_GRAPHIC_ANIMATION_NONPACKED_ANIMATION_H
+
+#include <map>
+#include <memory>
+#include <string>
+#include <vector>
+
+#include "base/rect.h"
+#include "base/vector.h"
+#include "graphic/animation/animation.h"
+#include "graphic/color.h"
+#include "graphic/image.h"
+#include "graphic/surface.h"
+#include "scripting/lua_table.h"
+
+/**
+ * Implements the Animation interface for an animation that is unpacked on disk, that
+ * is every frame and every pc color frame is an singular file on disk.
+ */
+class NonPackedAnimation : public Animation {
+public:
+ ~NonPackedAnimation() override = default;
+ explicit NonPackedAnimation(const LuaTable& table, const std::string& basename);
+
+ const Image* representative_image(const RGBColor* clr) const override;
+
+ std::vector<const Image*> images(float scale) const override;
+ std::vector<const Image*> pc_masks(float scale) const override;
+
+private:
+ void add_scale_if_files_present(const std::string& basename, const std::string& directory,
+ float scale_as_float, const std::string& scale_as_string) override;
+
+ struct NonPackedMipMapEntry : Animation::MipMapEntry {
+ explicit NonPackedMipMapEntry(std::vector<std::string> files);
+ ~NonPackedMipMapEntry() override = default;
+
+ void ensure_graphics_are_loaded() const override;
+ void load_graphics() override;
+
+ void blit(uint32_t idx,
+ const Rectf& source_rect,
+ const Rectf& destination_rect,
+ const RGBColor* clr,
+ Surface* target) const override;
+
+ int width() const override;
+ int height() const override;
+
+ /// Image files on disk
+ std::vector<std::string> image_files;
+
+ /// Loaded images for each frame
+ std::vector<const Image*> frames;
+
+ /// Loaded player color mask images for each frame
+ std::vector<const Image*> playercolor_mask_frames;
+
+ private:
+ /// Player color mask files on disk
+ std::vector<std::string> playercolor_mask_image_files;
+ };
+};
+#endif // end of include guard: WL_GRAPHIC_ANIMATION_NONPACKED_ANIMATION_H
=== added file 'src/graphic/animation/spritesheet_animation.cc'
--- src/graphic/animation/spritesheet_animation.cc 1970-01-01 00:00:00 +0000
+++ src/graphic/animation/spritesheet_animation.cc 2019-08-30 22:19:30 +0000
@@ -0,0 +1,222 @@
+/*
+ * Copyright (C) 2019 by the Widelands Development Team
+ *
+ * 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.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "graphic/animation/spritesheet_animation.h"
+
+#include <cassert>
+#include <cstdio>
+#include <limits>
+#include <memory>
+
+#include <boost/algorithm/string/replace.hpp>
+#include <boost/format.hpp>
+
+#include "base/log.h"
+#include "base/macros.h"
+#include "graphic/graphic.h"
+#include "graphic/image.h"
+#include "graphic/playercolor.h"
+#include "graphic/texture.h"
+#include "io/filesystem/filesystem.h"
+#include "io/filesystem/layered_filesystem.h"
+#include "logic/game_data_error.h"
+#include "scripting/lua_table.h"
+
+/*
+==============================================================================
+
+SpriteSheetAnimation::MipMapEntry IMPLEMENTATION
+
+==============================================================================
+*/
+
+SpriteSheetAnimation::SpriteSheetMipMapEntry::SpriteSheetMipMapEntry(const std::string& file, int init_rows, int init_columns)
+ : Animation::MipMapEntry(), sheet(nullptr), playercolor_mask_sheet(nullptr), rows(init_rows), columns(init_columns), w(0), h(0), sheet_file(file), playercolor_mask_sheet_file("") {
+
+ assert(g_fs->file_exists(file));
+
+ playercolor_mask_sheet_file = file;
+ boost::replace_last(playercolor_mask_sheet_file, ".png", "_pc.png");
+ if (g_fs->file_exists(playercolor_mask_sheet_file)) {
+ has_playercolor_masks = true;
+ } else {
+ playercolor_mask_sheet_file = "";
+ }
+}
+
+
+void SpriteSheetAnimation::SpriteSheetMipMapEntry::ensure_graphics_are_loaded() const {
+ if (sheet == nullptr) {
+ const_cast<SpriteSheetMipMapEntry*>(this)->load_graphics();
+ }
+}
+
+void SpriteSheetAnimation::SpriteSheetMipMapEntry::load_graphics() {
+ sheet = g_gr->images().get(sheet_file);
+
+ if (!playercolor_mask_sheet_file.empty()) {
+ playercolor_mask_sheet = g_gr->images().get(playercolor_mask_sheet_file);
+
+ if (sheet->width() != playercolor_mask_sheet->width()) {
+ throw Widelands::GameDataError(
+ "animation sprite sheet has width %d but playercolor mask sheet has width %d. The sheet's image is %s",
+ sheet->width(), playercolor_mask_sheet->width(), sheet_file.c_str());
+ }
+ if (sheet->height() != playercolor_mask_sheet->height()) {
+ throw Widelands::GameDataError(
+ "animation sprite sheet has height %d but playercolor mask sheet has height %d. The sheet's image is %s",
+ sheet->height(), playercolor_mask_sheet->height(), sheet_file.c_str());
+ }
+ }
+
+ // Frame width and height
+ w = sheet->width() / columns;
+ h = sheet->height() / rows;
+}
+
+void SpriteSheetAnimation::SpriteSheetMipMapEntry::blit(uint32_t idx,
+ const Rectf& source_rect,
+ const Rectf& destination_rect,
+ const RGBColor* clr,
+ Surface* target) const {
+ assert(sheet != nullptr);
+ assert(target);
+ assert(static_cast<int>(idx) <= columns * rows);
+
+ const int column = idx % columns;
+ const int row = idx / columns;
+
+ Rectf frame_rect(source_rect.x + column * width(), source_rect.y + row * height(),
+ source_rect.w, source_rect.h);
+
+ if (!has_playercolor_masks || clr == nullptr) {
+ target->blit(destination_rect, *sheet, frame_rect, 1., BlendMode::UseAlpha);
+ } else {
+ assert(playercolor_mask_sheet != nullptr);
+ target->blit_blended(
+ destination_rect, *sheet, *playercolor_mask_sheet, frame_rect, *clr);
+ }
+}
+
+int SpriteSheetAnimation::SpriteSheetMipMapEntry::width() const {
+ return w;
+}
+int SpriteSheetAnimation::SpriteSheetMipMapEntry::height() const {
+ return h;
+}
+
+/*
+==============================================================================
+
+SpriteSheetAnimation IMPLEMENTATION
+
+==============================================================================
+*/
+
+SpriteSheetAnimation::SpriteSheetAnimation(const LuaTable& table, const std::string& basename)
+ : Animation(table) {
+ try {
+ // Get image files
+ if (basename.empty() || !table.has_key("directory")) {
+ throw Widelands::GameDataError(
+ "Animation did not define both a basename and a directory for its sprite sheet file");
+ }
+ const std::string directory = table.get_string("directory");
+
+ // Frames, rows and columns
+ nr_frames_ = table.get_int("frames");
+ rows_ = table.get_int("rows");
+ columns_ = table.get_int("columns");
+
+ add_available_scales(basename, directory);
+
+ // Perform some checks to make sure that the data is complete and consistent
+ const SpriteSheetMipMapEntry& first = dynamic_cast<const SpriteSheetMipMapEntry&>(*mipmaps_.begin()->second.get());
+ if (table.has_key("fps") && nr_frames_ == 1) {
+ throw Widelands::GameDataError("'%s' sprite sheet animation with one frame must not have 'fps'",
+ basename.c_str());
+ }
+
+ if (representative_frame() < 0 || representative_frame() > nr_frames_ - 1) {
+ throw Widelands::GameDataError("Animation has %d as its representative frame, but the frame indices "
+ "available are 0 - %d",
+ representative_frame(), nr_frames_ - 1);
+ }
+
+ if (rows_ * columns_ < nr_frames_) {
+ throw Widelands::GameDataError("Animation has %d frames, which does not fit into %d rows x %d columns",
+ nr_frames_, rows_, columns_);
+ }
+
+ const bool should_have_playercolor = first.has_playercolor_masks;
+ for (const auto& mipmap : mipmaps_) {
+ if (first.has_playercolor_masks != should_have_playercolor) {
+ throw Widelands::GameDataError(
+ "Mismatched existence of player colors in animation table for scales %.2f and %.2f",
+ static_cast<double>(mipmaps_.begin()->first), static_cast<double>(mipmap.first));
+ }
+ }
+ if (mipmaps_.count(1.0f) != 1) {
+ throw Widelands::GameDataError(
+ "All animations must provide images for the neutral scale (1.0)");
+ }
+ } catch (const LuaError& e) {
+ throw Widelands::GameDataError("Error in animation table: %s", e.what());
+ }
+}
+
+std::vector<const Image*> SpriteSheetAnimation::images(float) const {
+ // We only need to implement this if we add compressed spritemaps, or maybe for usage in a test
+ log("ERROR: Accessing image files is not supported by spritesheets\n");
+ NEVER_HERE();
+}
+
+std::vector<const Image*> SpriteSheetAnimation::pc_masks(float) const {
+ // We only need to implement this if we add compressed spritemaps, or maybe for usage in a test
+ log("ERROR: Accessing image files is not supported by spritesheets\n");
+ NEVER_HERE();
+}
+
+const Image* SpriteSheetAnimation::representative_image(const RGBColor* clr) const {
+ const SpriteSheetMipMapEntry& mipmap = dynamic_cast<const SpriteSheetMipMapEntry&>(mipmap_entry(1.0f));
+ const int column = representative_frame() % columns_;
+ const int row = representative_frame() / columns_;
+ const int w = width();
+ const int h = height();
+
+ Texture* rv = new Texture(w, h);
+ Rectf rect(Vector2f::zero(), w, h);
+ if (mipmap.has_playercolor_masks && clr) {
+ rv->fill_rect(rect, RGBAColor(0, 0, 0, 0));
+ rv->blit_blended(Rectf(column * w, row * h, w, h), *mipmap.sheet, *mipmap.playercolor_mask_sheet, rect, *clr);
+ } else {
+ rv->blit(Rectf(column * w, row * h, w, h), *mipmap.sheet, rect, 1., BlendMode::Copy);
+ }
+ return rv;
+}
+
+void SpriteSheetAnimation::add_scale_if_files_present(const std::string& basename, const std::string& directory,
+ float scale_as_float, const std::string& scale_as_string) {
+ const std::string path =
+ directory + g_fs->file_separator() + basename + scale_as_string + ".png";
+ if (g_fs->file_exists(path)) {
+ mipmaps_.insert(std::make_pair(
+ scale_as_float, std::unique_ptr<SpriteSheetMipMapEntry>(new SpriteSheetMipMapEntry(path, rows_, columns_))));
+ }
+}
=== added file 'src/graphic/animation/spritesheet_animation.h'
--- src/graphic/animation/spritesheet_animation.h 1970-01-01 00:00:00 +0000
+++ src/graphic/animation/spritesheet_animation.h 2019-08-30 22:19:30 +0000
@@ -0,0 +1,96 @@
+/*
+ * Copyright (C) 2019 by the Widelands Development Team
+ *
+ * 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.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef WL_GRAPHIC_ANIMATION_SPRITESHEET_ANIMATION_H
+#define WL_GRAPHIC_ANIMATION_SPRITESHEET_ANIMATION_H
+
+#include <map>
+#include <memory>
+#include <string>
+#include <vector>
+
+#include "base/rect.h"
+#include "base/vector.h"
+#include "graphic/animation/animation.h"
+#include "graphic/color.h"
+#include "graphic/image.h"
+#include "graphic/surface.h"
+#include "scripting/lua_table.h"
+
+/**
+ * Implements the Animation interface for an animation where the images are in a spritesheet.
+ */
+class SpriteSheetAnimation : public Animation {
+public:
+ ~SpriteSheetAnimation() override = default;
+ explicit SpriteSheetAnimation(const LuaTable& table, const std::string& basename);
+
+ const Image* representative_image(const RGBColor* clr) const override;
+
+ std::vector<const Image*> images(float scale) const override;
+ std::vector<const Image*> pc_masks(float scale) const override;
+
+private:
+ void add_scale_if_files_present(const std::string& basename, const std::string& directory,
+ float scale_as_float, const std::string& scale_as_string) override;
+
+ struct SpriteSheetMipMapEntry : Animation::MipMapEntry {
+ explicit SpriteSheetMipMapEntry(const std::string& file, int init_rows, int columns);
+
+ void ensure_graphics_are_loaded() const override;
+ void load_graphics() override;
+
+ void blit(uint32_t idx,
+ const Rectf& source_rect,
+ const Rectf& destination_rect,
+ const RGBColor* clr,
+ Surface* target) const override;
+
+ int width() const override;
+ int height() const override;
+
+ /// Loaded sprite sheet for all frames
+ const Image* sheet;
+
+ /// Loaded player color mask sprite sheet for all frames
+ const Image* playercolor_mask_sheet;
+
+ /// Number of rows for the spritesheets
+ const int rows;
+ /// Number of columns for the spritesheets
+ const int columns;
+ /// Texture width
+ int w;
+ /// Texture height
+ int h;
+
+ private:
+ /// Sprite sheet file name on disk
+ const std::string sheet_file;
+
+ /// Player color mask file on disk
+ std::string playercolor_mask_sheet_file;
+ };
+
+ /// Number of rows for the spritesheets
+ int rows_;
+ /// Number of columns for the spritesheets
+ int columns_;
+};
+#endif // end of include guard: WL_GRAPHIC_ANIMATION_SPRITESHEET_ANIMATION_H
=== modified file 'src/graphic/graphic.cc'
--- src/graphic/graphic.cc 2019-03-12 20:55:44 +0000
+++ src/graphic/graphic.cc 2019-08-30 22:19:30 +0000
@@ -26,7 +26,7 @@
#include "base/wexception.h"
#include "build_info.h"
#include "graphic/align.h"
-#include "graphic/animation.h"
+#include "graphic/animation/animation_manager.h"
#include "graphic/build_texture_atlas.h"
#include "graphic/gl/initialize.h"
#include "graphic/gl/system_headers.h"
=== modified file 'src/graphic/rendertarget.cc'
--- src/graphic/rendertarget.cc 2019-05-27 14:28:34 +0000
+++ src/graphic/rendertarget.cc 2019-08-30 22:19:30 +0000
@@ -21,7 +21,8 @@
#include "base/macros.h"
#include "graphic/align.h"
-#include "graphic/animation.h"
+#include "graphic/animation/animation.h"
+#include "graphic/animation/animation_manager.h"
#include "graphic/graphic.h"
#include "graphic/surface.h"
=== modified file 'src/graphic/text/rt_render.cc'
--- src/graphic/text/rt_render.cc 2019-05-26 17:21:15 +0000
+++ src/graphic/text/rt_render.cc 2019-08-30 22:19:30 +0000
@@ -36,7 +36,8 @@
#include "base/vector.h"
#include "base/wexception.h"
#include "graphic/align.h"
-#include "graphic/animation.h"
+#include "graphic/animation/animation.h"
+#include "graphic/animation/animation_manager.h"
#include "graphic/graphic.h"
#include "graphic/image_cache.h"
#include "graphic/image_io.h"
=== modified file 'src/logic/CMakeLists.txt'
--- src/logic/CMakeLists.txt 2019-08-27 19:00:30 +0000
+++ src/logic/CMakeLists.txt 2019-08-30 22:19:30 +0000
@@ -230,6 +230,7 @@
economy
game_io
graphic
+ graphic_animation
graphic_color
graphic_playercolor
io_fileread
=== modified file 'src/logic/map_objects/bob.h'
--- src/logic/map_objects/bob.h 2019-04-24 06:01:37 +0000
+++ src/logic/map_objects/bob.h 2019-08-30 22:19:30 +0000
@@ -23,8 +23,7 @@
#include "base/macros.h"
#include "base/vector.h"
#include "economy/route.h"
-#include "graphic/animation.h"
-#include "graphic/diranimations.h"
+#include "graphic/animation/diranimations.h"
#include "logic/map_objects/draw_text.h"
#include "logic/map_objects/map_object.h"
#include "logic/map_objects/walkingdir.h"
=== modified file 'src/logic/map_objects/immovable.cc'
--- src/logic/map_objects/immovable.cc 2019-05-28 17:01:30 +0000
+++ src/logic/map_objects/immovable.cc 2019-08-30 22:19:30 +0000
@@ -30,6 +30,7 @@
#include "base/macros.h"
#include "base/wexception.h"
#include "config.h"
+#include "graphic/animation/animation_manager.h"
#include "graphic/graphic.h"
#include "graphic/rendertarget.h"
#include "helper.h"
=== modified file 'src/logic/map_objects/immovable.h'
--- src/logic/map_objects/immovable.h 2019-04-24 06:01:37 +0000
+++ src/logic/map_objects/immovable.h 2019-08-30 22:19:30 +0000
@@ -24,7 +24,6 @@
#include <unordered_map>
#include "base/macros.h"
-#include "graphic/animation.h"
#include "logic/map_objects/buildcost.h"
#include "logic/map_objects/draw_text.h"
#include "logic/map_objects/map_object.h"
=== modified file 'src/logic/map_objects/map_object.cc'
--- src/logic/map_objects/map_object.cc 2019-05-27 21:04:13 +0000
+++ src/logic/map_objects/map_object.cc 2019-08-30 22:19:30 +0000
@@ -29,6 +29,7 @@
#include "base/log.h"
#include "base/wexception.h"
+#include "graphic/animation/animation_manager.h"
#include "graphic/font_handler.h"
#include "graphic/graphic.h"
#include "graphic/rendertarget.h"
@@ -242,13 +243,20 @@
init_name,
init_descname,
table.has_key("helptext_script") ? table.get_string("helptext_script") : "") {
+ bool has_animations = false;
if (table.has_key("animations")) {
- add_animations(*table.get_table("animations"));
+ has_animations = true;
+ add_animations(*table.get_table("animations"), Animation::Type::kFile);
+ }
+ if (table.has_key("spritesheets")) {
+ has_animations = true;
+ add_animations(*table.get_table("spritesheets"), Animation::Type::kSpritesheet);
+ }
+ if (has_animations) {
if (!is_animation_known("idle")) {
throw GameDataError(
"Map object %s has animations but no idle animation", init_name.c_str());
}
-
assert(g_gr->animations().get_representative_image(name())->width() > 0);
}
if (table.has_key("icon")) {
@@ -273,7 +281,7 @@
/**
* Add all animations for this map object
*/
-void MapObjectDescr::add_animations(const LuaTable& table) {
+void MapObjectDescr::add_animations(const LuaTable& table, Animation::Type anim_type) {
for (const std::string& animname : table.keys<std::string>()) {
try {
std::unique_ptr<LuaTable> anim = table.get_table(animname);
@@ -293,7 +301,7 @@
const std::string directional_basename =
basename + animation_direction_names[dir - 1];
anims_.insert(std::pair<std::string, uint32_t>(
- directional_animname, g_gr->animations().load(*anim, directional_basename)));
+ directional_animname, g_gr->animations().load(*anim, directional_basename, anim_type)));
}
} else {
if (is_animation_known(animname)) {
@@ -302,10 +310,10 @@
}
if (animname == "idle") {
anims_.insert(std::pair<std::string, uint32_t>(
- animname, g_gr->animations().load(name_, *anim, basename)));
+ animname, g_gr->animations().load(name_, *anim, basename, anim_type)));
} else {
anims_.insert(std::pair<std::string, uint32_t>(
- animname, g_gr->animations().load(*anim, basename)));
+ animname, g_gr->animations().load(*anim, basename, anim_type)));
}
}
} catch (const std::exception& e) {
=== modified file 'src/logic/map_objects/map_object.h'
--- src/logic/map_objects/map_object.h 2019-05-25 08:51:42 +0000
+++ src/logic/map_objects/map_object.h 2019-08-30 22:19:30 +0000
@@ -32,6 +32,8 @@
#include "base/log.h"
#include "base/macros.h"
+#include "graphic/animation/animation.h"
+#include "graphic/animation/diranimations.h"
#include "graphic/color.h"
#include "graphic/image.h"
#include "logic/cmd_queue.h"
@@ -43,7 +45,6 @@
class FileRead;
class RenderTarget;
-struct DirAnimations;
namespace Widelands {
@@ -157,7 +158,7 @@
void assign_directional_animation(DirAnimations* anims, const std::string& basename);
private:
- void add_animations(const LuaTable& table);
+ void add_animations(const LuaTable& table, Animation::Type anim_type);
/// Throws an exception if the MapObjectDescr has no representative image
void check_representative_image();
=== modified file 'src/logic/map_objects/tribes/constructionsite.cc'
--- src/logic/map_objects/tribes/constructionsite.cc 2019-06-23 11:41:17 +0000
+++ src/logic/map_objects/tribes/constructionsite.cc 2019-08-30 22:19:30 +0000
@@ -27,7 +27,8 @@
#include "base/macros.h"
#include "base/wexception.h"
#include "economy/wares_queue.h"
-#include "graphic/animation.h"
+#include "graphic/animation/animation.h"
+#include "graphic/animation/animation_manager.h"
#include "graphic/graphic.h"
#include "graphic/rendertarget.h"
#include "logic/editor_game_base.h"
@@ -78,25 +79,25 @@
++animation_index;
assert(animation_index < animations.size());
}
- const uint32_t anim_time = frame_index * FRAME_LENGTH;
+ const uint32_t anim_time = frame_index * kFrameLength;
if (frame_index > 0) {
// Not the first pic within this animation – draw the previous one
dst->blit_animation(point_on_dst, Widelands::Coords::null(), scale,
- animations[animation_index].first, anim_time - FRAME_LENGTH,
+ animations[animation_index].first, anim_time - kFrameLength,
&player_color);
} else if (animation_index > 0) {
// The first pic, but not the first series of animations – draw the last pic of the previous
// series
dst->blit_animation(
point_on_dst, Widelands::Coords::null(), scale, animations[animation_index - 1].first,
- FRAME_LENGTH * (animations[animation_index - 1].second - 1), &player_color);
+ kFrameLength * (animations[animation_index - 1].second - 1), &player_color);
} else if (was) {
// First pic in first series, but there was another building here before –
// get its most fitting picture and draw it instead
const uint32_t unocc = was->get_unoccupied_animation();
dst->blit_animation(point_on_dst, Widelands::Coords::null(), scale, unocc,
- FRAME_LENGTH * (g_gr->animations().get_animation(unocc).nr_frames() - 1),
+ kFrameLength * (g_gr->animations().get_animation(unocc).nr_frames() - 1),
&player_color);
}
// Now blit a segment of the current construction phase from the bottom.
=== modified file 'src/logic/map_objects/tribes/dismantlesite.cc'
--- src/logic/map_objects/tribes/dismantlesite.cc 2019-05-26 17:21:15 +0000
+++ src/logic/map_objects/tribes/dismantlesite.cc 2019-08-30 22:19:30 +0000
@@ -27,7 +27,6 @@
#include "base/macros.h"
#include "base/wexception.h"
#include "economy/wares_queue.h"
-#include "graphic/animation.h"
#include "graphic/rendertarget.h"
#include "logic/editor_game_base.h"
#include "logic/game.h"
=== modified file 'src/logic/map_objects/tribes/ship.h'
--- src/logic/map_objects/tribes/ship.h 2019-04-24 06:51:31 +0000
+++ src/logic/map_objects/tribes/ship.h 2019-08-30 22:19:30 +0000
@@ -25,7 +25,7 @@
#include "base/macros.h"
#include "economy/shippingitem.h"
-#include "graphic/diranimations.h"
+#include "graphic/animation/diranimations.h"
#include "logic/map_objects/bob.h"
namespace Widelands {
=== modified file 'src/logic/map_objects/tribes/soldier.cc'
--- src/logic/map_objects/tribes/soldier.cc 2019-05-27 14:25:47 +0000
+++ src/logic/map_objects/tribes/soldier.cc 2019-08-30 22:19:30 +0000
@@ -30,6 +30,7 @@
#include "base/wexception.h"
#include "economy/economy.h"
#include "economy/flag.h"
+#include "graphic/animation/animation_manager.h"
#include "graphic/graphic.h"
#include "graphic/rendertarget.h"
#include "helper.h"
=== modified file 'src/logic/map_objects/tribes/tribe_descr.cc'
--- src/logic/map_objects/tribes/tribe_descr.cc 2019-05-30 19:34:33 +0000
+++ src/logic/map_objects/tribes/tribe_descr.cc 2019-08-30 22:19:30 +0000
@@ -29,6 +29,7 @@
#include "base/i18n.h"
#include "base/macros.h"
#include "base/wexception.h"
+#include "graphic/animation/animation_manager.h"
#include "graphic/graphic.h"
#include "io/filesystem/layered_filesystem.h"
#include "logic/game.h"
@@ -67,11 +68,13 @@
std::unique_ptr<LuaTable> animations_table = items_table->get_table("frontier");
frontier_animation_id_ =
g_gr->animations().load(name_ + std::string("_frontier"), *animations_table,
- animations_table->get_string("basename"));
+ animations_table->get_string("basename"),
+ animations_table->has_key("columns") ? Animation::Type::kSpritesheet : Animation::Type::kFile);
animations_table = items_table->get_table("flag");
flag_animation_id_ =
- g_gr->animations().load(name_ + std::string("_frontier"), *animations_table,
- animations_table->get_string("basename"));
+ g_gr->animations().load(name_ + std::string("_flag"), *animations_table,
+ animations_table->get_string("basename"),
+ animations_table->has_key("columns") ? Animation::Type::kSpritesheet : Animation::Type::kFile);
}
items_table = table.get_table("roads");
@@ -121,26 +124,8 @@
items_table = table.get_table("workers_order");
for (const int key : items_table->keys<int>()) {
std::vector<DescriptionIndex> column;
- std::vector<std::string> workernames =
- items_table->get_table(key)->array_entries<std::string>();
- for (size_t rowindex = 0; rowindex < workernames.size(); ++rowindex) {
- try {
- DescriptionIndex workerindex = tribes_.safe_worker_index(workernames[rowindex]);
- if (has_worker(workerindex)) {
- throw GameDataError(
- "Duplicate definition of worker '%s'", workernames[rowindex].c_str());
- }
- workers_.insert(workerindex);
- column.push_back(workerindex);
-
- const WorkerDescr& worker_descr = *tribes_.get_worker_descr(workerindex);
- if (worker_descr.is_buildable() && worker_descr.buildcost().empty()) {
- worker_types_without_cost_.push_back(workerindex);
- }
- } catch (const WException& e) {
- throw GameDataError(
- "Failed adding worker '%s: %s", workernames[rowindex].c_str(), e.what());
- }
+ for (const std::string& workername : items_table->get_table(key)->array_entries<std::string>()) {
+ add_worker(workername, column);
}
if (!column.empty()) {
workers_order_.push_back(column);
@@ -448,6 +433,30 @@
}
}
+void TribeDescr::add_worker(const std::string& workername, std::vector<DescriptionIndex>& workers_order_column) {
+ try {
+ DescriptionIndex workerindex = tribes_.safe_worker_index(workername);
+ if (has_worker(workerindex)) {
+ throw GameDataError(
+ "Duplicate definition of worker '%s'", workername.c_str());
+ }
+ workers_.insert(workerindex);
+ workers_order_column.push_back(workerindex);
+
+ const WorkerDescr& worker_descr = *tribes_.get_worker_descr(workerindex);
+ if (worker_descr.is_buildable() && worker_descr.buildcost().empty()) {
+ worker_types_without_cost_.push_back(workerindex);
+ }
+ } catch (const WException& e) {
+ throw GameDataError(
+ "Failed adding worker '%s: %s", workername.c_str(), e.what());
+ }
+}
+
+void TribeDescr::add_worker(const std::string& workername) {
+ add_worker(workername, workers_order_.back());
+}
+
ToolbarImageset* TribeDescr::toolbar_image_set() const {
return toolbar_image_set_.get();
}
=== modified file 'src/logic/map_objects/tribes/tribe_descr.h'
--- src/logic/map_objects/tribes/tribe_descr.h 2019-05-30 19:34:33 +0000
+++ src/logic/map_objects/tribes/tribe_descr.h 2019-08-30 22:19:30 +0000
@@ -25,7 +25,7 @@
#include <vector>
#include "base/macros.h"
-#include "graphic/animation.h"
+#include "graphic/animation/animation.h"
#include "graphic/toolbar_imageset.h"
#include "logic/map_objects/immovable.h"
#include "logic/map_objects/tribes/building.h"
@@ -161,12 +161,18 @@
return ship_names_;
}
+ /// Registers a building with the tribe
void add_building(const std::string& buildingname);
+ /// Registers a worker with the tribe and adds it to the bottom of the last worker column
+ void add_worker(const std::string& workername);
// The custom toolbar imageset if any. Can be nullptr.
ToolbarImageset* toolbar_image_set() const;
private:
+ /// Registers a worker with the tribe and adds it to the bottom of the given worker column
+ void add_worker(const std::string& workername, std::vector<DescriptionIndex>& workers_order_column);
+
// Helper function for adding a special worker type (carriers etc.)
DescriptionIndex add_special_worker(const std::string& workername);
// Helper function for adding a special building type (port etc.)
=== modified file 'src/logic/map_objects/tribes/tribes.cc'
--- src/logic/map_objects/tribes/tribes.cc 2019-06-23 12:45:29 +0000
+++ src/logic/map_objects/tribes/tribes.cc 2019-08-30 22:19:30 +0000
@@ -149,6 +149,16 @@
}
}
+void Tribes::add_custom_worker(const LuaTable& table) {
+ const std::string tribename = table.get_string("tribename");
+ if (Widelands::tribe_exists(tribename)) {
+ TribeDescr* descr = tribes_->get_mutable(tribe_index(tribename));
+ descr->add_worker(table.get_string("workername"));
+ } else {
+ throw GameDataError("The tribe '%s'' has no preload file.", tribename.c_str());
+ }
+}
+
size_t Tribes::nrbuildings() const {
return buildings_->size();
}
=== modified file 'src/logic/map_objects/tribes/tribes.h'
--- src/logic/map_objects/tribes/tribes.h 2019-05-16 09:15:03 +0000
+++ src/logic/map_objects/tribes/tribes.h 2019-08-30 22:19:30 +0000
@@ -94,7 +94,10 @@
/// Adds a specific tribe's configuration.
void add_tribe(const LuaTable& table);
+ /// Registers a custom scenario building with the tribes
void add_custom_building(const LuaTable& table);
+ /// Registers a custom scenario worker with the tribes
+ void add_custom_worker(const LuaTable& table);
size_t nrbuildings() const;
size_t nrtribes() const;
=== modified file 'src/logic/map_objects/tribes/ware_descr.cc'
--- src/logic/map_objects/tribes/ware_descr.cc 2019-05-22 11:23:14 +0000
+++ src/logic/map_objects/tribes/ware_descr.cc 2019-08-30 22:19:30 +0000
@@ -24,7 +24,6 @@
#include <boost/format.hpp>
#include "base/i18n.h"
-#include "graphic/animation.h"
#include "logic/game_data_error.h"
#include "logic/map_objects/tribes/tribe_descr.h"
=== modified file 'src/logic/map_objects/tribes/worker_descr.cc'
--- src/logic/map_objects/tribes/worker_descr.cc 2019-05-25 08:51:42 +0000
+++ src/logic/map_objects/tribes/worker_descr.cc 2019-08-30 22:19:30 +0000
@@ -95,8 +95,6 @@
assign_directional_animation(&walk_anims_, "walk");
// Many workers don't carry wares, so they have no walkload animation.
- std::unique_ptr<LuaTable> anims(table.get_table("animations"));
- anims->do_not_warn_about_unaccessed_keys();
if (is_animation_known("walkload_e")) {
assign_directional_animation(&walkload_anims_, "walkload");
}
=== modified file 'src/logic/map_objects/tribes/worker_descr.h'
--- src/logic/map_objects/tribes/worker_descr.h 2019-05-26 11:45:16 +0000
+++ src/logic/map_objects/tribes/worker_descr.h 2019-08-30 22:19:30 +0000
@@ -24,7 +24,7 @@
#include "ai/ai_hints.h"
#include "base/macros.h"
-#include "graphic/diranimations.h"
+#include "graphic/animation/diranimations.h"
#include "logic/map_objects/bob.h"
#include "logic/map_objects/immovable.h"
#include "scripting/lua_table.h"
=== modified file 'src/logic/map_objects/world/critter.h'
--- src/logic/map_objects/world/critter.h 2019-02-23 11:00:49 +0000
+++ src/logic/map_objects/world/critter.h 2019-08-30 22:19:30 +0000
@@ -21,7 +21,7 @@
#define WL_LOGIC_MAP_OBJECTS_WORLD_CRITTER_H
#include "base/macros.h"
-#include "graphic/diranimations.h"
+#include "graphic/animation/diranimations.h"
#include "logic/map_objects/bob.h"
class LuaTable;
=== modified file 'src/logic/map_objects/world/terrain_description.cc'
--- src/logic/map_objects/world/terrain_description.cc 2019-02-23 11:00:49 +0000
+++ src/logic/map_objects/world/terrain_description.cc 2019-08-30 22:19:30 +0000
@@ -24,7 +24,7 @@
#include <boost/format.hpp>
#include "base/i18n.h"
-#include "graphic/animation.h"
+#include "graphic/animation/animation.h"
#include "graphic/graphic.h"
#include "graphic/texture.h"
#include "logic/game_data_error.h"
@@ -124,7 +124,7 @@
}
texture_paths_ = table.get_table("textures")->array_entries<std::string>();
- frame_length_ = FRAME_LENGTH;
+ frame_length_ = kFrameLength;
if (texture_paths_.empty()) {
throw GameDataError("Terrain %s has no images.", name_.c_str());
} else if (texture_paths_.size() == 1) {
=== modified file 'src/scripting/lua_root.cc'
--- src/scripting/lua_root.cc 2019-03-01 04:19:53 +0000
+++ src/scripting/lua_root.cc 2019-08-30 22:19:30 +0000
@@ -540,6 +540,7 @@
METHOD(LuaTribes, new_warehouse_type),
METHOD(LuaTribes, new_worker_type),
METHOD(LuaTribes, add_custom_building),
+ METHOD(LuaTribes, add_custom_worker),
{0, 0},
};
const PropertyType<LuaTribes> LuaTribes::Properties[] = {
@@ -926,6 +927,41 @@
return 0;
}
+
+/* RST
+ .. method:: add_custom_worker{table}
+
+ Adds a worker building to a tribe, e.g. for use in a scenario.
+ The worker must already be known to the tribes and should be defined in
+ the ``map:scripting/tribes/`` directory.
+
+ **Note:** This function *has* to be called from ``map:scripting/tribes/init.lua``.
+
+ The table has the following entries:
+
+ **tribename**
+ *Mandatory*. The name of the tribe that this worker will be added to.
+
+ **workername**
+ *Mandatory*. The name of the worker to be added to the tribe.
+
+ :returns: :const:`0`
+*/
+int LuaTribes::add_custom_worker(lua_State* L) {
+ if (lua_gettop(L) != 2) {
+ report_error(L, "Takes only one argument.");
+ }
+
+ try {
+ LuaTable table(L); // Will pop the table eventually.
+ EditorGameBase& egbase = get_egbase(L);
+ egbase.mutable_tribes()->add_custom_worker(table);
+ } catch (std::exception& e) {
+ report_error(L, "%s", e.what());
+ }
+ return 0;
+}
+
/*
==========================================================
C METHODS
=== modified file 'src/scripting/lua_root.h'
--- src/scripting/lua_root.h 2019-02-23 11:00:49 +0000
+++ src/scripting/lua_root.h 2019-08-30 22:19:30 +0000
@@ -173,6 +173,7 @@
int new_warehouse_type(lua_State* L);
int new_worker_type(lua_State* L);
int add_custom_building(lua_State* L);
+ int add_custom_worker(lua_State* L);
/*
* C methods
=== modified file 'src/website/CMakeLists.txt'
--- src/website/CMakeLists.txt 2019-05-04 15:37:33 +0000
+++ src/website/CMakeLists.txt 2019-08-30 22:19:30 +0000
@@ -1,3 +1,4 @@
+add_subdirectory(lua)
add_subdirectory(json)
wl_library(website_common
@@ -12,6 +13,23 @@
io_filesystem
)
+wl_binary(wl_create_spritesheet
+ SRCS
+ create_spritesheet.cc
+ DEPENDS
+ base_log
+ base_macros
+ graphic
+ graphic_animation
+ graphic_image_io
+ graphic_surface
+ io_filesystem
+ logic
+ logic_constants
+ lua_tree
+ website_common
+)
+
wl_binary(wl_map_info
SRCS
=== added file 'src/website/create_spritesheet.cc'
--- src/website/create_spritesheet.cc 1970-01-01 00:00:00 +0000
+++ src/website/create_spritesheet.cc 2019-08-30 22:19:30 +0000
@@ -0,0 +1,361 @@
+/*
+ * Copyright (C) 2018-2019 by the Widelands Development Team
+ *
+ * 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.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ */
+
+#include <cassert>
+#include <memory>
+#include <vector>
+
+#include <SDL.h>
+#include <boost/algorithm/string.hpp>
+#include <boost/format.hpp>
+
+#include "base/log.h"
+#include "base/macros.h"
+#include "graphic/animation/animation.h"
+#include "graphic/animation/animation_manager.h"
+#include "graphic/graphic.h"
+#include "graphic/image.h"
+#include "graphic/image_io.h"
+#include "io/filesystem/filesystem.h"
+#include "io/filesystem/layered_filesystem.h"
+#include "logic/editor_game_base.h"
+#include "logic/map_objects/tribes/tribes.h"
+#include "logic/map_objects/world/critter.h"
+#include "logic/map_objects/world/world.h"
+#include "logic/widelands.h"
+#include "website/lua/lua_tree.h"
+#include "website/website_common.h"
+
+namespace {
+char const* const animation_direction_names[6] = {"_ne", "_e", "_se", "_sw", "_w", "_nw"};
+
+// Find trimmed rect according to transparent pixels.
+// Lock texture before you call this function.
+// TODO(GunChleoc): Revisit trimming when we have fresh Blender exports, to make sure that we won't jump a pixel when zooming
+void find_trim_rect(Texture* texture, Recti* rect) {
+ const int max_x = texture->width();
+ const int max_y = texture->height();
+
+ // Find left margin
+ bool found = false;
+ for (int x = 0; x < max_x && !found; ++x) {
+ for (int y = 0; y < max_y && !found; ++y) {
+ RGBAColor pixel = texture->get_pixel(x, y);
+ if (pixel.a != 0) {
+ rect->x = std::min(rect->x, x - 1);
+ found = true;
+ }
+ }
+ }
+ // Find right margin
+ found = false;
+ for (int x = max_x - 1; x >= 0 && !found; --x) {
+ for (int y = 0; y < max_y && !found; ++y) {
+ RGBAColor pixel = texture->get_pixel(x, y);
+ if (pixel.a != 0) {
+ rect->w = std::max(max_x, x + 1 - rect->x);
+ found = true;
+ }
+ }
+ }
+ // Find top margin
+ found = false;
+ for (int y = 0; y < max_y && !found; ++y) {
+ for (int x = 0; x < max_x && !found; ++x) {
+ RGBAColor pixel = texture->get_pixel(x, y);
+ if (pixel.a != 0) {
+ rect->y = std::min(rect->y, y - 1);
+ found = true;
+ }
+ }
+ }
+ // Find bottom margin
+ found = false;
+ for (int y = max_y - 1; y >= 0 && !found; --y) {
+ for (int x = 0; x < max_x && !found; ++x) {
+ RGBAColor pixel = texture->get_pixel(x, y);
+ if (pixel.a != 0) {
+ rect->h = std::max(max_y, y + 1 - rect->y);
+ found = true;
+ }
+ }
+ }
+}
+
+// Finds margins so that we can crop the animation to save space
+void find_margins(const std::vector<const Image*>& images, Recti* margins) {
+ for (const Image* image : images) {
+ std::unique_ptr<Texture> temp_texture(new Texture(image->width(), image->height()));
+ Rectf image_dimensions(Vector2f::zero(), image->width(), image->height());
+ temp_texture->blit(image_dimensions, *image, image_dimensions, 1., BlendMode::Copy);
+ temp_texture->lock();
+ find_trim_rect(temp_texture.get(), margins);
+ }
+}
+
+// Write a spritesheet of the given images into the given filename
+void write_spritesheet(std::vector<const Image*> imgs, const std::string& filename, const Recti& rect, int columns, int spritesheet_width, int spritesheet_height, FileSystem* out_filesystem) {
+ log("CREATING %d x %d spritesheet with %d columns, %" PRIuS " frames. Image size: %d x %d.\n", spritesheet_width, spritesheet_height, columns, imgs.size(), rect.w, rect.h);
+ std::unique_ptr<Texture> spritesheet(new Texture(spritesheet_width, spritesheet_height));
+ spritesheet->fill_rect(Rectf(Vector2f::zero(), spritesheet_width, spritesheet_height), RGBAColor(0, 0, 0, 0));
+ int row = 0;
+ int col = 0;
+ for (size_t i = 0; i < imgs.size(); ++i, ++col) {
+ if (col == columns) {
+ col = 0;
+ ++row;
+ }
+ const Image* image = imgs[i];
+ const int x = col * rect.w;
+ const int y = row * rect.h;
+ log("Frame %" PRIuS " at: %d, %d, %d, %d\n", i, x, y, x + rect.w, y + rect.h);
+ spritesheet->blit(Rectf(x, y, rect.w, rect.h), *image, Rectf(rect.x, rect.y, rect.w, rect.h), 1., BlendMode::Copy);
+ }
+ std::unique_ptr<::StreamWrite> sw(out_filesystem->open_stream_write(filename));
+ save_to_png(spritesheet.get(), sw.get(), ColorType::RGBA);
+ log("Wrote spritesheet to %s/%s\n", out_filesystem->get_basename().c_str(), filename.c_str());
+}
+
+// Container for writing spritesheet files
+struct SpritesheetData {
+ explicit SpritesheetData(const std::string& fb,
+ const std::vector<const Image*>& im,
+ const std::vector<const Image*>& pc) :
+ filename_base(fb),
+ images(im),
+ pc_masks(pc) {}
+
+ const std::string filename_base;
+ const std::vector<const Image*> images;
+ const std::vector<const Image*> pc_masks;
+};
+
+// Reads animation data from engine and then creates spritesheets and the corresponding lua code.
+void write_animation_spritesheets(Widelands::EditorGameBase& egbase,
+ const std::string& map_object_name,
+ const std::string& animation_name,
+ FileSystem* out_filesystem) {
+ const Widelands::Tribes& tribes = egbase.tribes();
+ const Widelands::World& world = egbase.world();
+ log("==========================================\n");
+
+ bool is_fontier_or_flag_animation = false;
+ uint32_t frontier_or_flag_animation_id = 0;
+
+ // Get the map object
+ const Widelands::MapObjectDescr* descr = nullptr;
+ if (tribes.building_exists(tribes.building_index(map_object_name))) {
+ descr = tribes.get_building_descr(tribes.building_index(map_object_name));
+ } else if (tribes.ware_exists(tribes.ware_index(map_object_name))) {
+ descr = tribes.get_ware_descr(tribes.ware_index(map_object_name));
+ } else if (tribes.worker_exists(tribes.worker_index(map_object_name))) {
+ descr = tribes.get_worker_descr(tribes.worker_index(map_object_name));
+ } else if (tribes.immovable_exists(tribes.immovable_index(map_object_name))) {
+ descr = tribes.get_immovable_descr(tribes.immovable_index(map_object_name));
+ } else if (tribes.ship_exists(tribes.ship_index(map_object_name))) {
+ descr = tribes.get_ship_descr(tribes.ship_index(map_object_name));
+ } else if (world.get_immovable_index(map_object_name) != Widelands::INVALID_INDEX) {
+ descr = world.get_immovable_descr(world.get_immovable_index(map_object_name));
+ } else if (world.get_critter_descr(map_object_name)) {
+ descr = world.get_critter_descr(map_object_name);
+ } else {
+ // Frontier and flag animations need special treatment
+ std::vector<std::string> map_object_name_vector;
+ boost::split(
+ map_object_name_vector, map_object_name, boost::is_any_of("_"));
+ if (map_object_name_vector.size() == 2) {
+ const Widelands::TribeDescr* tribe =
+ tribes.get_tribe_descr(tribes.tribe_index(map_object_name_vector.front()));
+ if (map_object_name_vector.back() == "frontier") {
+ is_fontier_or_flag_animation = true;
+ frontier_or_flag_animation_id = tribe->frontier_animation();
+ } else if (map_object_name_vector.back() == "flag") {
+ is_fontier_or_flag_animation = true;
+ frontier_or_flag_animation_id = tribe->flag_animation();
+ }
+ }
+ }
+ if (!is_fontier_or_flag_animation && descr == nullptr) {
+ log("ABORTING. Unable to find map object for '%s'!\n", map_object_name.c_str());
+ return;
+ }
+ assert(is_fontier_or_flag_animation || (descr->name() == map_object_name));
+
+ const bool is_directional = !is_fontier_or_flag_animation && descr->is_animation_known(animation_name + animation_direction_names[0]);
+
+ // Ensure that the animation exists
+ if (!is_fontier_or_flag_animation) {
+ if (!descr->is_animation_known(animation_name) && !descr->is_animation_known(animation_name + "_ne")) {
+ log("ABORTING. Unknown animation '%s' for '%s'\n", animation_name.c_str(),
+ map_object_name.c_str());
+ return;
+ }
+ }
+
+ // Representative animation for collecting global paramaters for the animation set
+ const Animation& representative_animation =
+ g_gr->animations().get_animation(is_fontier_or_flag_animation ?
+ frontier_or_flag_animation_id :
+ descr->get_animation(is_directional ?
+ animation_name + "_ne" :
+ animation_name, nullptr));
+
+ const int nr_frames = representative_animation.nr_frames();
+
+ // Only create spritesheet if animation has more than 1 frame.
+ if (nr_frames < 2) {
+ log("ABORTING. Animation '%s' for '%s' has less than 2 images and doesn't need a spritesheet.\n", animation_name.c_str(),
+ map_object_name.c_str());
+ return;
+ }
+
+ // Add global paramaters for this animation to Lua
+ std::unique_ptr<LuaTree::Element> lua_object(new LuaTree::Element());
+ LuaTree::Object* lua_animation = lua_object->add_object(animation_name);
+ lua_animation->add_raw("directory", "path.dirname(__file__)"); // NOCOM no idea why this is leaking memory
+ lua_animation->add_string("basename", animation_name);
+
+ // We only write FPS if the animation is not a build animation and does not use the default FPS.
+ if (animation_name != "build") {
+ uint32_t frametime = representative_animation.frametime();
+ assert(frametime > 0);
+ if (frametime != kFrameLength) {
+ assert(nr_frames > 1);
+ lua_animation->add_int("fps", 1000 / frametime);
+ }
+ }
+
+ log("WRITING '%s' animation for '%s'. It has %d pictures and %" PRIuS " scales.\n", animation_name.c_str(),
+ map_object_name.c_str(), nr_frames, representative_animation.available_scales().size());
+
+ const int columns = floor(sqrt(nr_frames));
+ int rows = 1;
+ while (rows * columns < nr_frames) {
+ ++rows;
+ }
+
+ lua_animation->add_int("frames", nr_frames);
+ lua_animation->add_int("rows", rows);
+ lua_animation->add_int("columns", columns);
+
+ const int representative_frame = representative_animation.representative_frame();
+ if (representative_frame > 0) {
+ lua_animation->add_int("representative_frame", representative_frame);
+ }
+
+ if (is_directional) {
+ lua_animation->add_bool("directional", true);
+ }
+
+ // Create image files for each scale and find & write the hotspot
+ for (const float scale : representative_animation.available_scales()) {
+ // Collect animation data to write
+ std::vector<SpritesheetData> spritesheets_to_write;
+ if (is_directional) {
+ for (int dir = 1; dir <= 6; ++dir) {
+ const std::string directional_animname =
+ animation_name + animation_direction_names[dir - 1];
+ if (!descr->is_animation_known(directional_animname)) {
+ throw wexception("Missing directional animation '%s\'",
+ directional_animname.c_str());
+ }
+ const std::string filename_base =
+ (boost::format("%s%s_%d") % animation_name % animation_direction_names[dir - 1] % scale).str();
+ const Animation& directional_animation =
+ g_gr->animations().get_animation(descr->get_animation(directional_animname, nullptr));
+ spritesheets_to_write.push_back(SpritesheetData(filename_base,
+ directional_animation.images(scale),
+ directional_animation.pc_masks(scale)));
+ }
+
+ } else {
+ spritesheets_to_write.push_back(SpritesheetData((boost::format("%s_%d") % animation_name % scale).str(),
+ representative_animation.images(scale),
+ representative_animation.pc_masks(scale)));
+ }
+
+ // Find margins for trimming
+ std::vector<const Image*> images = spritesheets_to_write.front().images;
+ Recti margins(images.front()->width() / 2, images.front()->height() / 2, images.front()->width() / 2, images.front()->height() / 2);
+ for (const auto& animation_data : spritesheets_to_write) {
+ find_margins(animation_data.images, &margins);
+ }
+
+ // Write the spritesheet(s)
+ const int spritesheet_width = columns * margins.w;
+ const int spritesheet_height = rows * margins.h;
+
+ if (spritesheet_width > kMinimumSizeForTextures || spritesheet_height > kMinimumSizeForTextures) {
+ egbase.cleanup_objects();
+ throw wexception("Unable to create spritesheet; either the width (%d) or the height (%d) are bigger than the minimum supported texture size (%d)", spritesheet_width, spritesheet_height, kMinimumSizeForTextures);
+ }
+
+ // Write spritesheets for animation and player colors
+ for (const auto& spritesheet_data : spritesheets_to_write) {
+ write_spritesheet(spritesheet_data.images, spritesheet_data.filename_base + ".png", margins, columns, spritesheet_width, spritesheet_height, out_filesystem);
+ if (!spritesheet_data.pc_masks.empty()) {
+ write_spritesheet(spritesheet_data.pc_masks, spritesheet_data.filename_base + "_pc.png", margins, columns, spritesheet_width, spritesheet_height, out_filesystem);
+ }
+ }
+
+ if (scale == 1.0f) {
+ // Adjust and write hostspot
+ LuaTree::Object* lua_table = lua_animation->add_object("hotspot");
+ const Vector2i& hotspot = representative_animation.hotspot();
+ lua_table->add_int("", hotspot.x - margins.x);
+ lua_table->add_int("", hotspot.y - margins.y);
+ }
+ }
+
+ log("LUA CODE:\n%s\n", lua_animation->as_string().c_str());
+ log("Done!\n");
+}
+
+} // namespace
+
+/*
+ ==========================================================
+ MAIN
+ ==========================================================
+ */
+
+int main(int argc, char** argv) {
+ if (argc != 4) {
+ log("Usage: %s <mapobject_name> <animation_name> <existing-output-path>\n", argv[0]);
+ return 1;
+ }
+
+ const std::string map_object_name = argv[1];
+ const std::string animation_name = argv[2];
+ const std::string output_path = argv[3];
+
+ try {
+ initialize();
+ std::unique_ptr<FileSystem> out_filesystem(&FileSystem::create(output_path));
+ Widelands::EditorGameBase egbase(nullptr);
+ write_animation_spritesheets(egbase, map_object_name, animation_name, out_filesystem.get());
+ egbase.cleanup_objects();
+ } catch (std::exception& e) {
+ log("Exception: %s.\n", e.what());
+ cleanup();
+ return 1;
+ }
+ cleanup();
+ return 0;
+}
=== added directory 'src/website/lua'
=== added file 'src/website/lua/CMakeLists.txt'
--- src/website/lua/CMakeLists.txt 1970-01-01 00:00:00 +0000
+++ src/website/lua/CMakeLists.txt 2019-08-30 22:19:30 +0000
@@ -0,0 +1,10 @@
+wl_library(lua_tree
+ SRCS
+ lua_tree.cc
+ lua_tree.h
+ value.cc
+ value.h
+ DEPENDS
+ io_fileread
+ io_filesystem
+)
=== added file 'src/website/lua/lua_tree.cc'
--- src/website/lua/lua_tree.cc 1970-01-01 00:00:00 +0000
+++ src/website/lua/lua_tree.cc 2019-08-30 22:19:30 +0000
@@ -0,0 +1,165 @@
+/*
+ * Copyright (C) 2018-2019 by the Widelands Development Team
+ *
+ * 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.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "website/lua/lua_tree.h"
+
+#include <memory>
+
+#include "io/filewrite.h"
+
+// ########################## LuaTree Element #############################
+
+namespace LuaTree {
+const std::string LuaTree::Element::tab_ = " ";
+
+LuaTree::Object* Element::add_object(const std::string& key) {
+ children_.push_back(std::unique_ptr<LuaTree::Object>(new LuaTree::Object(key, level_ + 1)));
+ return dynamic_cast<LuaTree::Object*>(children_.back().get());
+}
+
+void Element::add_bool(const std::string& key, bool value) {
+ if (key.empty()) {
+ keyless_values_.push_back(std::unique_ptr<LuaTree::Value>(new LuaTree::Boolean(value)));
+ } else {
+ values_.push_back(std::unique_ptr<KeyValuePair>(new KeyValuePair(key, new LuaTree::Boolean(value))));
+ }
+}
+
+void Element::add_double(const std::string& key, double value) {
+ if (key.empty()) {
+ keyless_values_.push_back(std::unique_ptr<LuaTree::Value>(new LuaTree::Boolean(value)));
+ } else {
+ values_.push_back(std::unique_ptr<KeyValuePair>(new KeyValuePair(key, new LuaTree::Double(value))));
+ }
+}
+void Element::add_int(const std::string& key, int value) {
+ if (key.empty()) {
+ keyless_values_.push_back(std::unique_ptr<LuaTree::Value>(new LuaTree::Int(value)));
+ } else {
+ values_.push_back(std::unique_ptr<KeyValuePair>(new KeyValuePair(key, new LuaTree::Int(value))));
+ }
+}
+void Element::add_empty(const std::string& key) {
+ if (key.empty()) {
+ keyless_values_.push_back(std::unique_ptr<LuaTree::Value>(new LuaTree::Empty()));
+ } else {
+ values_.push_back(std::unique_ptr<KeyValuePair>(new KeyValuePair(key, new LuaTree::Empty())));
+ }
+}
+void Element::add_string(const std::string& key, const std::string& value) {
+ if (key.empty()) {
+ keyless_values_.push_back(std::unique_ptr<LuaTree::Value>(new LuaTree::String(value)));
+ } else {
+ values_.push_back(std::unique_ptr<KeyValuePair>(new KeyValuePair(key, new LuaTree::String(value))));
+ }
+}
+
+void Element::add_raw(const std::string& key, const std::string& value) {
+ if (key.empty()) {
+ keyless_values_.push_back(std::unique_ptr<LuaTree::Value>(new LuaTree::Raw(value)));
+ } else {
+ values_.push_back(std::unique_ptr<KeyValuePair>(new KeyValuePair(key, new LuaTree::Raw(value))));
+ }
+}
+
+void Element::write_to_file(FileSystem& fs, const std::string& filename) const {
+ FileWrite file_writer;
+ file_writer.text(as_string());
+ file_writer.write(fs, filename);
+}
+
+std::string Element::as_string() const {
+ return children_as_string();
+}
+
+std::string Element::keyless_values_as_string() const {
+ std::string result = "{";
+ if (!keyless_values_.empty()) {
+ for (size_t i = 0; i < keyless_values_.size() - 1; ++i) {
+ const auto& element = keyless_values_.at(i);
+ const std::string element_as_string = element->as_string();
+ result += " " + element_as_string + ",";
+ }
+ const auto& element = keyless_values_.at(keyless_values_.size() - 1);
+ const std::string element_as_string = element->as_string();
+ result += " " + element_as_string;
+ }
+ result += (children_.empty() && values_.empty()) ? " }" : " },";
+ return result;
+}
+
+std::string Element::values_as_string(const std::string& tabs) const {
+ std::string result = "";
+ if (!values_.empty()) {
+ for (size_t i = 0; i < values_.size() - 1; ++i) {
+ const auto& element = values_.at(i);
+ const std::string element_as_string = element->value->as_string();
+ result +=
+ tabs + tab_ + key_to_string(element->key, element_as_string.empty()) + element_as_string + ",\n";
+ }
+ const auto& element = values_.at(values_.size() - 1);
+ const std::string element_as_string = element->value->as_string();
+ result += tabs + tab_ + key_to_string(element->key, element_as_string.empty()) + element_as_string +
+ (children_.empty() ? "\n" : ",\n");
+ }
+ return result;
+}
+
+std::string Element::children_as_string() const {
+ std::string result = "";
+ if (!children_.empty()) {
+ for (size_t i = 0; i < children_.size() - 1; ++i) {
+ result += children_.at(i)->as_string() + ",\n";
+ }
+ result += children_.at(children_.size() - 1)->as_string() + "\n";
+ }
+ return result;
+}
+
+std::string Element::key_to_string(const std::string& value, bool value_is_empty) {
+ return value + (value_is_empty ? "" : " = ");
+}
+
+// ########################## LuaTree Table #############################
+
+Object::Object(const std::string& key, int level) : LuaTree::Element(key, level) {
+}
+
+std::string Object::as_string() const {
+ std::string result = "";
+ std::string tabs = "";
+ for (int i = 0; i < level_; ++i) {
+ tabs += tab_;
+ }
+
+ if (!keyless_values_.empty()) {
+ result += tabs + (key_.empty() ? "" : key_to_string(key_));
+ result += keyless_values_as_string();
+ } else {
+ result += tabs + (key_.empty() ? "" : key_to_string(key_)) + "{\n";
+ }
+ result += values_as_string(tabs);
+ result += children_as_string();
+ if (keyless_values_.empty()) {
+ result += tabs + "}";
+ }
+ return result;
+}
+
+} // namespace LuaTree
=== added file 'src/website/lua/lua_tree.h'
--- src/website/lua/lua_tree.h 1970-01-01 00:00:00 +0000
+++ src/website/lua/lua_tree.h 2019-08-30 22:19:30 +0000
@@ -0,0 +1,97 @@
+/*
+ * Copyright (C) 2018-2019 by the Widelands Development Team
+ *
+ * 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.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef WL_WEBSITE_LUA_LUA_TREE_H
+#define WL_WEBSITE_LUA_LUA_TREE_H
+
+#include <cassert>
+#include <memory>
+#include <string>
+#include <vector>
+
+#include "io/filesystem/filesystem.h"
+#include "website/lua/value.h"
+
+namespace LuaTree {
+
+class Object;
+
+class Element {
+protected:
+ // Constructor for child node
+ explicit Element(const std::string& key, int level) : key_(key), level_(level) {
+ }
+
+public:
+ // Constructor for root node
+ explicit Element() : LuaTree::Element("", -1) {
+ }
+
+ LuaTree::Object* add_object(const std::string& key = "");
+ void add_bool(const std::string& key, bool value);
+ void add_double(const std::string& key, double value);
+ void add_int(const std::string& key, int value);
+ void add_empty(const std::string& key);
+ void add_string(const std::string& key, const std::string& value);
+ void add_raw(const std::string& key, const std::string& value);
+
+ void write_to_file(FileSystem& fs, const std::string& filename) const;
+
+ virtual std::string as_string() const;
+
+protected:
+ static const std::string tab_;
+
+ struct KeyValuePair {
+ explicit KeyValuePair(const std::string& init_key, LuaTree::Value* init_value) :
+ key(init_key),
+ value(init_value) {}
+
+ const std::string key;
+ std::unique_ptr<LuaTree::Value> value;
+ };
+
+ std::string keyless_values_as_string() const;
+ std::string values_as_string(const std::string& tabs) const;
+ std::string children_as_string() const;
+ static std::string key_to_string(const std::string& value, bool value_is_empty = false);
+
+ std::string key_;
+ const int level_;
+ std::vector<std::unique_ptr<LuaTree::Element>> children_;
+ std::vector<std::unique_ptr<KeyValuePair>> values_;
+ std::vector<std::unique_ptr<LuaTree::Value>> keyless_values_;
+};
+
+class Object : public Element {
+ friend class LuaTree::Element;
+
+protected:
+ // Constructor for child node
+ explicit Object(const std::string& key, int level);
+
+public:
+ // Constructor for root node
+ explicit Object() : LuaTree::Element("", 0) {
+ }
+ std::string as_string() const override;
+};
+
+} // namespace LuaTree
+#endif // end of include guard: WL_WEBSITE_LUA_LUA_TREE_H
=== added file 'src/website/lua/value.cc'
--- src/website/lua/value.cc 1970-01-01 00:00:00 +0000
+++ src/website/lua/value.cc 2019-08-30 22:19:30 +0000
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2018-2019 by the Widelands Development Team
+ *
+ * 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.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "website/lua/value.h"
+
+#include <sstream>
+
+namespace LuaTree {
+
+Boolean::Boolean(bool value) : bool_value(value) {
+}
+std::string Boolean::as_string() const {
+ return bool_value ? "true" : "false";
+}
+
+Double::Double(double value) : double_value(value) {
+}
+std::string Double::as_string() const {
+ std::ostringstream strs;
+ strs << double_value;
+ return strs.str();
+}
+
+Int::Int(int value) : int_value(value) {}
+std::string Int::as_string() const {
+ std::ostringstream strs;
+ strs << int_value;
+ return strs.str();
+}
+
+std::string Empty::as_string() const {
+ return "nil";
+}
+
+String::String(const std::string& value) : string_value(value) {}
+std::string String::as_string() const {
+ return "\"" + string_value + "\"";
+}
+
+Raw::Raw(const std::string& value) : raw_value(value) {}
+std::string Raw::as_string() const {
+ return raw_value;
+}
+
+
+} // namespace LuaTree
=== added file 'src/website/lua/value.h'
--- src/website/lua/value.h 1970-01-01 00:00:00 +0000
+++ src/website/lua/value.h 2019-08-30 22:19:30 +0000
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2018-2019 by the Widelands Development Team
+ *
+ * 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.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef WL_WEBSITE_LUA_VALUE_H
+#define WL_WEBSITE_LUA_VALUE_H
+
+#include <string>
+
+namespace LuaTree {
+
+/// Value types for LuaTree
+struct Value {
+ Value() = default;
+ virtual std::string as_string() const = 0;
+};
+
+struct Boolean : Value {
+ explicit Boolean(bool value);
+ std::string as_string() const override;
+private:
+ const bool bool_value;
+};
+
+struct Double : Value {
+ explicit Double(double value);
+ std::string as_string() const override;
+private:
+ const double double_value;
+};
+
+struct Empty : Value {
+ Empty() = default;
+ std::string as_string() const override;
+};
+
+struct Int : Value {
+ explicit Int(int value);
+ std::string as_string() const override;
+private:
+ const int int_value;
+};
+
+struct String : Value {
+ explicit String(const std::string& value);
+ std::string as_string() const override;
+private:
+ const std::string string_value;
+};
+
+struct Raw : Value {
+ explicit Raw(const std::string& value);
+ std::string as_string() const override;
+private:
+ const std::string raw_value;
+};
+
+
+} // namespace LuaTree
+#endif // end of include guard: WL_WEBSITE_LUA_VALUE_H
=== added file 'test/maps/plain.wmf/scripting/test_animations.lua'
--- test/maps/plain.wmf/scripting/test_animations.lua 1970-01-01 00:00:00 +0000
+++ test/maps/plain.wmf/scripting/test_animations.lua 2019-08-30 22:19:30 +0000
@@ -0,0 +1,21 @@
+run(function()
+ sleep(5000)
+
+ assert_equal(1, #p1:get_buildings("barbarians_headquarters"))
+
+ local hq = p1:get_buildings("barbarians_headquarters")[1]
+
+ hq:set_workers("barbarians_file_animation", 5)
+ assert_equal(5, hq:get_workers("barbarians_file_animation"))
+
+ -- This mine needs a miner, a chief miner and a master miner
+ p1:place_road(p1:place_flag(map:get_field(18,22)), "br", "br", "br", "br", "r", "r", "r")
+ p1:place_flag(map:get_field(20,26))
+ local building = p1:place_building("barbarians_spritesheet_animation", wl.Game().map:get_field(17, 21), false, true)
+
+ -- Make the worker walk out of the building and idle for a few times
+ sleep(5 * 40000)
+
+ print("# All Tests passed.")
+ wl.ui.MapView():close()
+end)
=== added directory 'test/maps/plain.wmf/scripting/tribes'
=== added directory 'test/maps/plain.wmf/scripting/tribes/file_animation'
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/helptexts.lua'
--- test/maps/plain.wmf/scripting/tribes/file_animation/helptexts.lua 1970-01-01 00:00:00 +0000
+++ test/maps/plain.wmf/scripting/tribes/file_animation/helptexts.lua 2019-08-30 22:19:30 +0000
@@ -0,0 +1,4 @@
+function worker_helptext()
+ -- TRANSLATORS: Helptext for a worker: Carrier
+ return pgettext("barbarians_worker", "Carries items along your roads.")
+end
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/idle_0.5_00.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/idle_0.5_00.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/idle_0.5_00.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/idle_0.5_00_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/idle_0.5_00_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/idle_0.5_00_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/idle_0.5_01.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/idle_0.5_01.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/idle_0.5_01.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/idle_0.5_01_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/idle_0.5_01_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/idle_0.5_01_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/idle_0.5_02.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/idle_0.5_02.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/idle_0.5_02.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/idle_0.5_02_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/idle_0.5_02_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/idle_0.5_02_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/idle_0.5_03.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/idle_0.5_03.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/idle_0.5_03.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/idle_0.5_03_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/idle_0.5_03_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/idle_0.5_03_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/idle_0.5_04.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/idle_0.5_04.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/idle_0.5_04.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/idle_0.5_04_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/idle_0.5_04_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/idle_0.5_04_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/idle_1_00.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/idle_1_00.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/idle_1_00.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/idle_1_00_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/idle_1_00_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/idle_1_00_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/idle_1_01.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/idle_1_01.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/idle_1_01.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/idle_1_01_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/idle_1_01_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/idle_1_01_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/idle_1_02.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/idle_1_02.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/idle_1_02.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/idle_1_02_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/idle_1_02_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/idle_1_02_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/idle_1_03.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/idle_1_03.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/idle_1_03.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/idle_1_03_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/idle_1_03_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/idle_1_03_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/idle_1_04.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/idle_1_04.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/idle_1_04.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/idle_1_04_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/idle_1_04_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/idle_1_04_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/init.lua'
--- test/maps/plain.wmf/scripting/tribes/file_animation/init.lua 1970-01-01 00:00:00 +0000
+++ test/maps/plain.wmf/scripting/tribes/file_animation/init.lua 2019-08-30 22:19:30 +0000
@@ -0,0 +1,36 @@
+dirname = "test/maps/plain.wmf/" .. path.dirname(__file__)
+
+animations = {}
+
+add_animation(animations, "idle", dirname, "idle", {14, 21}, 5)
+-- These won't be played in the test suite, just testing the table structure.
+animations["idle"]["sound_effect"] = {
+ path = "sound/hammering/hammering",
+ priority = 64
+}
+
+add_directional_animation(animations, "walk", dirname, "walk", {9, 19}, 10)
+add_directional_animation(animations, "walkload", dirname, "walkload", {7, 22}, 10)
+
+tribes:new_worker_type {
+ msgctxt = "barbarians_worker",
+ name = "barbarians_file_animation",
+ -- TRANSLATORS: This is a worker name used in lists of workers
+ descname = pgettext("barbarians_worker", "File Animation"),
+ helptext_script = dirname .. "helptexts.lua",
+ icon = dirname .. "menu.png",
+ vision_range = 2,
+
+ buildcost = {}, -- This will give the worker the property "buildable"
+
+ animations = animations,
+
+ programs = {
+ show_idle = {
+ "findspace=size:any radius:5",
+ "walk=coords",
+ "animate=idle 10000",
+ "return"
+ }
+ },
+}
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/menu.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/menu.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/menu.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_e_00.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_e_00.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_e_00.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_e_00_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_e_00_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_e_00_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_e_01.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_e_01.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_e_01.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_e_01_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_e_01_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_e_01_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_e_02.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_e_02.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_e_02.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_e_02_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_e_02_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_e_02_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_e_03.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_e_03.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_e_03.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_e_03_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_e_03_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_e_03_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_e_04.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_e_04.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_e_04.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_e_04_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_e_04_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_e_04_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_e_05.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_e_05.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_e_05.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_e_05_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_e_05_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_e_05_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_e_06.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_e_06.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_e_06.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_e_06_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_e_06_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_e_06_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_e_07.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_e_07.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_e_07.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_e_07_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_e_07_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_e_07_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_e_08.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_e_08.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_e_08.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_e_08_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_e_08_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_e_08_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_e_09.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_e_09.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_e_09.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_e_09_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_e_09_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_e_09_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_ne_00.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_ne_00.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_ne_00.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_ne_00_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_ne_00_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_ne_00_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_ne_01.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_ne_01.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_ne_01.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_ne_01_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_ne_01_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_ne_01_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_ne_02.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_ne_02.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_ne_02.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_ne_02_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_ne_02_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_ne_02_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_ne_03.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_ne_03.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_ne_03.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_ne_03_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_ne_03_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_ne_03_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_ne_04.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_ne_04.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_ne_04.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_ne_04_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_ne_04_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_ne_04_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_ne_05.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_ne_05.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_ne_05.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_ne_05_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_ne_05_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_ne_05_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_ne_06.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_ne_06.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_ne_06.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_ne_06_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_ne_06_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_ne_06_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_ne_07.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_ne_07.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_ne_07.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_ne_07_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_ne_07_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_ne_07_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_ne_08.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_ne_08.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_ne_08.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_ne_08_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_ne_08_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_ne_08_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_ne_09.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_ne_09.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_ne_09.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_ne_09_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_ne_09_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_ne_09_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_nw_00.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_nw_00.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_nw_00.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_nw_00_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_nw_00_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_nw_00_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_nw_01.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_nw_01.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_nw_01.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_nw_01_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_nw_01_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_nw_01_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_nw_02.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_nw_02.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_nw_02.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_nw_02_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_nw_02_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_nw_02_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_nw_03.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_nw_03.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_nw_03.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_nw_03_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_nw_03_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_nw_03_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_nw_04.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_nw_04.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_nw_04.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_nw_04_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_nw_04_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_nw_04_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_nw_05.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_nw_05.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_nw_05.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_nw_05_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_nw_05_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_nw_05_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_nw_06.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_nw_06.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_nw_06.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_nw_06_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_nw_06_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_nw_06_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_nw_07.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_nw_07.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_nw_07.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_nw_07_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_nw_07_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_nw_07_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_nw_08.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_nw_08.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_nw_08.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_nw_08_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_nw_08_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_nw_08_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_nw_09.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_nw_09.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_nw_09.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_nw_09_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_nw_09_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_nw_09_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_se_00.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_se_00.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_se_00.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_se_00_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_se_00_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_se_00_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_se_01.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_se_01.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_se_01.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_se_01_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_se_01_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_se_01_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_se_02.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_se_02.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_se_02.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_se_02_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_se_02_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_se_02_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_se_03.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_se_03.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_se_03.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_se_03_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_se_03_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_se_03_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_se_04.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_se_04.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_se_04.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_se_04_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_se_04_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_se_04_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_se_05.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_se_05.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_se_05.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_se_05_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_se_05_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_se_05_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_se_06.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_se_06.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_se_06.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_se_06_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_se_06_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_se_06_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_se_07.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_se_07.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_se_07.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_se_07_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_se_07_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_se_07_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_se_08.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_se_08.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_se_08.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_se_08_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_se_08_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_se_08_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_se_09.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_se_09.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_se_09.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_se_09_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_se_09_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_se_09_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_sw_00.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_sw_00.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_sw_00.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_sw_00_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_sw_00_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_sw_00_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_sw_01.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_sw_01.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_sw_01.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_sw_01_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_sw_01_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_sw_01_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_sw_02.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_sw_02.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_sw_02.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_sw_02_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_sw_02_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_sw_02_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_sw_03.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_sw_03.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_sw_03.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_sw_03_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_sw_03_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_sw_03_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_sw_04.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_sw_04.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_sw_04.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_sw_04_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_sw_04_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_sw_04_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_sw_05.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_sw_05.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_sw_05.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_sw_05_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_sw_05_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_sw_05_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_sw_06.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_sw_06.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_sw_06.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_sw_06_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_sw_06_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_sw_06_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_sw_07.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_sw_07.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_sw_07.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_sw_07_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_sw_07_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_sw_07_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_sw_08.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_sw_08.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_sw_08.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_sw_08_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_sw_08_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_sw_08_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_sw_09.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_sw_09.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_sw_09.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_sw_09_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_sw_09_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_sw_09_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_w_00.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_w_00.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_w_00.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_w_00_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_w_00_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_w_00_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_w_01.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_w_01.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_w_01.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_w_01_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_w_01_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_w_01_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_w_02.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_w_02.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_w_02.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_w_02_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_w_02_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_w_02_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_w_03.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_w_03.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_w_03.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_w_03_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_w_03_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_w_03_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_w_04.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_w_04.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_w_04.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_w_04_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_w_04_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_w_04_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_w_05.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_w_05.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_w_05.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_w_05_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_w_05_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_w_05_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_w_06.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_w_06.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_w_06.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_w_06_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_w_06_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_w_06_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_w_07.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_w_07.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_w_07.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_w_07_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_w_07_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_w_07_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_w_08.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_w_08.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_w_08.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_w_08_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_w_08_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_w_08_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_w_09.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_w_09.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_w_09.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walk_w_09_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walk_w_09_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walk_w_09_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_e_00.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_e_00.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_e_00.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_e_00_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_e_00_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_e_00_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_e_01.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_e_01.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_e_01.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_e_01_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_e_01_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_e_01_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_e_02.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_e_02.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_e_02.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_e_02_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_e_02_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_e_02_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_e_03.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_e_03.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_e_03.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_e_03_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_e_03_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_e_03_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_e_04.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_e_04.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_e_04.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_e_04_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_e_04_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_e_04_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_e_05.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_e_05.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_e_05.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_e_05_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_e_05_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_e_05_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_e_06.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_e_06.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_e_06.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_e_06_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_e_06_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_e_06_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_e_07.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_e_07.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_e_07.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_e_07_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_e_07_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_e_07_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_e_08.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_e_08.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_e_08.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_e_08_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_e_08_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_e_08_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_e_09.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_e_09.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_e_09.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_e_09_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_e_09_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_e_09_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_ne_00.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_ne_00.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_ne_00.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_ne_00_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_ne_00_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_ne_00_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_ne_01.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_ne_01.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_ne_01.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_ne_01_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_ne_01_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_ne_01_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_ne_02.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_ne_02.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_ne_02.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_ne_02_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_ne_02_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_ne_02_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_ne_03.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_ne_03.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_ne_03.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_ne_03_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_ne_03_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_ne_03_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_ne_04.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_ne_04.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_ne_04.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_ne_04_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_ne_04_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_ne_04_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_ne_05.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_ne_05.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_ne_05.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_ne_05_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_ne_05_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_ne_05_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_ne_06.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_ne_06.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_ne_06.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_ne_06_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_ne_06_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_ne_06_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_ne_07.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_ne_07.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_ne_07.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_ne_07_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_ne_07_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_ne_07_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_ne_08.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_ne_08.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_ne_08.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_ne_08_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_ne_08_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_ne_08_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_ne_09.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_ne_09.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_ne_09.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_ne_09_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_ne_09_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_ne_09_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_nw_00.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_nw_00.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_nw_00.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_nw_00_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_nw_00_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_nw_00_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_nw_01.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_nw_01.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_nw_01.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_nw_01_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_nw_01_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_nw_01_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_nw_02.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_nw_02.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_nw_02.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_nw_02_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_nw_02_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_nw_02_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_nw_03.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_nw_03.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_nw_03.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_nw_03_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_nw_03_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_nw_03_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_nw_04.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_nw_04.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_nw_04.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_nw_04_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_nw_04_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_nw_04_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_nw_05.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_nw_05.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_nw_05.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_nw_05_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_nw_05_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_nw_05_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_nw_06.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_nw_06.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_nw_06.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_nw_06_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_nw_06_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_nw_06_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_nw_07.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_nw_07.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_nw_07.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_nw_07_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_nw_07_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_nw_07_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_nw_08.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_nw_08.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_nw_08.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_nw_08_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_nw_08_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_nw_08_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_nw_09.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_nw_09.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_nw_09.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_nw_09_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_nw_09_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_nw_09_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_se_00.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_se_00.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_se_00.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_se_00_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_se_00_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_se_00_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_se_01.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_se_01.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_se_01.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_se_01_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_se_01_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_se_01_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_se_02.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_se_02.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_se_02.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_se_02_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_se_02_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_se_02_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_se_03.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_se_03.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_se_03.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_se_03_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_se_03_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_se_03_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_se_04.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_se_04.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_se_04.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_se_04_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_se_04_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_se_04_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_se_05.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_se_05.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_se_05.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_se_05_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_se_05_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_se_05_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_se_06.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_se_06.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_se_06.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_se_06_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_se_06_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_se_06_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_se_07.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_se_07.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_se_07.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_se_07_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_se_07_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_se_07_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_se_08.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_se_08.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_se_08.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_se_08_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_se_08_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_se_08_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_se_09.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_se_09.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_se_09.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_se_09_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_se_09_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_se_09_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_sw_00.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_sw_00.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_sw_00.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_sw_00_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_sw_00_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_sw_00_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_sw_01.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_sw_01.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_sw_01.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_sw_01_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_sw_01_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_sw_01_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_sw_02.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_sw_02.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_sw_02.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_sw_02_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_sw_02_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_sw_02_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_sw_03.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_sw_03.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_sw_03.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_sw_03_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_sw_03_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_sw_03_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_sw_04.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_sw_04.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_sw_04.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_sw_04_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_sw_04_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_sw_04_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_sw_05.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_sw_05.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_sw_05.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_sw_05_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_sw_05_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_sw_05_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_sw_06.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_sw_06.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_sw_06.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_sw_06_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_sw_06_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_sw_06_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_sw_07.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_sw_07.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_sw_07.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_sw_07_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_sw_07_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_sw_07_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_sw_08.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_sw_08.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_sw_08.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_sw_08_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_sw_08_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_sw_08_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_sw_09.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_sw_09.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_sw_09.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_sw_09_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_sw_09_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_sw_09_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_w_00.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_w_00.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_w_00.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_w_00_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_w_00_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_w_00_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_w_01.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_w_01.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_w_01.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_w_01_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_w_01_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_w_01_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_w_02.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_w_02.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_w_02.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_w_02_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_w_02_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_w_02_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_w_03.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_w_03.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_w_03.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_w_03_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_w_03_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_w_03_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_w_04.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_w_04.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_w_04.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_w_04_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_w_04_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_w_04_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_w_05.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_w_05.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_w_05.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_w_05_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_w_05_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_w_05_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_w_06.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_w_06.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_w_06.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_w_06_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_w_06_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_w_06_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_w_07.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_w_07.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_w_07.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_w_07_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_w_07_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_w_07_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_w_08.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_w_08.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_w_08.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_w_08_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_w_08_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_w_08_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_w_09.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_w_09.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_w_09.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/file_animation/walkload_w_09_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/file_animation/walkload_w_09_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/file_animation/walkload_w_09_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/init.lua'
--- test/maps/plain.wmf/scripting/tribes/init.lua 1970-01-01 00:00:00 +0000
+++ test/maps/plain.wmf/scripting/tribes/init.lua 2019-08-30 22:19:30 +0000
@@ -0,0 +1,20 @@
+tribes = wl.Tribes()
+include "scripting/mapobjects.lua"
+
+-- ===================================
+-- Campaign Specific Data
+-- ===================================
+print_loading_message("Loading custom units", function()
+ include "map:scripting/tribes/file_animation/init.lua"
+ include "map:scripting/tribes/spritesheet_animation/init.lua"
+end)
+
+tribes:add_custom_worker {
+ tribename = "barbarians",
+ workername = "barbarians_file_animation",
+}
+
+tribes:add_custom_building {
+ tribename = "barbarians",
+ buildingname = "barbarians_spritesheet_animation",
+}
=== added directory 'test/maps/plain.wmf/scripting/tribes/spritesheet_animation'
=== added file 'test/maps/plain.wmf/scripting/tribes/spritesheet_animation/build_1.png'
Binary files test/maps/plain.wmf/scripting/tribes/spritesheet_animation/build_1.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/spritesheet_animation/build_1.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/spritesheet_animation/build_1_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/spritesheet_animation/build_1_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/spritesheet_animation/build_1_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/spritesheet_animation/helptexts.lua'
--- test/maps/plain.wmf/scripting/tribes/spritesheet_animation/helptexts.lua 1970-01-01 00:00:00 +0000
+++ test/maps/plain.wmf/scripting/tribes/spritesheet_animation/helptexts.lua 2019-08-30 22:19:30 +0000
@@ -0,0 +1,29 @@
+-- This include can be removed when all help texts have been defined.
+include "tribes/scripting/help/global_helptexts.lua"
+
+function building_helptext_lore()
+ -- TRANSLATORS: Lore helptext for a building
+ return pgettext("barbarians_building", [[‘Then he hit the door with his ax and, behold,<br>]] ..
+ [[the door only trembled, but the shaft of the ax burst into a thousand pieces.’]])
+end
+
+function building_helptext_lore_author()
+ -- TRANSLATORS: Lore author helptext for a building
+ return pgettext("barbarians_building", [[Legend about a quarrel between the brothers Harthor and Manthor,<br>]] ..
+ [[Manthor is said to be the inventor of blackwood]])
+end
+
+function building_helptext_purpose()
+ -- TRANSLATORS: Purpose helptext for a building
+ return pgettext("barbarians_building", "Hardens logs by fire into blackwood, which is used to construct robust buildings.")
+end
+
+function building_helptext_note()
+ -- TRANSLATORS#: Note helptext for a building
+ return ""
+end
+
+function building_helptext_performance()
+ -- TRANSLATORS#: Performance helptext for a building
+ return no_performance_text_yet()
+end
=== added file 'test/maps/plain.wmf/scripting/tribes/spritesheet_animation/idle_1.png'
Binary files test/maps/plain.wmf/scripting/tribes/spritesheet_animation/idle_1.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/spritesheet_animation/idle_1.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/spritesheet_animation/idle_1_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/spritesheet_animation/idle_1_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/spritesheet_animation/idle_1_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/spritesheet_animation/init.lua'
--- test/maps/plain.wmf/scripting/tribes/spritesheet_animation/init.lua 1970-01-01 00:00:00 +0000
+++ test/maps/plain.wmf/scripting/tribes/spritesheet_animation/init.lua 2019-08-30 22:19:30 +0000
@@ -0,0 +1,89 @@
+dirname = "test/maps/plain.wmf/" .. path.dirname(__file__)
+
+tribes:new_productionsite_type {
+ msgctxt = "barbarians_building",
+ name = "barbarians_spritesheet_animation",
+ -- TRANSLATORS: This is a building name used in lists of buildings
+ descname = pgettext("barbarians_building", "Spritesheet Animation"),
+ helptext_script = dirname .. "helptexts.lua",
+ icon = dirname .. "menu.png",
+ size = "medium",
+
+ buildcost = {
+ log = 3,
+ granite = 1
+ },
+ return_on_dismantle = {
+ log = 1,
+ granite = 1
+ },
+
+ animations = {
+ unoccupied = {
+ pictures = path.list_files(dirname .. "unoccupied_??.png"),
+ hotspot = { 52, 64 },
+ }
+ },
+
+ spritesheets = {
+ idle = {
+ directory = dirname,
+ basename = "idle",
+ frames = 20,
+ columns = 4,
+ rows = 5,
+ hotspot = { 52, 64 }
+ },
+ build = {
+ directory = dirname,
+ basename = "build",
+ frames = 4,
+ columns = 2,
+ rows = 2,
+ hotspot = { 52, 64 }
+ },
+ working = {
+ directory = dirname,
+ basename = "working",
+ frames = 20,
+ columns = 4,
+ rows = 5,
+ hotspot = { 52, 64 },
+ -- These won't be played in the test suite, just testing the table structure.
+ sound_effect = {
+ path = "sound/hammering/hammering",
+ priority = 64
+ },
+ representative_frame = 3
+ }
+ },
+
+ aihints = {
+ basic_amount = 1,
+ very_weak_ai_limit = 1,
+ weak_ai_limit = 2
+ },
+
+ working_positions = {
+ barbarians_file_animation = 1
+ },
+
+ inputs = {
+ { name = "log", amount = 8 }
+ },
+ outputs = {
+ "blackwood"
+ },
+
+ programs = {
+ work = {
+ -- TRANSLATORS: Completed/Skipped/Did not start working because ...
+ descname = _"working",
+ actions = {
+ "callworker=show_idle",
+ "animate=working 17000",
+ "sleep=3000"
+ }
+ },
+ },
+}
=== added file 'test/maps/plain.wmf/scripting/tribes/spritesheet_animation/menu.png'
Binary files test/maps/plain.wmf/scripting/tribes/spritesheet_animation/menu.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/spritesheet_animation/menu.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/spritesheet_animation/unoccupied_00.png'
Binary files test/maps/plain.wmf/scripting/tribes/spritesheet_animation/unoccupied_00.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/spritesheet_animation/unoccupied_00.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/spritesheet_animation/unoccupied_00_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/spritesheet_animation/unoccupied_00_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/spritesheet_animation/unoccupied_00_pc.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/spritesheet_animation/working_1.png'
Binary files test/maps/plain.wmf/scripting/tribes/spritesheet_animation/working_1.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/spritesheet_animation/working_1.png 2019-08-30 22:19:30 +0000 differ
=== added file 'test/maps/plain.wmf/scripting/tribes/spritesheet_animation/working_1_pc.png'
Binary files test/maps/plain.wmf/scripting/tribes/spritesheet_animation/working_1_pc.png 1970-01-01 00:00:00 +0000 and test/maps/plain.wmf/scripting/tribes/spritesheet_animation/working_1_pc.png 2019-08-30 22:19:30 +0000 differ
Follow ups