← Back to team overview

widelands-dev team mailing list archive

[Merge] lp:~widelands-dev/widelands/mipmaps into lp:widelands

 

GunChleoc has proposed merging lp:~widelands-dev/widelands/mipmaps into lp:widelands.

Commit message:
Add support for Mipmaps into the engine.
For testing purposes, some animations have been converted:
- Barbarian Warehouse, Shipyard, Builder, Recruit, Shipwright
- Frisian berry bushes + ponds

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/mipmaps/+merge/363780

This is the first step in a series to improve graphics quality in Widelands, hopefully for Build 21.

1. Implement support for Mipmaps
   https://en.wikipedia.org/wiki/Mipmap

2. Add support to the font renderer

3. Implement spritesheets, otherwise the number of files will explode

4. Implement compressed spritemaps, otherwise the filesize will explode.
   This is only feasible for immovables.

5. Re-export everything from Blender
-- 
Your team Widelands Developers is requested to review the proposed merge of lp:~widelands-dev/widelands/mipmaps into lp:widelands.
=== modified file 'data/scripting/mapobjects.lua'
--- data/scripting/mapobjects.lua	2017-02-08 18:48:32 +0000
+++ data/scripting/mapobjects.lua	2019-02-28 12:35:28 +0000
@@ -9,10 +9,12 @@
 -- RST
 -- .. function:: print_loading_message(preamble, func)
 --
--- Prints a message containing the duration func() required to run.
+--    Prints a message containing the duration func() required to run.
 --
 --    :arg preamble: The name of the item that was being loaded
+--    :type preamble: :class:`string`
 --    :arg func: The function to time execution off.
+--    :type func: :class:`function`
 function print_loading_message(preamble, func)
    local start = ticks()
    func()
@@ -20,32 +22,114 @@
 end
 
 
--- RST
--- .. function:: add_walking_animations(table, animationname, dirname, basename, hotspot, fps)
---
---    Adds 6 walk or sail animations - one for each walking direction - to 'table'.
---
---    :arg table: A table that the animation data is added to. It may already contain some animations.
+-- Helper function for finding animation files with varying numbering length
+function get_animation_files(prefix)
+   local animation_files = path.list_files(prefix .. "_??.png")
+   if #animation_files < 1 then
+      animation_files = path.list_files(prefix .. "_???.png")
+   end
+   return animation_files
+end
+
+
+-- The mipmap scales supported by the engine.
+-- Ensure that this always matches kSupportedScales in animations.cc
+local supported_scales = { 0.5, 1, 2, 4 }
+
+
+-- RST
+-- .. function:: add_animation(animationtable, animationname, dirname, basename, hotspot [, fps])
+--
+--    Convenience function for adding an animation to `animationtable`.
+--    Supports both simple animations and mipmaps.
+--    See :ref:`animations` for more documentation and code examples.
+--
+--    :arg animationtable: The table that the animation data will be added to.
+--       It may already contain some animations.
+--    :type animationtable: :class:`table`
+--    :arg animationname: The name of the animation to be added, e.g. ``idle``.
+--    :type animationname: :class:`string`
+--    :arg dirname: The name of the directory where the animation image files are located.
+--    :type dirname: :class:`string`
+--    :arg basename: The basename of the animation files. The filenames of the
+--       animation files need to have the format ``<basename>_\d{2,3}.png`` for simple
+--       file animations, and  ``<basename>_<scale>_\d{2,3}.png`` for mipmaps.
+--       Supported scales are ``0.5``, ``1``, ``2`` and ``4``.
+--    :type basename: :class:`string`
+--    :arg hotspot: The hotspot coordinates for blitting, e.g. ``{2, 20}``.
+--    :type hotspot: :class:`table`
+--    :arg fps: Frames per second. Only use this if the animation has more than
+--       1 frame, and if you need to deviate from the default frame rate.
+--    :type fps: :class:`integer`
+function add_animation(animationtable, animationname, dirname, basename, hotspot, fps)
+   mipmap = {}
+   if (supported_scales == nil) then
+   print("#################################################")
+   end
+   for scale_idx, current_scale in ipairs(supported_scales) do
+      local listed_files = get_animation_files(dirname .. basename .. "_" .. current_scale)
+      if #listed_files > 0 then
+         table.insert(
+            mipmap,
+            {
+               scale = current_scale,
+               files = listed_files,
+            }
+         )
+      end
+   end
+   if #mipmap < 1 then
+      table.insert(
+      mipmap,
+         {
+            scale = 1,
+            files = get_animation_files(dirname .. basename),
+         }
+      )
+   end
+   animationtable[animationname] = {
+      mipmap = mipmap,
+      hotspot = hotspot,
+   }
+   if (fps ~= nil) then
+      animationtable[animationname]["fps"] = fps
+   end
+end
+
+
+
+-- RST
+-- .. function:: add_walking_animations(animationtable, animationname, dirname, basename, hotspot [, fps])
+--
+--    Adds 6 walk or sail animations - one for each walking direction - to `animationtable`.
+--    Supports both simple animations and mipmaps.
+--    See :ref:`animations` for more documentation and code examples.
+--
+--    :arg animationtable: The table that the animation data will be added to.
+--       It may already contain some animations.
+--    :type animationtable: :class:`table`
 --    :arg animationname: The name of the animation to be added, e.g. ``walkload``.
+--    :type animationname: :class:`string`
 --    :arg dirname: The name of the directory where the animation image files are located.
---    :arg basename: The basename of the animation files. The filenames of the animation files need to have the format ``<basename>_(e|ne|se|sw|w|nw)_\d+.png``
---    :arg hotspot: The hotspot coordinates for blitting, e.g. ``{ 2, 20 }``.
---    :arg fps: Frames per second. Only use this if the animation has more than 1 frame, and if you need to deviate from the default frame rate.
-function add_walking_animations(table, animationname, dirname, basename, hotspot, fps)
-   if (fps ~= nil) then
-      for idx, dir in ipairs{ "ne", "e", "se", "sw", "w", "nw" } do
-         table[animationname .. "_" .. dir] = {
-            pictures = path.list_files(dirname .. basename .. "_" .. dir ..  "_??.png"),
-            hotspot = hotspot,
-            fps = fps,
-         }
-      end
-   else
-      for idx, dir in ipairs{ "ne", "e", "se", "sw", "w", "nw" } do
-         table[animationname .. "_" .. dir] = {
-            pictures = path.list_files(dirname .. basename .. "_" .. dir ..  "_??.png"),
-            hotspot = hotspot,
-         }
+--    :type dirname: :class:`table`
+--    :arg basename: The basename of the animation files. The filenames of the
+--       animation files need to have the format
+--       ``<basename>_(e|ne|se|sw|w|nw)_\d{2,3}.png`` for simple animations, and
+--       ``<basename>_(e|ne|se|sw|w|nw)_<scale>_\d{2,3}.png`` for mipmaps.
+--       Supported scales are ``0.5``, ``1``, ``2`` and ``4``.
+--    :type basename: :class:`string`
+--    :arg hotspot: The hotspot coordinates for blitting, e.g. ``{2, 20}``.
+--    :type hotspot: :class:`table`
+--    :arg fps: Frames per second. Only use this if the animation has more than
+--       1 frame, and if you need to deviate from the default frame rate.
+--    :type fps: :class:`integer`
+function add_walking_animations(animationtable, animationname, dirname, basename, hotspot, fps)
+   for idx, dir in ipairs{ "ne", "e", "se", "sw", "w", "nw" } do
+      if fps ~= nil then
+         add_animation(animationtable, animationname .. "_" .. dir, dirname, basename .. "_" .. dir, hotspot, fps)
+      else
+         add_animation(animationtable, animationname .. "_" .. dir, dirname, basename .. "_" .. dir, hotspot)
       end
    end
 end
+

=== modified file 'data/tribes/buildings/productionsites/barbarians/shipyard/init.lua'
--- data/tribes/buildings/productionsites/barbarians/shipyard/init.lua	2018-09-06 09:21:44 +0000
+++ data/tribes/buildings/productionsites/barbarians/shipyard/init.lua	2019-02-28 12:35:28 +0000
@@ -1,5 +1,11 @@
 dirname = path.dirname(__file__)
 
+animations = {}
+add_animation(animations, "idle", dirname, "idle", { 62, 48 })
+add_animation(animations, "build", dirname, "build", { 62, 48 })
+add_animation(animations, "unoccupied", dirname, "unoccupied", { 62, 48 })
+add_animation(animations, "working", dirname, "working", { 62, 48 })
+
 tribes:new_productionsite_type {
    msgctxt = "barbarians_building",
    name = "barbarians_shipyard",
@@ -22,24 +28,7 @@
       granite = 2
    },
 
-   animations = {
-      idle = {
-         pictures = path.list_files(dirname .. "idle_??.png"),
-         hotspot = { 62, 48 },
-      },
-      build = {
-         pictures = path.list_files(dirname .. "build_??.png"),
-         hotspot = { 62, 48 },
-      },
-      unoccupied = {
-         pictures = path.list_files(dirname .. "unoccupied_??.png"),
-         hotspot = { 62, 48 },
-      },
-      working = {
-         pictures = path.list_files(dirname .. "working_??.png"),
-         hotspot = { 62, 48 },
-      },
-   },
+   animations = animations,
 
    aihints = {
       needs_water = true,

=== added file 'data/tribes/buildings/productionsites/barbarians/shipyard/working_0.5_00.png'
Binary files data/tribes/buildings/productionsites/barbarians/shipyard/working_0.5_00.png	1970-01-01 00:00:00 +0000 and data/tribes/buildings/productionsites/barbarians/shipyard/working_0.5_00.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/buildings/productionsites/barbarians/shipyard/working_0.5_00_pc.png'
Binary files data/tribes/buildings/productionsites/barbarians/shipyard/working_0.5_00_pc.png	1970-01-01 00:00:00 +0000 and data/tribes/buildings/productionsites/barbarians/shipyard/working_0.5_00_pc.png	2019-02-28 12:35:28 +0000 differ
=== renamed file 'data/tribes/buildings/productionsites/barbarians/shipyard/working_00.png' => 'data/tribes/buildings/productionsites/barbarians/shipyard/working_1_00.png'
=== renamed file 'data/tribes/buildings/productionsites/barbarians/shipyard/working_00_pc.png' => 'data/tribes/buildings/productionsites/barbarians/shipyard/working_1_00_pc.png'
=== added file 'data/tribes/buildings/productionsites/barbarians/shipyard/working_2_00.png'
Binary files data/tribes/buildings/productionsites/barbarians/shipyard/working_2_00.png	1970-01-01 00:00:00 +0000 and data/tribes/buildings/productionsites/barbarians/shipyard/working_2_00.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/buildings/productionsites/barbarians/shipyard/working_2_00_pc.png'
Binary files data/tribes/buildings/productionsites/barbarians/shipyard/working_2_00_pc.png	1970-01-01 00:00:00 +0000 and data/tribes/buildings/productionsites/barbarians/shipyard/working_2_00_pc.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/buildings/warehouses/barbarians/warehouse/idle_0.5_00.png'
Binary files data/tribes/buildings/warehouses/barbarians/warehouse/idle_0.5_00.png	1970-01-01 00:00:00 +0000 and data/tribes/buildings/warehouses/barbarians/warehouse/idle_0.5_00.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/buildings/warehouses/barbarians/warehouse/idle_0.5_00_pc.png'
Binary files data/tribes/buildings/warehouses/barbarians/warehouse/idle_0.5_00_pc.png	1970-01-01 00:00:00 +0000 and data/tribes/buildings/warehouses/barbarians/warehouse/idle_0.5_00_pc.png	2019-02-28 12:35:28 +0000 differ
=== renamed file 'data/tribes/buildings/warehouses/barbarians/warehouse/idle_00.png' => 'data/tribes/buildings/warehouses/barbarians/warehouse/idle_1_00.png'
=== renamed file 'data/tribes/buildings/warehouses/barbarians/warehouse/idle_00_pc.png' => 'data/tribes/buildings/warehouses/barbarians/warehouse/idle_1_00_pc.png'
=== added file 'data/tribes/buildings/warehouses/barbarians/warehouse/idle_2_00.png'
Binary files data/tribes/buildings/warehouses/barbarians/warehouse/idle_2_00.png	1970-01-01 00:00:00 +0000 and data/tribes/buildings/warehouses/barbarians/warehouse/idle_2_00.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/buildings/warehouses/barbarians/warehouse/idle_2_00_pc.png'
Binary files data/tribes/buildings/warehouses/barbarians/warehouse/idle_2_00_pc.png	1970-01-01 00:00:00 +0000 and data/tribes/buildings/warehouses/barbarians/warehouse/idle_2_00_pc.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/buildings/warehouses/barbarians/warehouse/init.lua'
--- data/tribes/buildings/warehouses/barbarians/warehouse/init.lua	2018-05-27 06:34:40 +0000
+++ data/tribes/buildings/warehouses/barbarians/warehouse/init.lua	2019-02-28 12:35:28 +0000
@@ -1,5 +1,9 @@
 dirname = path.dirname(__file__)
 
+animations = {}
+add_animation(animations, "idle", dirname, "idle", { 60, 78 })
+add_animation(animations, "build", dirname, "build", { 60, 78 })
+
 tribes:new_warehouse_type {
    msgctxt = "barbarians_building",
    name = "barbarians_warehouse",
@@ -23,16 +27,7 @@
       grout = 1
    },
 
-   animations = {
-      idle = {
-         pictures = path.list_files(dirname .. "idle_??.png"),
-         hotspot = { 60, 78 }
-      },
-      build = {
-         pictures = path.list_files(dirname .. "build_??.png"),
-         hotspot = { 60, 78 },
-      }
-   },
+   animations = animations,
 
    aihints = {},
 

=== modified file 'data/tribes/frisians.lua'
--- data/tribes/frisians.lua	2018-10-19 14:27:06 +0000
+++ data/tribes/frisians.lua	2019-02-28 12:35:28 +0000
@@ -12,7 +12,6 @@
          pictures = path.list_files (dirname .. "images/frisians/flag_??.png"),
          hotspot = { 10, 39 },
          fps = 10,
-         scale = 4.2,
       }
    },
 

=== modified file 'data/tribes/images/frisians/flag_00.png'
Binary files data/tribes/images/frisians/flag_00.png	2018-02-06 11:17:48 +0000 and data/tribes/images/frisians/flag_00.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/images/frisians/flag_00_pc.png'
Binary files data/tribes/images/frisians/flag_00_pc.png	2018-02-06 11:17:48 +0000 and data/tribes/images/frisians/flag_00_pc.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/images/frisians/flag_01.png'
Binary files data/tribes/images/frisians/flag_01.png	2018-02-06 11:17:48 +0000 and data/tribes/images/frisians/flag_01.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/images/frisians/flag_01_pc.png'
Binary files data/tribes/images/frisians/flag_01_pc.png	2018-02-06 11:17:48 +0000 and data/tribes/images/frisians/flag_01_pc.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/images/frisians/flag_02.png'
Binary files data/tribes/images/frisians/flag_02.png	2018-02-06 11:17:48 +0000 and data/tribes/images/frisians/flag_02.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/images/frisians/flag_02_pc.png'
Binary files data/tribes/images/frisians/flag_02_pc.png	2018-02-06 11:17:48 +0000 and data/tribes/images/frisians/flag_02_pc.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/images/frisians/flag_03.png'
Binary files data/tribes/images/frisians/flag_03.png	2018-02-06 11:17:48 +0000 and data/tribes/images/frisians/flag_03.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/images/frisians/flag_03_pc.png'
Binary files data/tribes/images/frisians/flag_03_pc.png	2018-02-06 11:17:48 +0000 and data/tribes/images/frisians/flag_03_pc.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/images/frisians/flag_04.png'
Binary files data/tribes/images/frisians/flag_04.png	2018-02-06 11:17:48 +0000 and data/tribes/images/frisians/flag_04.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/images/frisians/flag_04_pc.png'
Binary files data/tribes/images/frisians/flag_04_pc.png	2018-02-06 11:17:48 +0000 and data/tribes/images/frisians/flag_04_pc.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/images/frisians/flag_05.png'
Binary files data/tribes/images/frisians/flag_05.png	2018-02-06 11:17:48 +0000 and data/tribes/images/frisians/flag_05.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/images/frisians/flag_05_pc.png'
Binary files data/tribes/images/frisians/flag_05_pc.png	2018-02-06 11:17:48 +0000 and data/tribes/images/frisians/flag_05_pc.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/images/frisians/flag_06.png'
Binary files data/tribes/images/frisians/flag_06.png	2018-02-06 11:17:48 +0000 and data/tribes/images/frisians/flag_06.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/images/frisians/flag_06_pc.png'
Binary files data/tribes/images/frisians/flag_06_pc.png	2018-02-06 11:17:48 +0000 and data/tribes/images/frisians/flag_06_pc.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/images/frisians/flag_07.png'
Binary files data/tribes/images/frisians/flag_07.png	2018-02-06 11:17:48 +0000 and data/tribes/images/frisians/flag_07.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/images/frisians/flag_07_pc.png'
Binary files data/tribes/images/frisians/flag_07_pc.png	2018-02-06 11:17:48 +0000 and data/tribes/images/frisians/flag_07_pc.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/images/frisians/flag_08.png'
Binary files data/tribes/images/frisians/flag_08.png	2018-02-06 11:17:48 +0000 and data/tribes/images/frisians/flag_08.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/images/frisians/flag_08_pc.png'
Binary files data/tribes/images/frisians/flag_08_pc.png	2018-02-06 11:17:48 +0000 and data/tribes/images/frisians/flag_08_pc.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/images/frisians/flag_09.png'
Binary files data/tribes/images/frisians/flag_09.png	2018-02-06 11:17:48 +0000 and data/tribes/images/frisians/flag_09.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/images/frisians/flag_09_pc.png'
Binary files data/tribes/images/frisians/flag_09_pc.png	2018-02-06 11:17:48 +0000 and data/tribes/images/frisians/flag_09_pc.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/barleyfield_harvested/idle_00.png'
Binary files data/tribes/immovables/barleyfield_harvested/idle_00.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/barleyfield_harvested/idle_00.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/barleyfield_harvested/init.lua'
--- data/tribes/immovables/barleyfield_harvested/init.lua	2018-02-05 12:57:52 +0000
+++ data/tribes/immovables/barleyfield_harvested/init.lua	2019-02-28 12:35:28 +0000
@@ -18,7 +18,6 @@
       idle = {
          pictures = path.list_files(dirname .. "idle_??.png"),
          hotspot = { 21, 34 },
-         scale = 2.5,
       },
    }
 }

=== modified file 'data/tribes/immovables/barleyfield_medium/idle_00.png'
Binary files data/tribes/immovables/barleyfield_medium/idle_00.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/barleyfield_medium/idle_00.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/barleyfield_medium/init.lua'
--- data/tribes/immovables/barleyfield_medium/init.lua	2018-02-05 12:57:52 +0000
+++ data/tribes/immovables/barleyfield_medium/init.lua	2019-02-28 12:35:28 +0000
@@ -19,7 +19,6 @@
       idle = {
          pictures = path.list_files(dirname .. "idle_??.png"),
          hotspot = { 21, 33 },
-         scale = 2.5,
       },
    }
 }

=== modified file 'data/tribes/immovables/barleyfield_ripe/idle_00.png'
Binary files data/tribes/immovables/barleyfield_ripe/idle_00.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/barleyfield_ripe/idle_00.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/barleyfield_ripe/init.lua'
--- data/tribes/immovables/barleyfield_ripe/init.lua	2018-02-05 12:57:52 +0000
+++ data/tribes/immovables/barleyfield_ripe/init.lua	2019-02-28 12:35:28 +0000
@@ -22,7 +22,6 @@
       idle = {
          pictures = path.list_files (dirname .. "idle_??.png"),
          hotspot = { 21, 34 },
-         scale = 2.5,
       },
    }
 }

=== modified file 'data/tribes/immovables/barleyfield_small/idle_00.png'
Binary files data/tribes/immovables/barleyfield_small/idle_00.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/barleyfield_small/idle_00.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/barleyfield_small/init.lua'
--- data/tribes/immovables/barleyfield_small/init.lua	2018-02-05 12:57:52 +0000
+++ data/tribes/immovables/barleyfield_small/init.lua	2019-02-28 12:35:28 +0000
@@ -19,7 +19,6 @@
       idle = {
          pictures = path.list_files(dirname .. "idle_??.png"),
          hotspot = { 21, 25 },
-         scale = 2.5,
       },
    }
 }

=== modified file 'data/tribes/immovables/barleyfield_tiny/idle_00.png'
Binary files data/tribes/immovables/barleyfield_tiny/idle_00.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/barleyfield_tiny/idle_00.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/barleyfield_tiny/init.lua'
--- data/tribes/immovables/barleyfield_tiny/init.lua	2018-02-05 12:57:52 +0000
+++ data/tribes/immovables/barleyfield_tiny/init.lua	2019-02-28 12:35:28 +0000
@@ -19,7 +19,6 @@
       idle = {
          pictures = path.list_files(dirname .. "idle_??.png"),
          hotspot = { 21, 13 },
-         scale = 2.5,
       },
    }
 }

=== modified file 'data/tribes/immovables/berry_bushes/blueberry/init.lua'
--- data/tribes/immovables/berry_bushes/blueberry/init.lua	2019-01-12 13:10:40 +0000
+++ data/tribes/immovables/berry_bushes/blueberry/init.lua	2019-02-28 12:35:28 +0000
@@ -28,7 +28,6 @@
       idle = {
          pictures = path.list_files (dirname .. "tiny/idle_?.png"),
          hotspot = {6, 7},
-         scale = 3,
       },
    },
 }
@@ -52,7 +51,6 @@
       idle = {
          pictures = path.list_files (dirname .. "small/idle_?.png"),
          hotspot = {12, 13},
-         scale = 3,
       },
    },
 }
@@ -76,7 +74,6 @@
       idle = {
          pictures = path.list_files (dirname .. "medium/idle_?.png"),
          hotspot = {15, 16},
-         scale = 3,
       },
    },
 }
@@ -102,7 +99,6 @@
       idle = {
          pictures = path.list_files (dirname .. "ripe/idle_?.png"),
          hotspot = {15, 16},
-         scale = 3,
       },
    },
 }

=== modified file 'data/tribes/immovables/berry_bushes/blueberry/medium/idle_0.png'
Binary files data/tribes/immovables/berry_bushes/blueberry/medium/idle_0.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/blueberry/medium/idle_0.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/blueberry/medium/idle_1.png'
Binary files data/tribes/immovables/berry_bushes/blueberry/medium/idle_1.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/blueberry/medium/idle_1.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/blueberry/medium/idle_2.png'
Binary files data/tribes/immovables/berry_bushes/blueberry/medium/idle_2.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/blueberry/medium/idle_2.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/blueberry/medium/idle_3.png'
Binary files data/tribes/immovables/berry_bushes/blueberry/medium/idle_3.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/blueberry/medium/idle_3.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/blueberry/ripe/idle_0.png'
Binary files data/tribes/immovables/berry_bushes/blueberry/ripe/idle_0.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/blueberry/ripe/idle_0.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/blueberry/ripe/idle_1.png'
Binary files data/tribes/immovables/berry_bushes/blueberry/ripe/idle_1.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/blueberry/ripe/idle_1.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/blueberry/ripe/idle_2.png'
Binary files data/tribes/immovables/berry_bushes/blueberry/ripe/idle_2.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/blueberry/ripe/idle_2.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/blueberry/ripe/idle_3.png'
Binary files data/tribes/immovables/berry_bushes/blueberry/ripe/idle_3.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/blueberry/ripe/idle_3.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/blueberry/small/idle_0.png'
Binary files data/tribes/immovables/berry_bushes/blueberry/small/idle_0.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/blueberry/small/idle_0.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/blueberry/small/idle_1.png'
Binary files data/tribes/immovables/berry_bushes/blueberry/small/idle_1.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/blueberry/small/idle_1.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/blueberry/small/idle_2.png'
Binary files data/tribes/immovables/berry_bushes/blueberry/small/idle_2.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/blueberry/small/idle_2.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/blueberry/small/idle_3.png'
Binary files data/tribes/immovables/berry_bushes/blueberry/small/idle_3.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/blueberry/small/idle_3.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/blueberry/tiny/idle_0.png'
Binary files data/tribes/immovables/berry_bushes/blueberry/tiny/idle_0.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/blueberry/tiny/idle_0.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/blueberry/tiny/idle_1.png'
Binary files data/tribes/immovables/berry_bushes/blueberry/tiny/idle_1.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/blueberry/tiny/idle_1.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/blueberry/tiny/idle_2.png'
Binary files data/tribes/immovables/berry_bushes/blueberry/tiny/idle_2.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/blueberry/tiny/idle_2.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/blueberry/tiny/idle_3.png'
Binary files data/tribes/immovables/berry_bushes/blueberry/tiny/idle_3.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/blueberry/tiny/idle_3.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/currant_black/init.lua'
--- data/tribes/immovables/berry_bushes/currant_black/init.lua	2018-11-03 11:27:18 +0000
+++ data/tribes/immovables/berry_bushes/currant_black/init.lua	2019-02-28 12:35:28 +0000
@@ -26,7 +26,6 @@
       idle = {
          pictures = path.list_files (dirname .. "tiny/idle_?.png"),
          hotspot = {4, 10},
-         scale = 3,
       },
    },
 }
@@ -50,7 +49,6 @@
       idle = {
          pictures = path.list_files (dirname .. "small/idle_?.png"),
          hotspot = {8, 20},
-         scale = 3,
       },
    },
 }
@@ -74,7 +72,6 @@
       idle = {
          pictures = path.list_files (dirname .. "medium/idle_?.png"),
          hotspot = {13, 33},
-         scale = 3,
       },
    },
 }
@@ -100,7 +97,6 @@
       idle = {
          pictures = path.list_files (dirname .. "ripe/idle_?.png"),
          hotspot = {13, 33},
-         scale = 3,
       },
    },
 }

=== modified file 'data/tribes/immovables/berry_bushes/currant_black/medium/idle_0.png'
Binary files data/tribes/immovables/berry_bushes/currant_black/medium/idle_0.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/currant_black/medium/idle_0.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/currant_black/medium/idle_1.png'
Binary files data/tribes/immovables/berry_bushes/currant_black/medium/idle_1.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/currant_black/medium/idle_1.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/currant_black/medium/idle_2.png'
Binary files data/tribes/immovables/berry_bushes/currant_black/medium/idle_2.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/currant_black/medium/idle_2.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/currant_black/medium/idle_3.png'
Binary files data/tribes/immovables/berry_bushes/currant_black/medium/idle_3.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/currant_black/medium/idle_3.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/currant_black/ripe/idle_0.png'
Binary files data/tribes/immovables/berry_bushes/currant_black/ripe/idle_0.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/currant_black/ripe/idle_0.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/currant_black/ripe/idle_1.png'
Binary files data/tribes/immovables/berry_bushes/currant_black/ripe/idle_1.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/currant_black/ripe/idle_1.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/currant_black/ripe/idle_2.png'
Binary files data/tribes/immovables/berry_bushes/currant_black/ripe/idle_2.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/currant_black/ripe/idle_2.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/currant_black/ripe/idle_3.png'
Binary files data/tribes/immovables/berry_bushes/currant_black/ripe/idle_3.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/currant_black/ripe/idle_3.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/currant_black/small/idle_0.png'
Binary files data/tribes/immovables/berry_bushes/currant_black/small/idle_0.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/currant_black/small/idle_0.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/currant_black/small/idle_1.png'
Binary files data/tribes/immovables/berry_bushes/currant_black/small/idle_1.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/currant_black/small/idle_1.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/currant_black/small/idle_2.png'
Binary files data/tribes/immovables/berry_bushes/currant_black/small/idle_2.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/currant_black/small/idle_2.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/currant_black/small/idle_3.png'
Binary files data/tribes/immovables/berry_bushes/currant_black/small/idle_3.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/currant_black/small/idle_3.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/currant_black/tiny/idle_0.png'
Binary files data/tribes/immovables/berry_bushes/currant_black/tiny/idle_0.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/currant_black/tiny/idle_0.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/currant_black/tiny/idle_1.png'
Binary files data/tribes/immovables/berry_bushes/currant_black/tiny/idle_1.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/currant_black/tiny/idle_1.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/currant_black/tiny/idle_2.png'
Binary files data/tribes/immovables/berry_bushes/currant_black/tiny/idle_2.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/currant_black/tiny/idle_2.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/currant_black/tiny/idle_3.png'
Binary files data/tribes/immovables/berry_bushes/currant_black/tiny/idle_3.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/currant_black/tiny/idle_3.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/currant_red/init.lua'
--- data/tribes/immovables/berry_bushes/currant_red/init.lua	2018-11-03 11:27:18 +0000
+++ data/tribes/immovables/berry_bushes/currant_red/init.lua	2019-02-28 12:35:28 +0000
@@ -26,7 +26,6 @@
       idle = {
          pictures = path.list_files (dirname .. "tiny/idle_?.png"),
          hotspot = {4, 10},
-         scale = 3,
       },
    },
 }
@@ -50,7 +49,6 @@
       idle = {
          pictures = path.list_files (dirname .. "small/idle_?.png"),
          hotspot = {8, 20},
-         scale = 3,
       },
    },
 }
@@ -74,7 +72,6 @@
       idle = {
          pictures = path.list_files (dirname .. "medium/idle_?.png"),
          hotspot = {13, 33},
-         scale = 3,
       },
    },
 }
@@ -100,7 +97,6 @@
       idle = {
          pictures = path.list_files (dirname .. "ripe/idle_?.png"),
          hotspot = {13, 33},
-         scale = 3,
       },
    },
 }

=== modified file 'data/tribes/immovables/berry_bushes/currant_red/medium/idle_0.png'
Binary files data/tribes/immovables/berry_bushes/currant_red/medium/idle_0.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/currant_red/medium/idle_0.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/currant_red/medium/idle_1.png'
Binary files data/tribes/immovables/berry_bushes/currant_red/medium/idle_1.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/currant_red/medium/idle_1.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/currant_red/medium/idle_2.png'
Binary files data/tribes/immovables/berry_bushes/currant_red/medium/idle_2.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/currant_red/medium/idle_2.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/currant_red/medium/idle_3.png'
Binary files data/tribes/immovables/berry_bushes/currant_red/medium/idle_3.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/currant_red/medium/idle_3.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/currant_red/ripe/idle_0.png'
Binary files data/tribes/immovables/berry_bushes/currant_red/ripe/idle_0.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/currant_red/ripe/idle_0.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/currant_red/ripe/idle_1.png'
Binary files data/tribes/immovables/berry_bushes/currant_red/ripe/idle_1.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/currant_red/ripe/idle_1.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/currant_red/ripe/idle_2.png'
Binary files data/tribes/immovables/berry_bushes/currant_red/ripe/idle_2.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/currant_red/ripe/idle_2.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/currant_red/ripe/idle_3.png'
Binary files data/tribes/immovables/berry_bushes/currant_red/ripe/idle_3.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/currant_red/ripe/idle_3.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/currant_red/small/idle_0.png'
Binary files data/tribes/immovables/berry_bushes/currant_red/small/idle_0.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/currant_red/small/idle_0.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/currant_red/small/idle_1.png'
Binary files data/tribes/immovables/berry_bushes/currant_red/small/idle_1.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/currant_red/small/idle_1.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/currant_red/small/idle_2.png'
Binary files data/tribes/immovables/berry_bushes/currant_red/small/idle_2.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/currant_red/small/idle_2.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/currant_red/small/idle_3.png'
Binary files data/tribes/immovables/berry_bushes/currant_red/small/idle_3.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/currant_red/small/idle_3.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/currant_red/tiny/idle_0.png'
Binary files data/tribes/immovables/berry_bushes/currant_red/tiny/idle_0.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/currant_red/tiny/idle_0.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/currant_red/tiny/idle_1.png'
Binary files data/tribes/immovables/berry_bushes/currant_red/tiny/idle_1.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/currant_red/tiny/idle_1.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/currant_red/tiny/idle_2.png'
Binary files data/tribes/immovables/berry_bushes/currant_red/tiny/idle_2.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/currant_red/tiny/idle_2.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/currant_red/tiny/idle_3.png'
Binary files data/tribes/immovables/berry_bushes/currant_red/tiny/idle_3.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/currant_red/tiny/idle_3.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/desert_hackberry/init.lua'
--- data/tribes/immovables/berry_bushes/desert_hackberry/init.lua	2018-11-03 11:27:18 +0000
+++ data/tribes/immovables/berry_bushes/desert_hackberry/init.lua	2019-02-28 12:35:28 +0000
@@ -26,7 +26,6 @@
       idle = {
          pictures = path.list_files (dirname .. "tiny/idle_?.png"),
          hotspot = {10, 9},
-         scale = 3,
       },
    },
 }
@@ -50,7 +49,6 @@
       idle = {
          pictures = path.list_files (dirname .. "small/idle_?.png"),
          hotspot = {19, 21},
-         scale = 3,
       },
    },
 }
@@ -74,7 +72,6 @@
       idle = {
          pictures = path.list_files (dirname .. "medium/idle_?.png"),
          hotspot = {21, 27},
-         scale = 3,
       },
    },
 }
@@ -100,7 +97,6 @@
       idle = {
          pictures = path.list_files (dirname .. "ripe/idle_?.png"),
          hotspot = {21, 27},
-         scale = 3,
       },
    },
 }

=== modified file 'data/tribes/immovables/berry_bushes/desert_hackberry/medium/idle_0.png'
Binary files data/tribes/immovables/berry_bushes/desert_hackberry/medium/idle_0.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/desert_hackberry/medium/idle_0.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/desert_hackberry/medium/idle_1.png'
Binary files data/tribes/immovables/berry_bushes/desert_hackberry/medium/idle_1.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/desert_hackberry/medium/idle_1.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/desert_hackberry/medium/idle_2.png'
Binary files data/tribes/immovables/berry_bushes/desert_hackberry/medium/idle_2.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/desert_hackberry/medium/idle_2.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/desert_hackberry/medium/idle_3.png'
Binary files data/tribes/immovables/berry_bushes/desert_hackberry/medium/idle_3.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/desert_hackberry/medium/idle_3.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/desert_hackberry/ripe/idle_0.png'
Binary files data/tribes/immovables/berry_bushes/desert_hackberry/ripe/idle_0.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/desert_hackberry/ripe/idle_0.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/desert_hackberry/ripe/idle_1.png'
Binary files data/tribes/immovables/berry_bushes/desert_hackberry/ripe/idle_1.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/desert_hackberry/ripe/idle_1.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/desert_hackberry/ripe/idle_2.png'
Binary files data/tribes/immovables/berry_bushes/desert_hackberry/ripe/idle_2.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/desert_hackberry/ripe/idle_2.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/desert_hackberry/ripe/idle_3.png'
Binary files data/tribes/immovables/berry_bushes/desert_hackberry/ripe/idle_3.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/desert_hackberry/ripe/idle_3.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/desert_hackberry/small/idle_0.png'
Binary files data/tribes/immovables/berry_bushes/desert_hackberry/small/idle_0.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/desert_hackberry/small/idle_0.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/desert_hackberry/small/idle_1.png'
Binary files data/tribes/immovables/berry_bushes/desert_hackberry/small/idle_1.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/desert_hackberry/small/idle_1.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/desert_hackberry/small/idle_2.png'
Binary files data/tribes/immovables/berry_bushes/desert_hackberry/small/idle_2.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/desert_hackberry/small/idle_2.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/desert_hackberry/small/idle_3.png'
Binary files data/tribes/immovables/berry_bushes/desert_hackberry/small/idle_3.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/desert_hackberry/small/idle_3.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/desert_hackberry/tiny/idle_0.png'
Binary files data/tribes/immovables/berry_bushes/desert_hackberry/tiny/idle_0.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/desert_hackberry/tiny/idle_0.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/desert_hackberry/tiny/idle_1.png'
Binary files data/tribes/immovables/berry_bushes/desert_hackberry/tiny/idle_1.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/desert_hackberry/tiny/idle_1.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/desert_hackberry/tiny/idle_2.png'
Binary files data/tribes/immovables/berry_bushes/desert_hackberry/tiny/idle_2.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/desert_hackberry/tiny/idle_2.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/desert_hackberry/tiny/idle_3.png'
Binary files data/tribes/immovables/berry_bushes/desert_hackberry/tiny/idle_3.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/desert_hackberry/tiny/idle_3.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/raspberry/init.lua'
--- data/tribes/immovables/berry_bushes/raspberry/init.lua	2018-11-03 11:27:18 +0000
+++ data/tribes/immovables/berry_bushes/raspberry/init.lua	2019-02-28 12:35:28 +0000
@@ -26,7 +26,6 @@
       idle = {
          pictures = path.list_files (dirname .. "tiny/idle_?.png"),
          hotspot = {4, 7},
-         scale = 3,
       },
    },
 }
@@ -50,7 +49,6 @@
       idle = {
          pictures = path.list_files (dirname .. "small/idle_?.png"),
          hotspot = {16, 31},
-         scale = 3,
       },
    },
 }
@@ -74,7 +72,6 @@
       idle = {
          pictures = path.list_files (dirname .. "medium/idle_?.png"),
          hotspot = {17, 34},
-         scale = 3,
       },
    },
 }
@@ -100,7 +97,6 @@
       idle = {
          pictures = path.list_files (dirname .. "ripe/idle_?.png"),
          hotspot = {17, 34},
-         scale = 3,
       },
    },
 }

=== modified file 'data/tribes/immovables/berry_bushes/raspberry/medium/idle_0.png'
Binary files data/tribes/immovables/berry_bushes/raspberry/medium/idle_0.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/raspberry/medium/idle_0.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/raspberry/medium/idle_1.png'
Binary files data/tribes/immovables/berry_bushes/raspberry/medium/idle_1.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/raspberry/medium/idle_1.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/raspberry/medium/idle_2.png'
Binary files data/tribes/immovables/berry_bushes/raspberry/medium/idle_2.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/raspberry/medium/idle_2.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/raspberry/medium/idle_3.png'
Binary files data/tribes/immovables/berry_bushes/raspberry/medium/idle_3.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/raspberry/medium/idle_3.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/raspberry/ripe/idle_0.png'
Binary files data/tribes/immovables/berry_bushes/raspberry/ripe/idle_0.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/raspberry/ripe/idle_0.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/raspberry/ripe/idle_1.png'
Binary files data/tribes/immovables/berry_bushes/raspberry/ripe/idle_1.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/raspberry/ripe/idle_1.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/raspberry/ripe/idle_2.png'
Binary files data/tribes/immovables/berry_bushes/raspberry/ripe/idle_2.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/raspberry/ripe/idle_2.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/raspberry/ripe/idle_3.png'
Binary files data/tribes/immovables/berry_bushes/raspberry/ripe/idle_3.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/raspberry/ripe/idle_3.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/raspberry/small/idle_0.png'
Binary files data/tribes/immovables/berry_bushes/raspberry/small/idle_0.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/raspberry/small/idle_0.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/raspberry/small/idle_1.png'
Binary files data/tribes/immovables/berry_bushes/raspberry/small/idle_1.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/raspberry/small/idle_1.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/raspberry/small/idle_2.png'
Binary files data/tribes/immovables/berry_bushes/raspberry/small/idle_2.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/raspberry/small/idle_2.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/raspberry/small/idle_3.png'
Binary files data/tribes/immovables/berry_bushes/raspberry/small/idle_3.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/raspberry/small/idle_3.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/raspberry/tiny/idle_0.png'
Binary files data/tribes/immovables/berry_bushes/raspberry/tiny/idle_0.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/raspberry/tiny/idle_0.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/raspberry/tiny/idle_1.png'
Binary files data/tribes/immovables/berry_bushes/raspberry/tiny/idle_1.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/raspberry/tiny/idle_1.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/raspberry/tiny/idle_2.png'
Binary files data/tribes/immovables/berry_bushes/raspberry/tiny/idle_2.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/raspberry/tiny/idle_2.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/raspberry/tiny/idle_3.png'
Binary files data/tribes/immovables/berry_bushes/raspberry/tiny/idle_3.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/raspberry/tiny/idle_3.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/sea_buckthorn/init.lua'
--- data/tribes/immovables/berry_bushes/sea_buckthorn/init.lua	2018-11-03 11:27:18 +0000
+++ data/tribes/immovables/berry_bushes/sea_buckthorn/init.lua	2019-02-28 12:35:28 +0000
@@ -26,7 +26,6 @@
       idle = {
          pictures = path.list_files (dirname .. "tiny/idle_?.png"),
          hotspot = {9, 19},
-         scale = 3,
       },
    },
 }
@@ -50,7 +49,6 @@
       idle = {
          pictures = path.list_files (dirname .. "small/idle_?.png"),
          hotspot = {14, 32},
-         scale = 3,
       },
    },
 }
@@ -74,7 +72,6 @@
       idle = {
          pictures = path.list_files (dirname .. "medium/idle_?.png"),
          hotspot = {17, 40},
-         scale = 3,
       },
    },
 }
@@ -100,7 +97,6 @@
       idle = {
          pictures = path.list_files (dirname .. "ripe/idle_?.png"),
          hotspot = {17, 40},
-         scale = 3,
       },
    },
 }

=== modified file 'data/tribes/immovables/berry_bushes/sea_buckthorn/medium/idle_0.png'
Binary files data/tribes/immovables/berry_bushes/sea_buckthorn/medium/idle_0.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/sea_buckthorn/medium/idle_0.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/sea_buckthorn/medium/idle_1.png'
Binary files data/tribes/immovables/berry_bushes/sea_buckthorn/medium/idle_1.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/sea_buckthorn/medium/idle_1.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/sea_buckthorn/medium/idle_2.png'
Binary files data/tribes/immovables/berry_bushes/sea_buckthorn/medium/idle_2.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/sea_buckthorn/medium/idle_2.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/sea_buckthorn/medium/idle_3.png'
Binary files data/tribes/immovables/berry_bushes/sea_buckthorn/medium/idle_3.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/sea_buckthorn/medium/idle_3.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/sea_buckthorn/ripe/idle_0.png'
Binary files data/tribes/immovables/berry_bushes/sea_buckthorn/ripe/idle_0.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/sea_buckthorn/ripe/idle_0.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/sea_buckthorn/ripe/idle_1.png'
Binary files data/tribes/immovables/berry_bushes/sea_buckthorn/ripe/idle_1.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/sea_buckthorn/ripe/idle_1.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/sea_buckthorn/ripe/idle_2.png'
Binary files data/tribes/immovables/berry_bushes/sea_buckthorn/ripe/idle_2.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/sea_buckthorn/ripe/idle_2.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/sea_buckthorn/ripe/idle_3.png'
Binary files data/tribes/immovables/berry_bushes/sea_buckthorn/ripe/idle_3.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/sea_buckthorn/ripe/idle_3.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/sea_buckthorn/small/idle_0.png'
Binary files data/tribes/immovables/berry_bushes/sea_buckthorn/small/idle_0.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/sea_buckthorn/small/idle_0.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/sea_buckthorn/small/idle_1.png'
Binary files data/tribes/immovables/berry_bushes/sea_buckthorn/small/idle_1.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/sea_buckthorn/small/idle_1.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/sea_buckthorn/small/idle_2.png'
Binary files data/tribes/immovables/berry_bushes/sea_buckthorn/small/idle_2.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/sea_buckthorn/small/idle_2.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/sea_buckthorn/small/idle_3.png'
Binary files data/tribes/immovables/berry_bushes/sea_buckthorn/small/idle_3.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/sea_buckthorn/small/idle_3.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/sea_buckthorn/tiny/idle_0.png'
Binary files data/tribes/immovables/berry_bushes/sea_buckthorn/tiny/idle_0.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/sea_buckthorn/tiny/idle_0.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/sea_buckthorn/tiny/idle_1.png'
Binary files data/tribes/immovables/berry_bushes/sea_buckthorn/tiny/idle_1.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/sea_buckthorn/tiny/idle_1.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/sea_buckthorn/tiny/idle_2.png'
Binary files data/tribes/immovables/berry_bushes/sea_buckthorn/tiny/idle_2.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/sea_buckthorn/tiny/idle_2.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/sea_buckthorn/tiny/idle_3.png'
Binary files data/tribes/immovables/berry_bushes/sea_buckthorn/tiny/idle_3.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/sea_buckthorn/tiny/idle_3.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/strawberry/init.lua'
--- data/tribes/immovables/berry_bushes/strawberry/init.lua	2018-11-03 11:27:18 +0000
+++ data/tribes/immovables/berry_bushes/strawberry/init.lua	2019-02-28 12:35:28 +0000
@@ -26,7 +26,6 @@
       idle = {
          pictures = path.list_files (dirname .. "tiny/idle_?.png"),
          hotspot = {4, 4},
-         scale = 3,
       },
    },
 }
@@ -50,7 +49,6 @@
       idle = {
          pictures = path.list_files (dirname .. "small/idle_?.png"),
          hotspot = {12, 9},
-         scale = 3,
       },
    },
 }
@@ -74,7 +72,6 @@
       idle = {
          pictures = path.list_files (dirname .. "medium/idle_?.png"),
          hotspot = {21, 15},
-         scale = 3,
       },
    },
 }
@@ -100,7 +97,6 @@
       idle = {
          pictures = path.list_files (dirname .. "ripe/idle_?.png"),
          hotspot = {21, 15},
-         scale = 3,
       },
    },
 }

=== modified file 'data/tribes/immovables/berry_bushes/strawberry/medium/idle_0.png'
Binary files data/tribes/immovables/berry_bushes/strawberry/medium/idle_0.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/strawberry/medium/idle_0.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/strawberry/medium/idle_1.png'
Binary files data/tribes/immovables/berry_bushes/strawberry/medium/idle_1.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/strawberry/medium/idle_1.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/strawberry/medium/idle_2.png'
Binary files data/tribes/immovables/berry_bushes/strawberry/medium/idle_2.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/strawberry/medium/idle_2.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/strawberry/medium/idle_3.png'
Binary files data/tribes/immovables/berry_bushes/strawberry/medium/idle_3.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/strawberry/medium/idle_3.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/strawberry/ripe/idle_0.png'
Binary files data/tribes/immovables/berry_bushes/strawberry/ripe/idle_0.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/strawberry/ripe/idle_0.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/strawberry/ripe/idle_1.png'
Binary files data/tribes/immovables/berry_bushes/strawberry/ripe/idle_1.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/strawberry/ripe/idle_1.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/strawberry/ripe/idle_2.png'
Binary files data/tribes/immovables/berry_bushes/strawberry/ripe/idle_2.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/strawberry/ripe/idle_2.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/strawberry/ripe/idle_3.png'
Binary files data/tribes/immovables/berry_bushes/strawberry/ripe/idle_3.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/strawberry/ripe/idle_3.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/strawberry/small/idle_0.png'
Binary files data/tribes/immovables/berry_bushes/strawberry/small/idle_0.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/strawberry/small/idle_0.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/strawberry/small/idle_1.png'
Binary files data/tribes/immovables/berry_bushes/strawberry/small/idle_1.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/strawberry/small/idle_1.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/strawberry/small/idle_2.png'
Binary files data/tribes/immovables/berry_bushes/strawberry/small/idle_2.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/strawberry/small/idle_2.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/strawberry/small/idle_3.png'
Binary files data/tribes/immovables/berry_bushes/strawberry/small/idle_3.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/strawberry/small/idle_3.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/strawberry/tiny/idle_0.png'
Binary files data/tribes/immovables/berry_bushes/strawberry/tiny/idle_0.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/strawberry/tiny/idle_0.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/strawberry/tiny/idle_1.png'
Binary files data/tribes/immovables/berry_bushes/strawberry/tiny/idle_1.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/strawberry/tiny/idle_1.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/strawberry/tiny/idle_2.png'
Binary files data/tribes/immovables/berry_bushes/strawberry/tiny/idle_2.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/strawberry/tiny/idle_2.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/berry_bushes/strawberry/tiny/idle_3.png'
Binary files data/tribes/immovables/berry_bushes/strawberry/tiny/idle_3.png	2018-02-05 12:57:52 +0000 and data/tribes/immovables/berry_bushes/strawberry/tiny/idle_3.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/pond_dry/idle_00.png'
Binary files data/tribes/immovables/pond_dry/idle_00.png	2017-08-10 09:31:10 +0000 and data/tribes/immovables/pond_dry/idle_00.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/pond_dry/init.lua'
--- data/tribes/immovables/pond_dry/init.lua	2017-12-12 09:03:15 +0000
+++ data/tribes/immovables/pond_dry/init.lua	2019-02-28 12:35:28 +0000
@@ -22,7 +22,6 @@
       idle = {
          pictures = path.list_files (dirname .. "idle_??.png"),
          hotspot = { 8, 5 },
-         scale = 2.5
       },
    }
 }

=== modified file 'data/tribes/immovables/pond_growing/idle_00.png'
Binary files data/tribes/immovables/pond_growing/idle_00.png	2017-08-08 14:16:43 +0000 and data/tribes/immovables/pond_growing/idle_00.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/pond_growing/init.lua'
--- data/tribes/immovables/pond_growing/init.lua	2018-02-17 15:41:29 +0000
+++ data/tribes/immovables/pond_growing/init.lua	2019-02-28 12:35:28 +0000
@@ -19,7 +19,6 @@
       idle = {
          pictures = path.list_files (dirname .. "idle_??.png"),
          hotspot = { 8, 5 },
-         scale = 2.5
       },
    }
 }

=== modified file 'data/tribes/immovables/pond_mature/idle_00.png'
Binary files data/tribes/immovables/pond_mature/idle_00.png	2017-08-08 14:16:43 +0000 and data/tribes/immovables/pond_mature/idle_00.png	2019-02-28 12:35:28 +0000 differ
=== modified file 'data/tribes/immovables/pond_mature/init.lua'
--- data/tribes/immovables/pond_mature/init.lua	2018-02-17 15:41:29 +0000
+++ data/tribes/immovables/pond_mature/init.lua	2019-02-28 12:35:28 +0000
@@ -22,7 +22,6 @@
       idle = {
          pictures = path.list_files (dirname .. "idle_??.png"),
          hotspot = { 8, 5 },
-         scale = 2.5
       },
    }
 }

=== modified file 'data/tribes/immovables/shipconstruction_frisians/init.lua'
--- data/tribes/immovables/shipconstruction_frisians/init.lua	2018-03-25 18:28:00 +0000
+++ data/tribes/immovables/shipconstruction_frisians/init.lua	2019-02-28 12:35:28 +0000
@@ -7,7 +7,6 @@
    descname = pgettext("immovable", "Ship Under Construction"),
    size = "small",
    helptext_script = dirname .. "helptexts.lua",
-   representative_image = dirname .. "build_03.png",
    attributes = { "shipconstruction" },
    programs = {
       program = {

=== modified file 'data/tribes/workers/barbarians/builder/init.lua'
--- data/tribes/workers/barbarians/builder/init.lua	2017-02-12 09:10:57 +0000
+++ data/tribes/workers/barbarians/builder/init.lua	2019-02-28 12:35:28 +0000
@@ -1,20 +1,11 @@
 dirname = path.dirname(__file__)
 
-animations = {
-   idle = {
-      pictures = path.list_files(dirname .. "waiting_???.png"),
-      hotspot = { 11, 22 },
-      fps = 10
-   },
-   work = {
-      pictures = path.list_files(dirname .. "work_??.png"),
-      sound_effect = {
-            directory = "sound/hammering",
-            name = "hammering",
-      },
-      hotspot = { 10, 22 },
-      fps = 10
-   }
+animations = {}
+add_animation(animations, "idle", dirname, "waiting", {11, 22}, 10)
+add_animation(animations, "work", dirname, "work", {10, 22}, 10)
+animations["work"]["sound_effect"] = {
+   name = "hammering",
+   directory = "sound/hammering"
 }
 add_walking_animations(animations, "walk", dirname, "walk", {7, 22}, 10)
 add_walking_animations(animations, "walkload", dirname, "walk", {7, 22}, 10)

=== modified file 'data/tribes/workers/barbarians/recruit/init.lua'
--- data/tribes/workers/barbarians/recruit/init.lua	2017-05-25 20:17:29 +0000
+++ data/tribes/workers/barbarians/recruit/init.lua	2019-02-28 12:35:28 +0000
@@ -1,12 +1,7 @@
 dirname = path.dirname(__file__)
 
-animations = {
-   idle = {
-      pictures = path.list_files(dirname .. "idle_??.png"),
-      hotspot = { 16, 30 },
-      fps = 5
-   }
-}
+animations = {}
+add_animation(animations, "idle", dirname, "idle", {16, 30}, 5)
 add_walking_animations(animations, "walk", dirname, "walk", {16, 30}, 10)
 
 

=== added file 'data/tribes/workers/barbarians/recruit/walk_e_0.5_00.png'
Binary files data/tribes/workers/barbarians/recruit/walk_e_0.5_00.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_e_0.5_00.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_e_0.5_00_pc.png'
Binary files data/tribes/workers/barbarians/recruit/walk_e_0.5_00_pc.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_e_0.5_00_pc.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_e_0.5_01.png'
Binary files data/tribes/workers/barbarians/recruit/walk_e_0.5_01.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_e_0.5_01.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_e_0.5_01_pc.png'
Binary files data/tribes/workers/barbarians/recruit/walk_e_0.5_01_pc.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_e_0.5_01_pc.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_e_0.5_02.png'
Binary files data/tribes/workers/barbarians/recruit/walk_e_0.5_02.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_e_0.5_02.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_e_0.5_02_pc.png'
Binary files data/tribes/workers/barbarians/recruit/walk_e_0.5_02_pc.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_e_0.5_02_pc.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_e_0.5_03.png'
Binary files data/tribes/workers/barbarians/recruit/walk_e_0.5_03.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_e_0.5_03.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_e_0.5_03_pc.png'
Binary files data/tribes/workers/barbarians/recruit/walk_e_0.5_03_pc.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_e_0.5_03_pc.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_e_0.5_04.png'
Binary files data/tribes/workers/barbarians/recruit/walk_e_0.5_04.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_e_0.5_04.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_e_0.5_04_pc.png'
Binary files data/tribes/workers/barbarians/recruit/walk_e_0.5_04_pc.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_e_0.5_04_pc.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_e_0.5_05.png'
Binary files data/tribes/workers/barbarians/recruit/walk_e_0.5_05.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_e_0.5_05.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_e_0.5_05_pc.png'
Binary files data/tribes/workers/barbarians/recruit/walk_e_0.5_05_pc.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_e_0.5_05_pc.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_e_0.5_06.png'
Binary files data/tribes/workers/barbarians/recruit/walk_e_0.5_06.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_e_0.5_06.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_e_0.5_06_pc.png'
Binary files data/tribes/workers/barbarians/recruit/walk_e_0.5_06_pc.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_e_0.5_06_pc.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_e_0.5_07.png'
Binary files data/tribes/workers/barbarians/recruit/walk_e_0.5_07.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_e_0.5_07.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_e_0.5_07_pc.png'
Binary files data/tribes/workers/barbarians/recruit/walk_e_0.5_07_pc.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_e_0.5_07_pc.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_e_0.5_08.png'
Binary files data/tribes/workers/barbarians/recruit/walk_e_0.5_08.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_e_0.5_08.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_e_0.5_08_pc.png'
Binary files data/tribes/workers/barbarians/recruit/walk_e_0.5_08_pc.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_e_0.5_08_pc.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_e_0.5_09.png'
Binary files data/tribes/workers/barbarians/recruit/walk_e_0.5_09.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_e_0.5_09.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_e_0.5_09_pc.png'
Binary files data/tribes/workers/barbarians/recruit/walk_e_0.5_09_pc.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_e_0.5_09_pc.png	2019-02-28 12:35:28 +0000 differ
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_e_00.png' => 'data/tribes/workers/barbarians/recruit/walk_e_1_00.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_e_00_pc.png' => 'data/tribes/workers/barbarians/recruit/walk_e_1_00_pc.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_e_01.png' => 'data/tribes/workers/barbarians/recruit/walk_e_1_01.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_e_01_pc.png' => 'data/tribes/workers/barbarians/recruit/walk_e_1_01_pc.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_e_02.png' => 'data/tribes/workers/barbarians/recruit/walk_e_1_02.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_e_02_pc.png' => 'data/tribes/workers/barbarians/recruit/walk_e_1_02_pc.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_e_03.png' => 'data/tribes/workers/barbarians/recruit/walk_e_1_03.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_e_03_pc.png' => 'data/tribes/workers/barbarians/recruit/walk_e_1_03_pc.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_e_04.png' => 'data/tribes/workers/barbarians/recruit/walk_e_1_04.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_e_04_pc.png' => 'data/tribes/workers/barbarians/recruit/walk_e_1_04_pc.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_e_05.png' => 'data/tribes/workers/barbarians/recruit/walk_e_1_05.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_e_05_pc.png' => 'data/tribes/workers/barbarians/recruit/walk_e_1_05_pc.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_e_06.png' => 'data/tribes/workers/barbarians/recruit/walk_e_1_06.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_e_06_pc.png' => 'data/tribes/workers/barbarians/recruit/walk_e_1_06_pc.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_e_07.png' => 'data/tribes/workers/barbarians/recruit/walk_e_1_07.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_e_07_pc.png' => 'data/tribes/workers/barbarians/recruit/walk_e_1_07_pc.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_e_08.png' => 'data/tribes/workers/barbarians/recruit/walk_e_1_08.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_e_08_pc.png' => 'data/tribes/workers/barbarians/recruit/walk_e_1_08_pc.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_e_09.png' => 'data/tribes/workers/barbarians/recruit/walk_e_1_09.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_e_09_pc.png' => 'data/tribes/workers/barbarians/recruit/walk_e_1_09_pc.png'
=== added file 'data/tribes/workers/barbarians/recruit/walk_ne_0.5_00.png'
Binary files data/tribes/workers/barbarians/recruit/walk_ne_0.5_00.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_ne_0.5_00.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_ne_0.5_00_pc.png'
Binary files data/tribes/workers/barbarians/recruit/walk_ne_0.5_00_pc.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_ne_0.5_00_pc.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_ne_0.5_01.png'
Binary files data/tribes/workers/barbarians/recruit/walk_ne_0.5_01.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_ne_0.5_01.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_ne_0.5_01_pc.png'
Binary files data/tribes/workers/barbarians/recruit/walk_ne_0.5_01_pc.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_ne_0.5_01_pc.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_ne_0.5_02.png'
Binary files data/tribes/workers/barbarians/recruit/walk_ne_0.5_02.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_ne_0.5_02.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_ne_0.5_02_pc.png'
Binary files data/tribes/workers/barbarians/recruit/walk_ne_0.5_02_pc.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_ne_0.5_02_pc.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_ne_0.5_03.png'
Binary files data/tribes/workers/barbarians/recruit/walk_ne_0.5_03.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_ne_0.5_03.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_ne_0.5_03_pc.png'
Binary files data/tribes/workers/barbarians/recruit/walk_ne_0.5_03_pc.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_ne_0.5_03_pc.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_ne_0.5_04.png'
Binary files data/tribes/workers/barbarians/recruit/walk_ne_0.5_04.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_ne_0.5_04.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_ne_0.5_04_pc.png'
Binary files data/tribes/workers/barbarians/recruit/walk_ne_0.5_04_pc.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_ne_0.5_04_pc.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_ne_0.5_05.png'
Binary files data/tribes/workers/barbarians/recruit/walk_ne_0.5_05.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_ne_0.5_05.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_ne_0.5_05_pc.png'
Binary files data/tribes/workers/barbarians/recruit/walk_ne_0.5_05_pc.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_ne_0.5_05_pc.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_ne_0.5_06.png'
Binary files data/tribes/workers/barbarians/recruit/walk_ne_0.5_06.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_ne_0.5_06.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_ne_0.5_06_pc.png'
Binary files data/tribes/workers/barbarians/recruit/walk_ne_0.5_06_pc.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_ne_0.5_06_pc.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_ne_0.5_07.png'
Binary files data/tribes/workers/barbarians/recruit/walk_ne_0.5_07.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_ne_0.5_07.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_ne_0.5_07_pc.png'
Binary files data/tribes/workers/barbarians/recruit/walk_ne_0.5_07_pc.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_ne_0.5_07_pc.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_ne_0.5_08.png'
Binary files data/tribes/workers/barbarians/recruit/walk_ne_0.5_08.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_ne_0.5_08.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_ne_0.5_08_pc.png'
Binary files data/tribes/workers/barbarians/recruit/walk_ne_0.5_08_pc.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_ne_0.5_08_pc.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_ne_0.5_09.png'
Binary files data/tribes/workers/barbarians/recruit/walk_ne_0.5_09.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_ne_0.5_09.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_ne_0.5_09_pc.png'
Binary files data/tribes/workers/barbarians/recruit/walk_ne_0.5_09_pc.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_ne_0.5_09_pc.png	2019-02-28 12:35:28 +0000 differ
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_ne_00.png' => 'data/tribes/workers/barbarians/recruit/walk_ne_1_00.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_ne_00_pc.png' => 'data/tribes/workers/barbarians/recruit/walk_ne_1_00_pc.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_ne_01.png' => 'data/tribes/workers/barbarians/recruit/walk_ne_1_01.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_ne_01_pc.png' => 'data/tribes/workers/barbarians/recruit/walk_ne_1_01_pc.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_ne_02.png' => 'data/tribes/workers/barbarians/recruit/walk_ne_1_02.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_ne_02_pc.png' => 'data/tribes/workers/barbarians/recruit/walk_ne_1_02_pc.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_ne_03.png' => 'data/tribes/workers/barbarians/recruit/walk_ne_1_03.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_ne_03_pc.png' => 'data/tribes/workers/barbarians/recruit/walk_ne_1_03_pc.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_ne_04.png' => 'data/tribes/workers/barbarians/recruit/walk_ne_1_04.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_ne_04_pc.png' => 'data/tribes/workers/barbarians/recruit/walk_ne_1_04_pc.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_ne_05.png' => 'data/tribes/workers/barbarians/recruit/walk_ne_1_05.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_ne_05_pc.png' => 'data/tribes/workers/barbarians/recruit/walk_ne_1_05_pc.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_ne_06.png' => 'data/tribes/workers/barbarians/recruit/walk_ne_1_06.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_ne_06_pc.png' => 'data/tribes/workers/barbarians/recruit/walk_ne_1_06_pc.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_ne_07.png' => 'data/tribes/workers/barbarians/recruit/walk_ne_1_07.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_ne_07_pc.png' => 'data/tribes/workers/barbarians/recruit/walk_ne_1_07_pc.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_ne_08.png' => 'data/tribes/workers/barbarians/recruit/walk_ne_1_08.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_ne_08_pc.png' => 'data/tribes/workers/barbarians/recruit/walk_ne_1_08_pc.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_ne_09.png' => 'data/tribes/workers/barbarians/recruit/walk_ne_1_09.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_ne_09_pc.png' => 'data/tribes/workers/barbarians/recruit/walk_ne_1_09_pc.png'
=== added file 'data/tribes/workers/barbarians/recruit/walk_nw_0.5_00.png'
Binary files data/tribes/workers/barbarians/recruit/walk_nw_0.5_00.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_nw_0.5_00.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_nw_0.5_00_pc.png'
Binary files data/tribes/workers/barbarians/recruit/walk_nw_0.5_00_pc.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_nw_0.5_00_pc.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_nw_0.5_01.png'
Binary files data/tribes/workers/barbarians/recruit/walk_nw_0.5_01.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_nw_0.5_01.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_nw_0.5_01_pc.png'
Binary files data/tribes/workers/barbarians/recruit/walk_nw_0.5_01_pc.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_nw_0.5_01_pc.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_nw_0.5_02.png'
Binary files data/tribes/workers/barbarians/recruit/walk_nw_0.5_02.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_nw_0.5_02.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_nw_0.5_02_pc.png'
Binary files data/tribes/workers/barbarians/recruit/walk_nw_0.5_02_pc.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_nw_0.5_02_pc.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_nw_0.5_03.png'
Binary files data/tribes/workers/barbarians/recruit/walk_nw_0.5_03.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_nw_0.5_03.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_nw_0.5_03_pc.png'
Binary files data/tribes/workers/barbarians/recruit/walk_nw_0.5_03_pc.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_nw_0.5_03_pc.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_nw_0.5_04.png'
Binary files data/tribes/workers/barbarians/recruit/walk_nw_0.5_04.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_nw_0.5_04.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_nw_0.5_04_pc.png'
Binary files data/tribes/workers/barbarians/recruit/walk_nw_0.5_04_pc.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_nw_0.5_04_pc.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_nw_0.5_05.png'
Binary files data/tribes/workers/barbarians/recruit/walk_nw_0.5_05.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_nw_0.5_05.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_nw_0.5_05_pc.png'
Binary files data/tribes/workers/barbarians/recruit/walk_nw_0.5_05_pc.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_nw_0.5_05_pc.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_nw_0.5_06.png'
Binary files data/tribes/workers/barbarians/recruit/walk_nw_0.5_06.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_nw_0.5_06.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_nw_0.5_06_pc.png'
Binary files data/tribes/workers/barbarians/recruit/walk_nw_0.5_06_pc.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_nw_0.5_06_pc.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_nw_0.5_07.png'
Binary files data/tribes/workers/barbarians/recruit/walk_nw_0.5_07.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_nw_0.5_07.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_nw_0.5_07_pc.png'
Binary files data/tribes/workers/barbarians/recruit/walk_nw_0.5_07_pc.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_nw_0.5_07_pc.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_nw_0.5_08.png'
Binary files data/tribes/workers/barbarians/recruit/walk_nw_0.5_08.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_nw_0.5_08.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_nw_0.5_08_pc.png'
Binary files data/tribes/workers/barbarians/recruit/walk_nw_0.5_08_pc.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_nw_0.5_08_pc.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_nw_0.5_09.png'
Binary files data/tribes/workers/barbarians/recruit/walk_nw_0.5_09.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_nw_0.5_09.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_nw_0.5_09_pc.png'
Binary files data/tribes/workers/barbarians/recruit/walk_nw_0.5_09_pc.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_nw_0.5_09_pc.png	2019-02-28 12:35:28 +0000 differ
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_nw_00.png' => 'data/tribes/workers/barbarians/recruit/walk_nw_1_00.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_nw_00_pc.png' => 'data/tribes/workers/barbarians/recruit/walk_nw_1_00_pc.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_nw_01.png' => 'data/tribes/workers/barbarians/recruit/walk_nw_1_01.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_nw_01_pc.png' => 'data/tribes/workers/barbarians/recruit/walk_nw_1_01_pc.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_nw_02.png' => 'data/tribes/workers/barbarians/recruit/walk_nw_1_02.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_nw_02_pc.png' => 'data/tribes/workers/barbarians/recruit/walk_nw_1_02_pc.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_nw_03.png' => 'data/tribes/workers/barbarians/recruit/walk_nw_1_03.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_nw_03_pc.png' => 'data/tribes/workers/barbarians/recruit/walk_nw_1_03_pc.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_nw_04.png' => 'data/tribes/workers/barbarians/recruit/walk_nw_1_04.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_nw_04_pc.png' => 'data/tribes/workers/barbarians/recruit/walk_nw_1_04_pc.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_nw_05.png' => 'data/tribes/workers/barbarians/recruit/walk_nw_1_05.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_nw_05_pc.png' => 'data/tribes/workers/barbarians/recruit/walk_nw_1_05_pc.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_nw_06.png' => 'data/tribes/workers/barbarians/recruit/walk_nw_1_06.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_nw_06_pc.png' => 'data/tribes/workers/barbarians/recruit/walk_nw_1_06_pc.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_nw_07.png' => 'data/tribes/workers/barbarians/recruit/walk_nw_1_07.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_nw_07_pc.png' => 'data/tribes/workers/barbarians/recruit/walk_nw_1_07_pc.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_nw_08.png' => 'data/tribes/workers/barbarians/recruit/walk_nw_1_08.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_nw_08_pc.png' => 'data/tribes/workers/barbarians/recruit/walk_nw_1_08_pc.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_nw_09.png' => 'data/tribes/workers/barbarians/recruit/walk_nw_1_09.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_nw_09_pc.png' => 'data/tribes/workers/barbarians/recruit/walk_nw_1_09_pc.png'
=== added file 'data/tribes/workers/barbarians/recruit/walk_se_0.5_00.png'
Binary files data/tribes/workers/barbarians/recruit/walk_se_0.5_00.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_se_0.5_00.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_se_0.5_00_pc.png'
Binary files data/tribes/workers/barbarians/recruit/walk_se_0.5_00_pc.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_se_0.5_00_pc.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_se_0.5_01.png'
Binary files data/tribes/workers/barbarians/recruit/walk_se_0.5_01.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_se_0.5_01.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_se_0.5_01_pc.png'
Binary files data/tribes/workers/barbarians/recruit/walk_se_0.5_01_pc.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_se_0.5_01_pc.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_se_0.5_02.png'
Binary files data/tribes/workers/barbarians/recruit/walk_se_0.5_02.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_se_0.5_02.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_se_0.5_02_pc.png'
Binary files data/tribes/workers/barbarians/recruit/walk_se_0.5_02_pc.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_se_0.5_02_pc.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_se_0.5_03.png'
Binary files data/tribes/workers/barbarians/recruit/walk_se_0.5_03.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_se_0.5_03.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_se_0.5_03_pc.png'
Binary files data/tribes/workers/barbarians/recruit/walk_se_0.5_03_pc.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_se_0.5_03_pc.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_se_0.5_04.png'
Binary files data/tribes/workers/barbarians/recruit/walk_se_0.5_04.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_se_0.5_04.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_se_0.5_04_pc.png'
Binary files data/tribes/workers/barbarians/recruit/walk_se_0.5_04_pc.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_se_0.5_04_pc.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_se_0.5_05.png'
Binary files data/tribes/workers/barbarians/recruit/walk_se_0.5_05.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_se_0.5_05.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_se_0.5_05_pc.png'
Binary files data/tribes/workers/barbarians/recruit/walk_se_0.5_05_pc.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_se_0.5_05_pc.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_se_0.5_06.png'
Binary files data/tribes/workers/barbarians/recruit/walk_se_0.5_06.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_se_0.5_06.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_se_0.5_06_pc.png'
Binary files data/tribes/workers/barbarians/recruit/walk_se_0.5_06_pc.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_se_0.5_06_pc.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_se_0.5_07.png'
Binary files data/tribes/workers/barbarians/recruit/walk_se_0.5_07.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_se_0.5_07.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_se_0.5_07_pc.png'
Binary files data/tribes/workers/barbarians/recruit/walk_se_0.5_07_pc.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_se_0.5_07_pc.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_se_0.5_08.png'
Binary files data/tribes/workers/barbarians/recruit/walk_se_0.5_08.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_se_0.5_08.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_se_0.5_08_pc.png'
Binary files data/tribes/workers/barbarians/recruit/walk_se_0.5_08_pc.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_se_0.5_08_pc.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_se_0.5_09.png'
Binary files data/tribes/workers/barbarians/recruit/walk_se_0.5_09.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_se_0.5_09.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_se_0.5_09_pc.png'
Binary files data/tribes/workers/barbarians/recruit/walk_se_0.5_09_pc.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_se_0.5_09_pc.png	2019-02-28 12:35:28 +0000 differ
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_se_00.png' => 'data/tribes/workers/barbarians/recruit/walk_se_1_00.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_se_00_pc.png' => 'data/tribes/workers/barbarians/recruit/walk_se_1_00_pc.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_se_01.png' => 'data/tribes/workers/barbarians/recruit/walk_se_1_01.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_se_01_pc.png' => 'data/tribes/workers/barbarians/recruit/walk_se_1_01_pc.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_se_02.png' => 'data/tribes/workers/barbarians/recruit/walk_se_1_02.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_se_02_pc.png' => 'data/tribes/workers/barbarians/recruit/walk_se_1_02_pc.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_se_03.png' => 'data/tribes/workers/barbarians/recruit/walk_se_1_03.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_se_03_pc.png' => 'data/tribes/workers/barbarians/recruit/walk_se_1_03_pc.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_se_04.png' => 'data/tribes/workers/barbarians/recruit/walk_se_1_04.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_se_04_pc.png' => 'data/tribes/workers/barbarians/recruit/walk_se_1_04_pc.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_se_05.png' => 'data/tribes/workers/barbarians/recruit/walk_se_1_05.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_se_05_pc.png' => 'data/tribes/workers/barbarians/recruit/walk_se_1_05_pc.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_se_06.png' => 'data/tribes/workers/barbarians/recruit/walk_se_1_06.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_se_06_pc.png' => 'data/tribes/workers/barbarians/recruit/walk_se_1_06_pc.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_se_07.png' => 'data/tribes/workers/barbarians/recruit/walk_se_1_07.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_se_07_pc.png' => 'data/tribes/workers/barbarians/recruit/walk_se_1_07_pc.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_se_08.png' => 'data/tribes/workers/barbarians/recruit/walk_se_1_08.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_se_08_pc.png' => 'data/tribes/workers/barbarians/recruit/walk_se_1_08_pc.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_se_09.png' => 'data/tribes/workers/barbarians/recruit/walk_se_1_09.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_se_09_pc.png' => 'data/tribes/workers/barbarians/recruit/walk_se_1_09_pc.png'
=== added file 'data/tribes/workers/barbarians/recruit/walk_sw_0.5_00.png'
Binary files data/tribes/workers/barbarians/recruit/walk_sw_0.5_00.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_sw_0.5_00.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_sw_0.5_00_pc.png'
Binary files data/tribes/workers/barbarians/recruit/walk_sw_0.5_00_pc.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_sw_0.5_00_pc.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_sw_0.5_01.png'
Binary files data/tribes/workers/barbarians/recruit/walk_sw_0.5_01.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_sw_0.5_01.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_sw_0.5_01_pc.png'
Binary files data/tribes/workers/barbarians/recruit/walk_sw_0.5_01_pc.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_sw_0.5_01_pc.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_sw_0.5_02.png'
Binary files data/tribes/workers/barbarians/recruit/walk_sw_0.5_02.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_sw_0.5_02.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_sw_0.5_02_pc.png'
Binary files data/tribes/workers/barbarians/recruit/walk_sw_0.5_02_pc.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_sw_0.5_02_pc.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_sw_0.5_03.png'
Binary files data/tribes/workers/barbarians/recruit/walk_sw_0.5_03.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_sw_0.5_03.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_sw_0.5_03_pc.png'
Binary files data/tribes/workers/barbarians/recruit/walk_sw_0.5_03_pc.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_sw_0.5_03_pc.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_sw_0.5_04.png'
Binary files data/tribes/workers/barbarians/recruit/walk_sw_0.5_04.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_sw_0.5_04.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_sw_0.5_04_pc.png'
Binary files data/tribes/workers/barbarians/recruit/walk_sw_0.5_04_pc.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_sw_0.5_04_pc.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_sw_0.5_05.png'
Binary files data/tribes/workers/barbarians/recruit/walk_sw_0.5_05.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_sw_0.5_05.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_sw_0.5_05_pc.png'
Binary files data/tribes/workers/barbarians/recruit/walk_sw_0.5_05_pc.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_sw_0.5_05_pc.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_sw_0.5_06.png'
Binary files data/tribes/workers/barbarians/recruit/walk_sw_0.5_06.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_sw_0.5_06.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_sw_0.5_06_pc.png'
Binary files data/tribes/workers/barbarians/recruit/walk_sw_0.5_06_pc.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_sw_0.5_06_pc.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_sw_0.5_07.png'
Binary files data/tribes/workers/barbarians/recruit/walk_sw_0.5_07.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_sw_0.5_07.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_sw_0.5_07_pc.png'
Binary files data/tribes/workers/barbarians/recruit/walk_sw_0.5_07_pc.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_sw_0.5_07_pc.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_sw_0.5_08.png'
Binary files data/tribes/workers/barbarians/recruit/walk_sw_0.5_08.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_sw_0.5_08.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_sw_0.5_08_pc.png'
Binary files data/tribes/workers/barbarians/recruit/walk_sw_0.5_08_pc.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_sw_0.5_08_pc.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_sw_0.5_09.png'
Binary files data/tribes/workers/barbarians/recruit/walk_sw_0.5_09.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_sw_0.5_09.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_sw_0.5_09_pc.png'
Binary files data/tribes/workers/barbarians/recruit/walk_sw_0.5_09_pc.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_sw_0.5_09_pc.png	2019-02-28 12:35:28 +0000 differ
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_sw_00.png' => 'data/tribes/workers/barbarians/recruit/walk_sw_1_00.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_sw_00_pc.png' => 'data/tribes/workers/barbarians/recruit/walk_sw_1_00_pc.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_sw_01.png' => 'data/tribes/workers/barbarians/recruit/walk_sw_1_01.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_sw_01_pc.png' => 'data/tribes/workers/barbarians/recruit/walk_sw_1_01_pc.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_sw_02.png' => 'data/tribes/workers/barbarians/recruit/walk_sw_1_02.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_sw_02_pc.png' => 'data/tribes/workers/barbarians/recruit/walk_sw_1_02_pc.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_sw_03.png' => 'data/tribes/workers/barbarians/recruit/walk_sw_1_03.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_sw_03_pc.png' => 'data/tribes/workers/barbarians/recruit/walk_sw_1_03_pc.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_sw_04.png' => 'data/tribes/workers/barbarians/recruit/walk_sw_1_04.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_sw_04_pc.png' => 'data/tribes/workers/barbarians/recruit/walk_sw_1_04_pc.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_sw_05.png' => 'data/tribes/workers/barbarians/recruit/walk_sw_1_05.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_sw_05_pc.png' => 'data/tribes/workers/barbarians/recruit/walk_sw_1_05_pc.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_sw_06.png' => 'data/tribes/workers/barbarians/recruit/walk_sw_1_06.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_sw_06_pc.png' => 'data/tribes/workers/barbarians/recruit/walk_sw_1_06_pc.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_sw_07.png' => 'data/tribes/workers/barbarians/recruit/walk_sw_1_07.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_sw_07_pc.png' => 'data/tribes/workers/barbarians/recruit/walk_sw_1_07_pc.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_sw_08.png' => 'data/tribes/workers/barbarians/recruit/walk_sw_1_08.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_sw_08_pc.png' => 'data/tribes/workers/barbarians/recruit/walk_sw_1_08_pc.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_sw_09.png' => 'data/tribes/workers/barbarians/recruit/walk_sw_1_09.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_sw_09_pc.png' => 'data/tribes/workers/barbarians/recruit/walk_sw_1_09_pc.png'
=== added file 'data/tribes/workers/barbarians/recruit/walk_w_0.5_00.png'
Binary files data/tribes/workers/barbarians/recruit/walk_w_0.5_00.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_w_0.5_00.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_w_0.5_00_pc.png'
Binary files data/tribes/workers/barbarians/recruit/walk_w_0.5_00_pc.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_w_0.5_00_pc.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_w_0.5_01.png'
Binary files data/tribes/workers/barbarians/recruit/walk_w_0.5_01.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_w_0.5_01.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_w_0.5_01_pc.png'
Binary files data/tribes/workers/barbarians/recruit/walk_w_0.5_01_pc.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_w_0.5_01_pc.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_w_0.5_02.png'
Binary files data/tribes/workers/barbarians/recruit/walk_w_0.5_02.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_w_0.5_02.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_w_0.5_02_pc.png'
Binary files data/tribes/workers/barbarians/recruit/walk_w_0.5_02_pc.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_w_0.5_02_pc.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_w_0.5_03.png'
Binary files data/tribes/workers/barbarians/recruit/walk_w_0.5_03.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_w_0.5_03.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_w_0.5_03_pc.png'
Binary files data/tribes/workers/barbarians/recruit/walk_w_0.5_03_pc.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_w_0.5_03_pc.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_w_0.5_04.png'
Binary files data/tribes/workers/barbarians/recruit/walk_w_0.5_04.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_w_0.5_04.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_w_0.5_04_pc.png'
Binary files data/tribes/workers/barbarians/recruit/walk_w_0.5_04_pc.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_w_0.5_04_pc.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_w_0.5_05.png'
Binary files data/tribes/workers/barbarians/recruit/walk_w_0.5_05.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_w_0.5_05.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_w_0.5_05_pc.png'
Binary files data/tribes/workers/barbarians/recruit/walk_w_0.5_05_pc.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_w_0.5_05_pc.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_w_0.5_06.png'
Binary files data/tribes/workers/barbarians/recruit/walk_w_0.5_06.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_w_0.5_06.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_w_0.5_06_pc.png'
Binary files data/tribes/workers/barbarians/recruit/walk_w_0.5_06_pc.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_w_0.5_06_pc.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_w_0.5_07.png'
Binary files data/tribes/workers/barbarians/recruit/walk_w_0.5_07.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_w_0.5_07.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_w_0.5_07_pc.png'
Binary files data/tribes/workers/barbarians/recruit/walk_w_0.5_07_pc.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_w_0.5_07_pc.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_w_0.5_08.png'
Binary files data/tribes/workers/barbarians/recruit/walk_w_0.5_08.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_w_0.5_08.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_w_0.5_08_pc.png'
Binary files data/tribes/workers/barbarians/recruit/walk_w_0.5_08_pc.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_w_0.5_08_pc.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_w_0.5_09.png'
Binary files data/tribes/workers/barbarians/recruit/walk_w_0.5_09.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_w_0.5_09.png	2019-02-28 12:35:28 +0000 differ
=== added file 'data/tribes/workers/barbarians/recruit/walk_w_0.5_09_pc.png'
Binary files data/tribes/workers/barbarians/recruit/walk_w_0.5_09_pc.png	1970-01-01 00:00:00 +0000 and data/tribes/workers/barbarians/recruit/walk_w_0.5_09_pc.png	2019-02-28 12:35:28 +0000 differ
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_w_00.png' => 'data/tribes/workers/barbarians/recruit/walk_w_1_00.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_w_00_pc.png' => 'data/tribes/workers/barbarians/recruit/walk_w_1_00_pc.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_w_01.png' => 'data/tribes/workers/barbarians/recruit/walk_w_1_01.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_w_01_pc.png' => 'data/tribes/workers/barbarians/recruit/walk_w_1_01_pc.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_w_02.png' => 'data/tribes/workers/barbarians/recruit/walk_w_1_02.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_w_02_pc.png' => 'data/tribes/workers/barbarians/recruit/walk_w_1_02_pc.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_w_03.png' => 'data/tribes/workers/barbarians/recruit/walk_w_1_03.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_w_03_pc.png' => 'data/tribes/workers/barbarians/recruit/walk_w_1_03_pc.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_w_04.png' => 'data/tribes/workers/barbarians/recruit/walk_w_1_04.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_w_04_pc.png' => 'data/tribes/workers/barbarians/recruit/walk_w_1_04_pc.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_w_05.png' => 'data/tribes/workers/barbarians/recruit/walk_w_1_05.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_w_05_pc.png' => 'data/tribes/workers/barbarians/recruit/walk_w_1_05_pc.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_w_06.png' => 'data/tribes/workers/barbarians/recruit/walk_w_1_06.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_w_06_pc.png' => 'data/tribes/workers/barbarians/recruit/walk_w_1_06_pc.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_w_07.png' => 'data/tribes/workers/barbarians/recruit/walk_w_1_07.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_w_07_pc.png' => 'data/tribes/workers/barbarians/recruit/walk_w_1_07_pc.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_w_08.png' => 'data/tribes/workers/barbarians/recruit/walk_w_1_08.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_w_08_pc.png' => 'data/tribes/workers/barbarians/recruit/walk_w_1_08_pc.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_w_09.png' => 'data/tribes/workers/barbarians/recruit/walk_w_1_09.png'
=== renamed file 'data/tribes/workers/barbarians/recruit/walk_w_09_pc.png' => 'data/tribes/workers/barbarians/recruit/walk_w_1_09_pc.png'
=== modified file 'data/tribes/workers/barbarians/shipwright/init.lua'
--- data/tribes/workers/barbarians/shipwright/init.lua	2018-02-28 09:38:13 +0000
+++ data/tribes/workers/barbarians/shipwright/init.lua	2019-02-28 12:35:28 +0000
@@ -1,19 +1,11 @@
 dirname = path.dirname(__file__)
 
-animations = {
-   idle = {
-      pictures = path.list_files(dirname .. "idle_??.png"),
-      hotspot = { 11, 23 },
-   },
-   work = {
-      pictures = path.list_files(dirname .. "work_??.png"),
-      sound_effect = {
-            directory = "sound/hammering",
-            name = "hammering",
-      },
-      hotspot = { 11, 26 },
-      fps = 10
-   }
+animations = {}
+add_animation(animations, "idle", dirname, "idle", {11, 23})
+add_animation(animations, "work", dirname, "work", {11, 26}, 10)
+animations["work"]["sound_effect"] = {
+   name = "hammering",
+   directory = "sound/hammering"
 }
 add_walking_animations(animations, "walk", dirname, "walk", {9, 24}, 10)
 add_walking_animations(animations, "walkload", dirname, "walkload", {11, 22}, 10)

=== modified file 'doc/sphinx/source/animations.rst'
--- doc/sphinx/source/animations.rst	2018-04-09 08:01:28 +0000
+++ doc/sphinx/source/animations.rst	2019-02-28 12:35:28 +0000
@@ -3,13 +3,24 @@
 Animations
 ==========
 
-Animations are defined as Lua tables. All map objects have a mandatory ``idle`` animation. They can then have further animations, depending on what their specific capabilities are. Let's look at an example::
+This article covers how to get your animations into the Widelands engine.
+For information on how to create the animations' images with Blender, see
+`GraphicsDevelopment <https://wl.widelands.org/wiki/GraphicsDevelopment/>`_.
+
+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.
+
+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:
+
+.. code-block:: lua
 
    animations = {
       idle = {
-         pictures = path.list_files(path.dirname(__file__) .. "idle_??.png"),
+         files = path.list_files(path.dirname(__file__) .. "idle_??.png"),
          hotspot = { 5, 7 },
-         scale = 2.5,
          fps = 4,
          sound_effect = {
             directory = "sound/foo",
@@ -24,8 +35,11 @@
 **idle**
    *Mandatory*. This is the name of the animation. The animation can then be referenced by this name e.g. if you want to trigger it in a production program.
 
+**files**
+   *Mandatory*. A template for the image names. Our example will pick up any image from ``idle_00.png`` through ``idle_99.png`` in the specified directory path -- the current path in our example. These images can optionally have corresponding player color mask images called ``idle_00_pc.png`` through ``idle_99_pc.png``. Make sure to include leading 0's in the file names and to have consistent length -- we support either 2 digit or 3 digit numbers in an animation.
+
 **pictures**
-   *Mandatory*. A template for the image names. Our example will pick up any image from ``idle_00.png`` through ``idle_99.png`` in the specified directory path – the current path in our example. These images can optionally have corresponding player color mask images called ``idle_00_pc.png`` through ``idle_99_pc.png``. Make sure to include leading 0's in the file names.
+   *DEPRECATED*. The same as ``files``.
 
 **hotspot**
    *Mandatory*. Hotspots define a place on a graphic image through its *x* and *y* coordinates that can be used as a handle or reference point to provide control over positioning the image on the map. For example, hotspots help carriers stay on the road, and control the positioning of the wares they carry. Increase ``x`` to shift the animation to the left and ``y`` to shift it upwards.
@@ -33,22 +47,141 @@
 **fps**
    *Optional*. The frames per second for this animation if you want to deviate from the default fps. This will control the playback speed of the animation. Do not specify this value if you have only 1 animation frame.
 
-**scale**
-   **DEPRECATED**. If the animation should be blitted at any other scale than 1:1,
-   specify the float value here. For example, if the animation images are 2.5 times the size of what should be blitted at default zoom, use ``scale = 2.5``.
-
 **sound_effect**
    *Optional*. Our example will look for the sound files ``bar_00.ogg`` through ``bar_99.ogg`` in the directory ``data/sound/foo`` and play them in sequence.
 
 
+Mipmaps
+-------
+
+We support mipmaps for animations. They allow us to provide the same image in different
+resolutions for optimum rendering quality. Let's look at an example with a mipmap ``idle`` animation and a normal ``build`` animation:
+
+.. code-block:: lua
+
+   animations = {
+      idle = {
+         mipmap = {
+            {
+               scale = 0.5,
+               files = path.list_files(dirname .. "idle_0.5_??.png"),
+            },
+            {
+               scale = 1,
+               files = path.list_files(dirname .. "idle_1_??.png"),
+            },
+            {
+               scale = 2,
+               files = path.list_files(dirname .. "idle_2_??.png"),
+            },
+            {
+               scale = 4,
+               files = path.list_files(dirname .. "idle_4_??.png"),
+            }
+         },
+         hotspot = { 5, 7 },
+         fps = 4,
+         sound_effect = {
+            directory = "sound/foo",
+            name = "bar",
+         },
+      },
+      build = {
+         files = path.list_files(dirname .. "build_??.png"),
+         hotspot = { 5, 7 },
+      }
+   },
+
+The scale of ``1`` is mandatory, and other supported scales are ``0.5``, ``2``
+and ``4``.
+The base table should no longer contain the ``files`` entry
+when you're using a mipmap.
+Each mimap entry must define the ``files`` and the ``scale``.
+See also :ref:`animations_converting_formats`.
+
+
 Directional Animations
 ----------------------
 
 For objects that move around the map, like carriers, ships or animals, there need to be 6 animations for the walking directions northeast ``"ne"``, east ``"e"``, southeast ``"se"``, southwest ``"sw"``, west ``"w"``, and northwest ``"nw"``. So, a "walk" animation would consist of 6 animations called ``"walk_ne"``, ``"walk_e"``, ``"walk_se"``, ``"walk_sw"``, ``"walk_w"``, and ``"walk_nw"``.
 
-Each of these 6 animations will then be defined like the animation above, so we would end up with pictures called ``walk_ne_00.png``, ``walk_ne_01.png`` ... ``walk_nw_00.png``,  ``walk_nw_01.png`` ..., and for player color: ``walk_ne_00_pc.png``, ``walk_ne_01_pc.png`` ... ``walk_nw_00_pc.png``,  ``walk_nw_01_pc.png``, ...
-
-In order to cut down on the manual coding needed, we have a convenience function :any:`add_walking_animations` to define the animation tables for walking animations. The corresponding ``.lua`` script file is included centrally when the tribe or world loading is started, so you won't need to include it again.
+Each of these 6 animations will then be defined like the animation above, so we would end up with files called ``walk_ne_00.png``, ``walk_ne_01.png`` ... ``walk_nw_00.png``,  ``walk_nw_01.png`` ..., and for player color: ``walk_ne_00_pc.png``, ``walk_ne_01_pc.png`` ... ``walk_nw_00_pc.png``,  ``walk_nw_01_pc.png``, ...
+
+We also support mipmaps here -- name the files ``walk_ne_0.5_00.png``,
+``walk_ne_0.5_01.png`` etc. for scale `0.5`, ``walk_ne_1_00.png``,
+``walk_ne_1_01.png`` etc. for scale `1` and so on.
+
+
+
+.. _animations_convenience_functions:
+
+Convenience Functions
+---------------------
+
+In order to cut down on the manual coding needed, we provide the convenience functions
+:any:`add_animation` for static animations and :any:`add_walking_animations` for walking
+animations, both of which will also detect mipmaps automatically.
+The corresponding ``.lua`` script file is included centrally when the tribe or world
+loading is started, so you won't need to include it again. Example:
+
+.. code-block:: lua
+
+   dirname = path.dirname(__file__)
+
+   -- This table will contain the animations
+   animations = {}
+
+   -- Add an idle animation with hotspot = {16, 30} and fps = 5
+   add_animation(animations, "idle", dirname, "idle", {16, 30}, 5)
+
+   -- Add animations for the 6 directions with hotspot = {16, 30} and fps = 10
+   add_walking_animations(animations, "walk", dirname, "walk", {16, 30}, 10)
+
+   -- Add a "walkload" animation. The animation hasn't been created yet in this example, so we reuse the files for the "walk" animation.
+   add_walking_animations(animations, "walkload", dirname, "walk", {16, 30}, 10)
+
+
+   tribes:new_worker_type {
+      msgctxt = "fancytribe_worker",
+      name = "fancytribe_diligentworker",
+      ...
+
+      animations = animations, -- Include the animations table in your map object
+      ...
+   }
+
+The convenience functions don't support sound effects directly, so you'll have to
+add them manually, like this:
+
+.. code-block:: lua
+
+   animations = {}
+   add_animation(animations, "work", dirname, "work", {11, 26}, 10)
+   animations["work"]["sound_effect"] = {
+      name = "bar",
+      directory = "sound/foo"
+   }
+
+
+.. _animations_converting_formats:
+
+Converting Animation Formats
+----------------------------
+
+When converting a simple file animation to a mipmap animation, follow these steps:
+
+* Use `utils/rename_animation.py` to rename the previous animation, to make sure
+  that our version control system will not lose its history, e.g.::
+
+   utils/rename_animation.py data/tribes/workers/fancytribe/diligentworker/walk_ne data/tribes/workers/fancytribe/diligentworker/walk_ne_1
+   utils/rename_animation.py data/tribes/workers/fancytribe/diligentworker/walk_nw data/tribes/workers/fancytribe/diligentworker/walk_nw_1
+   ...
+
+* Export the new animations from Blender, preferably at all supported scales.
+  Only export the higher resolution scales if the textures have sufficient resolution.
+
+
+.. _animations_map_object_types:
 
 Map Object Types
 ----------------
@@ -78,28 +211,17 @@
 
 Any animation other than the ``build`` and ``idle`` animations are referenced in the building's ``programs`` table via the ``animate`` command. For more information on building programs, see :ref:`productionsite_programs`.
 
-For example, a mine could look like this::
+For example, the animations for a mine could look like this:
+
+.. code-block:: lua
 
    dirname = path.dirname(__file__)
 
-   animations = {
-      idle = {
-         pictures = path.list_files(dirname .. "idle_??.png"),
-         hotspot = { 21, 36 },
-      },
-      build = {
-         pictures = path.list_files(dirname .. "build_??.png"),
-         hotspot = { 21, 36 },
-      },
-      working = {
-         pictures = path.list_files(dirname .. "working_??.png"),
-         hotspot = { 21, 36 },
-      },
-      empty = {
-         pictures = path.list_files(dirname .. "empty_??.png"),
-         hotspot = { 21, 36 },
-      },
-   },
+   animations = {}
+   add_animation(animations, "idle", dirname, "idle", {21, 36})
+   add_animation(animations, "build", dirname, "build", {21, 36})
+   add_animation(animations, "working", dirname, "working", {21, 36})
+   add_animation(animations, "empty", dirname, "empty", {21, 36})
 
 
 Immovables
@@ -124,21 +246,15 @@
 
 Any further animations like e.g. "plant", "harvest", or "breed" will be referenced in the :ref:`tribes_worker_programs`, under the ``animation`` command.
 
-For example, a fisher could look like this::
+For example, a fisher's animations could look like this:
+
+.. code-block:: lua
 
    dirname = path.dirname(__file__)
 
-   animations = {
-      idle = {
-         pictures = path.list_files(dirname .. "idle_??.png"),
-         hotspot = { 9, 39 },
-      },
-      fishing = {
-         pictures = path.list_files(dirname .. "fishing_??.png"),
-         hotspot = { 9, 39 },
-         fps = 10
-      }
-   }
+   animations = {}
+   add_animation(animations, "idle", dirname, "idle", {9, 39})
+   add_animation(animations, "fishing", dirname, "fishing", {9, 39}, 10)
    add_walking_animations(animations, "walk", dirname, "walk", {10, 38}, 10)
    add_walking_animations(animations, "walkload", dirname, "walk", {10, 38}, 10)
 
@@ -146,29 +262,33 @@
 ^^^^^^^^
 
 Soldiers have the same animations as workers, plus additional non-directional battle animations. There can be multiple animations for each action in battle to be selected at random.
-For example, attacking towards the west can be defined like this::
+For example, attacking towards the west can be defined like this:
+
+.. code-block:: lua
 
    dirname = path.dirname(__file__)
 
-   animations = {
-      ...
-      atk_ok_w1 = {
-         pictures = path.list_files(dirname .. "atk_ok_w1_??.png"),
-         hotspot = { 36, 40 },
-         fps = 20
-      },
-      atk_ok_w2 = {
-         pictures = path.list_files(dirname .. "atk_ok_w2_??.png"),
-         hotspot = { 36, 40 },
-         fps = 20
-      },
-      ...
-   },
-
-   attack_success_w = {
-      "atk_ok_w1",
-      "atk_ok_w2"
-   },
+   animations = {}
+   add_animation(animations, "idle", dirname, "idle", {16, 31}, 5)
+   add_walking_animations(animations, "walk", dirname, "walk", {16, 31}, 10)
+   ...
+
+   add_animation(animations, "atk_ok_w1", dirname, "atk_ok_w1", {36, 40}, 20) -- First attack animation
+   add_animation(animations, "atk_ok_w2", dirname, "atk_ok_w2", {36, 40}, 20) -- Second attack animation
+   ...
+
+   tribes:new_soldier_type {
+      msgctxt = "fancytribe_worker",
+      name = "fancytribe_soldier",
+      ...
+
+      -- Reference the attack animations in your map object
+      attack_success_w = {
+         "atk_ok_w1",
+         "atk_ok_w2"
+      },
+      ...
+   }
 
 The battle animations are:
 

=== modified file 'src/graphic/animation.cc'
--- src/graphic/animation.cc	2019-02-23 11:00:49 +0000
+++ src/graphic/animation.cc	2019-02-28 12:35:28 +0000
@@ -23,8 +23,10 @@
 #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"
@@ -42,19 +44,34 @@
 #include "sound/sound_handler.h"
 
 namespace {
+// The mipmap scales supported by the engine.
+// Ensure that this always matches supported_scales in data/scription/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(float scale, const LuaTable& table);
+
+		bool hasplrclrs;
+		std::vector<std::string> image_files;
+		std::vector<std::string> pc_mask_image_files;
+
+		std::vector<const Image*> frames;
+		std::vector<const Image*> pcmasks;
+	};
+
 	~NonPackedAnimation() override {
 	}
 	explicit NonPackedAnimation(const LuaTable& table);
 
 	// Implements Animation.
 	float height() const override;
-	Rectf source_rectangle(int percent_from_bottom) 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;
@@ -66,10 +83,12 @@
 	                  const Rectf& source_rect,
 	                  const Rectf& destination_rect,
 	                  const RGBColor* clr,
-	                  Surface* target) const override;
+	                  Surface* target, float scale) const override;
 	void trigger_sound(uint32_t framenumber, uint32_t stereo_position) const override;
 
 private:
+	float find_best_scale(float scale) const;
+
 	// Loads the graphics if they are not yet loaded.
 	void ensure_graphics_are_loaded() const;
 
@@ -79,14 +98,15 @@
 	uint32_t current_frame(uint32_t time) const;
 
 	uint32_t frametime_;
-	Vector2i hotspot_ = Vector2i::zero();
-	bool hasplrclrs_;
-	std::vector<std::string> image_files_;
-	std::vector<std::string> pc_mask_image_files_;
-	float scale_;
-
-	std::vector<const Image*> frames_;
-	std::vector<const Image*> pcmasks_;
+	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_;
 
 	// name of sound effect that will be played at frame 0.
 	// TODO(sirver): this should be done using playsound in a program instead of
@@ -95,13 +115,38 @@
 	bool play_once_;
 };
 
+NonPackedAnimation::MipMapEntry::MipMapEntry(float scale, const LuaTable& table) : hasplrclrs(false) {
+	if (scale <= 0.0f) {
+		throw wexception("Animation scales must be positive numbers. Found %.2f", scale);
+	}
+
+	// TODO(GunChleoc): We want to rename these from "pictures" to "files", because we'll have spritesheets etc. in the future, and this naming will be clearer.
+	// We don't want to convert them in bulk right now though - it will take care of itself as we convert to mipmaps.
+	image_files = (table.has_key("files") ? table.get_table("files") : table.get_table("pictures"))->array_entries<std::string>();
+
+	if (image_files.empty()) {
+		throw wexception("Animation without image files. For a scale of 1.0, the template should look similar to this:"
+		                 " 'directory/idle_1_??.png' for 'directory/idle_1_00.png' etc.");
+	}
+
+	for (std::string image_file : image_files) {
+		boost::replace_last(image_file, ".png", "_pc.png");
+		if (g_fs->file_exists(image_file)) {
+			hasplrclrs = true;
+			pc_mask_image_files.push_back(image_file);
+		} else if (hasplrclrs) {
+			throw wexception("Animation is missing player color file: %s", image_file.c_str());
+		}
+	}
+
+	assert(!image_files.empty());
+	assert(pc_mask_image_files.size() == image_files.size() || pc_mask_image_files.empty());
+}
+
 NonPackedAnimation::NonPackedAnimation(const LuaTable& table)
-   : frametime_(FRAME_LENGTH),
-     hotspot_(table.get_vector<std::string, int>("hotspot")),
-     hasplrclrs_(false),
-     scale_(1),
-     play_once_(false) {
+   : frametime_(FRAME_LENGTH), hotspot_(table.get_vector<std::string, int>("hotspot")), play_once_(false) {
 	try {
+		// Sound
 		if (table.has_key("sound_effect")) {
 			std::unique_ptr<LuaTable> sound_effects = table.get_table("sound_effect");
 
@@ -111,98 +156,128 @@
 			g_sound_handler.load_fx_if_needed(directory, name, sound_effect_);
 		}
 
+		// Repetition
 		if (table.has_key("play_once")) {
 			play_once_ = table.get_bool("play_once");
 		}
 
-		image_files_ = table.get_table("pictures")->array_entries<std::string>();
+		if (table.has_key("mipmap")) {
+			std::unique_ptr<LuaTable> mipmaps_table = table.get_table("mipmap");
+			for (const int key : mipmaps_table->keys<int>()) {
+				std::unique_ptr<LuaTable> current_scale_table = mipmaps_table->get_table(key);
+				const float current_scale = current_scale_table->get_double("scale");
+				if (kSupportedScales.count(current_scale) != 1) {
+					std::string supported_scales = "";
+					for (const float supported_scale : kSupportedScales) {
+						supported_scales = (boost::format("%s %.1f") % supported_scales % supported_scale).str();
+					}
+					throw wexception(
+						"Animation has unsupported scale '%.1f' in mipmap - supported scales are:%s", current_scale, supported_scales.c_str());
+				}
+				mipmaps_.insert(std::make_pair(current_scale, std::unique_ptr<MipMapEntry>(new MipMapEntry(current_scale, *current_scale_table))));
+			}
+		} else {
+			mipmaps_.insert(std::make_pair(1.0f, std::unique_ptr<MipMapEntry>(new MipMapEntry(1.0f, table))));
+		}
 
-		if (image_files_.empty()) {
-			throw wexception("Animation without pictures. The template should look similar to this:"
-			                 " 'directory/idle_??.png' for 'directory/idle_00.png' etc.");
-		} else if (table.has_key("fps")) {
-			if (image_files_.size() == 1) {
+		// Frames
+		if (table.has_key("fps")) {
+			if (nr_frames_ == 1) {
 				throw wexception(
-				   "Animation with one picture %s must not have 'fps'", image_files_[0].c_str());
+					"Animation with one picture %s must not have 'fps'", mipmaps_.begin()->second->image_files[0].c_str());
 			}
 			frametime_ = 1000 / get_positive_int(table, "fps");
 		}
-
-		for (std::string image_file : image_files_) {
-			boost::replace_last(image_file, ".png", "_pc.png");
-			if (g_fs->file_exists(image_file)) {
-				hasplrclrs_ = true;
-				pc_mask_image_files_.push_back(image_file);
-			} else if (hasplrclrs_) {
-				throw wexception("Animation is missing player color file: %s", image_file.c_str());
-			}
-		}
-
-		if (table.has_key("scale")) {
-			scale_ = table.get_double("scale");
-			if (scale_ <= 0.0f) {
-				throw wexception("Animation scale needs to be > 0.0f, but it is %f. The first image of "
-				                 "this animation is %s",
-				                 static_cast<double>(scale_), image_files_[0].c_str());
-			}
-		}
-
-		assert(!image_files_.empty());
-		assert(pc_mask_image_files_.size() == image_files_.size() || pc_mask_image_files_.empty());
-		assert(scale_ > 0);
+		nr_frames_ = mipmaps_.begin()->second->image_files.size();
+
+		// Perform some checks to make sure that the data is complete and consistent
+		const bool should_have_playercolor = mipmaps_.begin()->second->hasplrclrs;
+		for (const auto& mipmap : mipmaps_) {
+			if (mipmap.second->image_files.size() != nr_frames_) {
+				throw wexception("Mismatched number of images for different scales in animation table: %" PRIuS " vs. %u at scale %.2f",
+									  mipmap.second->image_files.size(),
+									  nr_frames_,
+									  mipmap.first);
+			}
+			if (mipmap.second->hasplrclrs != should_have_playercolor) {
+				throw wexception("Mismatched existence of player colors in animation table for scales %.2f and %.2f",
+									  mipmaps_.begin()->first,
+									  mipmap.first);
+			}
+		}
+		if (mipmaps_.count(1.0f) != 1) {
+			throw wexception("All animations must provide images for the neutral scale (1.0)");
+		}
 	} catch (const LuaError& e) {
 		throw wexception("Error in animation table: %s", e.what());
 	}
 }
 
+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;
+}
+
 void NonPackedAnimation::ensure_graphics_are_loaded() const {
-	if (frames_.empty()) {
+	if (mipmaps_.begin()->second->frames.empty()) {
 		const_cast<NonPackedAnimation*>(this)->load_graphics();
 	}
 }
 
 void NonPackedAnimation::load_graphics() {
-	if (image_files_.empty())
-		throw wexception("animation without pictures.");
-
-	if (pc_mask_image_files_.size() && pc_mask_image_files_.size() != image_files_.size())
-		throw wexception("animation has %" PRIuS " frames but playercolor mask has %" PRIuS " frames",
-		                 image_files_.size(), pc_mask_image_files_.size());
-
-	for (const std::string& filename : image_files_) {
-		const Image* image = g_gr->images().get(filename);
-		if (frames_.size() &&
-		    (frames_[0]->width() != image->width() || frames_[0]->height() != image->height())) {
-			throw wexception("wrong size: (%u, %u), should be (%u, %u) like the first frame",
-			                 image->width(), image->height(), frames_[0]->width(),
-			                 frames_[0]->height());
-		}
-		frames_.push_back(image);
-	}
-
-	for (const std::string& filename : pc_mask_image_files_) {
-		// TODO(unknown): Do not load playercolor mask as opengl texture or use it as
-		//     opengl texture.
-		const Image* pc_image = g_gr->images().get(filename);
-		if (frames_[0]->width() != pc_image->width() || frames_[0]->height() != pc_image->height()) {
-			// TODO(unknown): see bug #1324642
-			throw wexception("playercolor mask has wrong size: (%u, %u), should "
-			                 "be (%u, %u) like the animation frame",
-			                 pc_image->width(), pc_image->height(), frames_[0]->width(),
-			                 frames_[0]->height());
-		}
-		pcmasks_.push_back(pc_image);
+	for (const auto& entry : mipmaps_) {
+		MipMapEntry* mipmap = entry.second.get();
+
+		if (mipmap->image_files.empty()) {
+			throw wexception("animation without image files at promised scale %.2f.", entry.first);
+		}
+		if (mipmap->pc_mask_image_files.size() && mipmap->pc_mask_image_files.size() != mipmap->image_files.size()) {
+			throw wexception("animation has %" PRIuS " frames but playercolor mask has %" PRIuS " frames for scale %.2f",
+								  mipmap->image_files.size(), mipmap->pc_mask_image_files.size(), entry.first);
+		}
+
+		for (const std::string& filename : mipmap->image_files) {
+			const Image* image = g_gr->images().get(filename);
+			if (mipmap->frames.size() &&
+				 (mipmap->frames[0]->width() != image->width() || mipmap->frames[0]->height() != image->height())) {
+				throw wexception("wrong size: (%u, %u), should be (%u, %u) like the first frame",
+									  image->width(), image->height(), mipmap->frames[0]->width(),
+									  mipmap->frames[0]->height());
+			}
+			mipmap->frames.push_back(image);
+		}
+
+		for (const std::string& filename : mipmap->pc_mask_image_files) {
+			// TODO(unknown): Do not load playercolor mask as opengl texture or use it as
+			//     opengl texture.
+			const Image* pc_image = g_gr->images().get(filename);
+			if (mipmap->frames[0]->width() != pc_image->width() || mipmap->frames[0]->height() != pc_image->height()) {
+				// TODO(unknown): see bug #1324642
+				throw wexception("playercolor mask has wrong size: (%u, %u), should "
+									  "be (%u, %u) like the animation frame",
+									  pc_image->width(), pc_image->height(), mipmap->frames[0]->width(),
+									  mipmap->frames[0]->height());
+			}
+			mipmap->pcmasks.push_back(pc_image);
+		}
 	}
 }
 
 float NonPackedAnimation::height() const {
 	ensure_graphics_are_loaded();
-	return frames_[0]->height() / scale_;
+	return mipmaps_.at(1.0f)->frames.at(0)->height();
 }
 
 uint16_t NonPackedAnimation::nr_frames() const {
-	ensure_graphics_are_loaded();
-	return frames_.size();
+	return nr_frames_;
 }
 
 uint32_t NonPackedAnimation::frametime() const {
@@ -210,21 +285,24 @@
 }
 
 const Image* NonPackedAnimation::representative_image(const RGBColor* clr) const {
-	assert(!image_files_.empty());
-	const Image* image = (hasplrclrs_ && clr) ? playercolor_image(*clr, image_files_[0]) :
-	                                            g_gr->images().get(image_files_[0]);
+	const MipMapEntry& mipmap = *mipmaps_.at(1.0f);
+	std::vector<std::string> images = mipmap.image_files;
+	assert(!images.empty());
+	const Image* image = (mipmap.hasplrclrs && clr) ? playercolor_image(*clr, images[0]) :
+	                                            g_gr->images().get(images[0]);
 
 	const int w = image->width();
 	const int h = image->height();
-	Texture* rv = new Texture(w / scale_, h / scale_);
+
+	Texture* rv = new Texture(w, h);
 	rv->blit(
-	   Rectf(0.f, 0.f, w / scale_, h / scale_), *image, Rectf(0.f, 0.f, w, h), 1., BlendMode::Copy);
+	   Rectf(0.f, 0.f, w, h), *image, Rectf(0.f, 0.f, w, h), 1., BlendMode::Copy);
 	return rv;
 }
 
 // TODO(GunChleoc): This is only here for the font renderers.
 const std::string& NonPackedAnimation::representative_image_filename() const {
-	return image_files_[0];
+	return mipmaps_.at(1.0f)->image_files[0];
 }
 
 uint32_t NonPackedAnimation::current_frame(uint32_t time) const {
@@ -248,35 +326,40 @@
 	}
 }
 
-Rectf NonPackedAnimation::source_rectangle(const int percent_from_bottom) const {
+Rectf NonPackedAnimation::source_rectangle(const int percent_from_bottom, float scale) const {
 	ensure_graphics_are_loaded();
-	float h = percent_from_bottom * frames_[0]->height() / 100;
-	return Rectf(0.f, frames_[0]->height() - h, frames_[0]->width(), h);
+	const Image* first_frame = mipmaps_.at(find_best_scale(scale))->frames.at(0);
+	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 {
 	ensure_graphics_are_loaded();
-	return Rectf(position.x - (hotspot_.x - source_rect.x / scale_) * scale,
-	             position.y - (hotspot_.y - source_rect.y / scale_) * scale,
-	             source_rect.w * scale / scale_, source_rect.h * scale / scale_);
+	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 Rectf& source_rect,
                               const Rectf& destination_rect,
                               const RGBColor* clr,
-                              Surface* target) const {
+                              Surface* target, float scale) const {
 	ensure_graphics_are_loaded();
 	assert(target);
 	const uint32_t idx = current_frame(time);
 	assert(idx < nr_frames());
-	if (!hasplrclrs_ || clr == nullptr) {
-		target->blit(destination_rect, *frames_.at(idx), source_rect, 1., BlendMode::UseAlpha);
+
+	const MipMapEntry& mipmap = *mipmaps_.at(find_best_scale(scale));
+	if (!mipmap.hasplrclrs || clr == nullptr) {
+		target->blit(destination_rect, *mipmap.frames.at(idx), source_rect, 1., BlendMode::UseAlpha);
 	} else {
 		target->blit_blended(
-		   destination_rect, *frames_.at(idx), *pcmasks_.at(idx), source_rect, *clr);
+		   destination_rect, *mipmap.frames.at(idx), *mipmap.pcmasks.at(idx), source_rect, *clr);
 	}
 	// TODO(GunChleoc): Stereo position would be nice.
 	trigger_sound(time, 128);

=== modified file 'src/graphic/animation.h'
--- src/graphic/animation.h	2019-02-23 11:00:49 +0000
+++ src/graphic/animation.h	2019-02-28 12:35:28 +0000
@@ -62,7 +62,7 @@
 
 	/// 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) const = 0;
+	virtual Rectf source_rectangle(int percent_from_bottom, float scale) const = 0;
 
 	/// Calculates the destination rectangle for blitting the animation in pixels.
 	/// 'position' is where the top left corner of the animation will end up,
@@ -94,7 +94,7 @@
 	                  const Rectf& source_rect,
 	                  const Rectf& destination_rect,
 	                  const RGBColor* clr,
-	                  Surface* target) const = 0;
+	                  Surface* target, float scale) const = 0;
 
 	/// Play the sound effect associated with this animation at the given time.
 	virtual void trigger_sound(uint32_t time, uint32_t stereo_position) const = 0;

=== modified file 'src/graphic/rendertarget.cc'
--- src/graphic/rendertarget.cc	2019-02-23 11:00:49 +0000
+++ src/graphic/rendertarget.cc	2019-02-28 12:35:28 +0000
@@ -325,10 +325,10 @@
 	assert(percent_from_bottom <= 100);
 	if (percent_from_bottom > 0) {
 		// Scaling for zoom and animation image size, then fit screen edges.
-		Rectf srcrc = animation.source_rectangle(percent_from_bottom);
+		Rectf srcrc = animation.source_rectangle(percent_from_bottom, scale);
 		Rectf dstrc = animation.destination_rectangle(dst, srcrc, scale);
 		if (to_surface_geometry(&dstrc, &srcrc)) {
-			animation.blit(time, srcrc, dstrc, player_color, surface_);
+			animation.blit(time, srcrc, dstrc, player_color, surface_, scale);
 		}
 	}
 }

=== modified file 'src/logic/map_objects/map_object.cc'
--- src/logic/map_objects/map_object.cc	2019-02-27 17:19:00 +0000
+++ src/logic/map_objects/map_object.cc	2019-02-28 12:35:28 +0000
@@ -255,11 +255,6 @@
 			throw GameDataError("Map object %s has a menu icon, but it is empty", init_name.c_str());
 		}
 	}
-	// TODO(GunChleoc): We can't scale down images in the font renderer yet, so we need an extra
-	// representative image if the animation has high resolution.
-	if (table.has_key("representative_image")) {
-		representative_image_filename_ = table.get_string("representative_image");
-	}
 	check_representative_image();
 }
 MapObjectDescr::~MapObjectDescr() {


Follow ups