Review: Approve

Couple of nits. I suggest to prefer dynamic_cast<> wherever possible (i.e. when 
you know the type of the object you have) instead of upcast() which is made for 
if(upcast()) { situations. dynamic_cast<> can also cast references which will 
make for easier to read code.

Diff comments:

> === modified file 'src/ai/defaultai.cc'
> --- src/ai/defaultai.cc       2014-11-03 06:45:32 +0000
> +++ src/ai/defaultai.cc       2014-11-29 08:14:12 +0000
> @@ -330,13 +330,12 @@
>  
>               // Read all interesting data from ware producing buildings
>               if (typeid(bld) == typeid(ProductionSiteDescr)) {
> -                     const ProductionSiteDescr& prod =
> -                        ref_cast<ProductionSiteDescr const, BuildingDescr 
> const>(bld);
> +                     upcast(ProductionSiteDescr const, prod, &bld);

instead of checking the typeid, you can use if (upcast(...)) {
} which reads a tad bit nicer. That also applies to many other places in the 
change. I did not point it out all the time.

of course having dynamic type checking in the first place is already code smell.

>                       bo.type = bld.get_ismine() ? BuildingObserver::MINE : 
> BuildingObserver::PRODUCTIONSITE;
> -                     for (const WareAmount& temp_input : prod.inputs()) {
> +                     for (const WareAmount& temp_input : prod->inputs()) {
>                               bo.inputs_.push_back(temp_input.first);
>                       }
> -                     for (const WareIndex& temp_output : 
> prod.output_ware_types()) {
> +                     for (const WareIndex& temp_output : 
> prod->output_ware_types()) {
>                               bo.outputs_.push_back(temp_output);
>                       }
>  
> @@ -370,9 +369,8 @@
>               // non critical are excluded (see below)
>               if (typeid(bld) == typeid(MilitarySiteDescr)) {
>                       bo.type = BuildingObserver::MILITARYSITE;
> -                     const MilitarySiteDescr& milit =
> -                        ref_cast<MilitarySiteDescr const, BuildingDescr 
> const>(bld);
> -                     for (const std::pair<unsigned char, unsigned char>& 
> temp_buildcosts : milit.buildcost()) {
> +                     upcast(MilitarySiteDescr const, milit, &bld);
> +                     for (const std::pair<unsigned char, unsigned char>& 
> temp_buildcosts : milit->buildcost()) {
>                               // bellow are non-critical wares
>                               if (tribe_->ware_index("log") == 
> temp_buildcosts.first ||
>                                   tribe_->ware_index("blackwood") == 
> temp_buildcosts.first ||
> @@ -3007,8 +3005,9 @@
>       BuildingObserver& bo = get_building_observer(b.descr().name().c_str());
>  
>       if (bo.type == BuildingObserver::CONSTRUCTIONSITE) {
> +             upcast(ConstructionSite const, constructionsite, &b);
>               BuildingObserver& target_bo =
> -                get_building_observer(ref_cast<ConstructionSite, 
> Building>(b).building().name().c_str());
> +                     
> get_building_observer(constructionsite->building().name().c_str());
>               ++target_bo.cnt_under_construction_;
>               ++num_constructionsites_;
>               if (target_bo.type == BuildingObserver::PRODUCTIONSITE) {
> @@ -3024,8 +3023,9 @@
>               ++bo.cnt_built_;
>  
>               if (bo.type == BuildingObserver::PRODUCTIONSITE) {
> +                     upcast(ProductionSite, productionsite, &b);
>                       productionsites.push_back(ProductionSiteObserver());
> -                     productionsites.back().site = &ref_cast<ProductionSite, 
> Building>(b);
> +                     productionsites.back().site = productionsite;
>                       productionsites.back().bo = &bo;
>                       productionsites.back().built_time_ = 
> game().get_gametime();
>                       productionsites.back().unoccupied_till_ = 
> game().get_gametime();
> @@ -3038,8 +3038,9 @@
>                       for (uint32_t i = 0; i < bo.inputs_.size(); ++i)
>                               ++wares.at(bo.inputs_.at(i)).consumers_;
>               } else if (bo.type == BuildingObserver::MINE) {
> +                     upcast(ProductionSite, productionsite, &b);
>                       mines_.push_back(ProductionSiteObserver());
> -                     mines_.back().site = &ref_cast<ProductionSite, 
> Building>(b);
> +                     mines_.back().site = productionsite;
>                       mines_.back().bo = &bo;
>                       mines_.back().built_time_ = game().get_gametime();
>  
> @@ -3049,8 +3050,9 @@
>                       for (uint32_t i = 0; i < bo.inputs_.size(); ++i)
>                               ++wares.at(bo.inputs_.at(i)).consumers_;
>               } else if (bo.type == BuildingObserver::MILITARYSITE) {
> +                     upcast(MilitarySite, militarysite, &b);
>                       militarysites.push_back(MilitarySiteObserver());
> -                     militarysites.back().site = &ref_cast<MilitarySite, 
> Building>(b);
> +                     militarysites.back().site = militarysite;
>                       militarysites.back().bo = &bo;
>                       militarysites.back().checks = bo.desc->get_size();
>                       militarysites.back().enemies_nearby_ = true;
> @@ -3066,8 +3068,9 @@
>       BuildingObserver& bo = get_building_observer(b.descr().name().c_str());
>  
>       if (bo.type == BuildingObserver::CONSTRUCTIONSITE) {
> -             BuildingObserver& target_bo = get_building_observer(
> -                ref_cast<ConstructionSite const, Building 
> const>(b).building().name().c_str());
> +             upcast(ConstructionSite const, constructionsite, &b);
> +             BuildingObserver& target_bo =
> +                             
> get_building_observer(constructionsite->building().name().c_str());
>               --target_bo.cnt_under_construction_;
>               --num_constructionsites_;
>               if (target_bo.type == BuildingObserver::PRODUCTIONSITE) {
> 
> === modified file 'src/base/CMakeLists.txt'
> --- src/base/CMakeLists.txt   2014-11-26 09:36:46 +0000
> +++ src/base/CMakeLists.txt   2014-11-29 08:14:12 +0000
> @@ -45,13 +45,6 @@
>      base_macros
>  )
>  
> -# TODO(sirver): this library should be deleted.
> -wl_library(base_deprecated
> -  SRCS
> -    deprecated.h
> -    deprecated.cc
> -  DEPENDS
> -)
>  
>  wl_library(base_scoped_timer
>    SRCS
> 
> === removed file 'src/base/deprecated.cc'
> --- src/base/deprecated.cc    2014-07-05 12:17:03 +0000
> +++ src/base/deprecated.cc    1970-01-01 00:00:00 +0000
> @@ -1,20 +0,0 @@
> -/*
> - * Copyright (C) 2006-2014 by the Widelands Development Team
> - *
> - * This program is free software; you can redistribute it and/or
> - * modify it under the terms of the GNU General Public License
> - * as published by the Free Software Foundation; either version 2
> - * of the License, or (at your option) any later version.
> - *
> - * This program is distributed in the hope that it will be useful,
> - * but WITHOUT ANY WARRANTY; without even the implied warranty of
> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> - * GNU General Public License for more details.
> - *
> - * You should have received a copy of the GNU General Public License
> - * along with this program; if not, write to the Free Software
> - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
> - *
> - */
> -
> -// Dummy file as cmake cannot handle header only libraries :(.
> 
> === removed file 'src/base/deprecated.h'
> --- src/base/deprecated.h     2014-07-25 19:15:23 +0000
> +++ src/base/deprecated.h     1970-01-01 00:00:00 +0000
> @@ -1,35 +0,0 @@
> -/*
> - * Copyright (C) 2006-2014 by the Widelands Development Team
> - *
> - * This program is free software; you can redistribute it and/or
> - * modify it under the terms of the GNU General Public License
> - * as published by the Free Software Foundation; either version 2
> - * of the License, or (at your option) any later version.
> - *
> - * This program is distributed in the hope that it will be useful,
> - * but WITHOUT ANY WARRANTY; without even the implied warranty of
> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> - * GNU General Public License for more details.
> - *
> - * You should have received a copy of the GNU General Public License
> - * along with this program; if not, write to the Free Software
> - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
> - *
> - */
> -
> -#ifndef WL_BASE_DEPRECATED_H
> -#define WL_BASE_DEPRECATED_H
> -
> -// Code that is still used all over the place, but should not be used 
> anymore.
> -
> -#include <cassert>
> -
> -// DEPRECATED: leads to unsafe code. Instead use upcast() or is_a() to check 
> at
> -// runtime for the type you are expecting.
> -template<typename Derived, typename Base> Derived & ref_cast(Base & base) {
> -     assert(dynamic_cast<Derived *>(&base) == static_cast<Derived *>(&base));
> -     return static_cast<Derived &>(base);
> -}
> -
> -
> -#endif  // end of include guard: WL_BASE_DEPRECATED_H
> 
> === modified file 'src/economy/CMakeLists.txt'
> --- src/economy/CMakeLists.txt        2014-07-05 12:17:03 +0000
> +++ src/economy/CMakeLists.txt        2014-11-29 08:14:12 +0000
> @@ -41,7 +41,6 @@
>      wares_queue.cc
>      wares_queue.h
>    DEPENDS
> -    base_deprecated
>      base_exceptions
>      base_log
>      base_macros
> 
> === modified file 'src/economy/economy.cc'
> --- src/economy/economy.cc    2014-09-20 09:37:47 +0000
> +++ src/economy/economy.cc    2014-11-29 08:14:12 +0000
> @@ -1034,19 +1034,17 @@
>  */
>  void Economy::balance(uint32_t const timerid)
>  {
> -     if (m_request_timerid != timerid)
> +     if (m_request_timerid != timerid) {
>               return;
> +     }
>       ++m_request_timerid;
>  
> -     Game & game = ref_cast<Game, EditorGameBase>(owner().egbase());
> +     upcast(Game, game, &owner().egbase());

When you are already sure about yuor object as in this case, just use a 
dynamic_cast<Game&>(egbase) directly.

>  
>       _check_splits();
> -
> -     _create_requested_workers (game);
> -
> -     _balance_requestsupply(game);
> -
> -     _handle_active_supplies(game);
> +     _create_requested_workers(*game);
> +     _balance_requestsupply(*game);
> +     _handle_active_supplies(*game);
>  }
>  
>  }
> 
> === modified file 'src/economy/flag.cc'
> --- src/economy/flag.cc       2014-09-10 10:18:46 +0000
> +++ src/economy/flag.cc       2014-11-29 08:14:12 +0000
> @@ -19,7 +19,6 @@
>  
>  #include "economy/flag.h"
>  
> -#include "base/deprecated.h"
>  #include "base/macros.h"
>  #include "base/wexception.h"
>  #include "economy/economy.h"
> @@ -640,15 +639,16 @@
>       }
>  
>       // Deal with the normal (flag) case
> -     ref_cast<Flag const, PlayerImmovable const>(*nextstep);
> +     upcast(Flag const, nextflag, nextstep);
>  
>       for (int32_t dir = 1; dir <= 6; ++dir) {
>               Road * const road = get_road(dir);
>               Flag *       other;
>               Road::FlagId flagid;
>  
> -             if (!road)
> +             if (!road) {
>                       continue;
> +             }
>  
>               if (&road->get_flag(Road::FlagStart) == this) {
>                       flagid = Road::FlagStart;
> @@ -658,12 +658,14 @@
>                       other = &road->get_flag(Road::FlagStart);
>               }
>  
> -             if (other != nextstep)
> +             if (other != nextflag) {
>                       continue;
> +             }
>  
>               // Yes, this is the road we want; inform it
> -             if (road->notify_ware(game, flagid))
> +             if (road->notify_ware(game, flagid)) {
>                       return;
> +             }
>  
>               // If the road doesn't react to the ware immediately, we try 
> other roads:
>               // They might lead to the same flag!
> @@ -791,24 +793,24 @@
>        Worker          * const w,
>        PlayerImmovable &       target)
>  {
> -     Flag & flag = ref_cast<Flag, PlayerImmovable>(target);
> +     upcast(Flag, flag, &target);
>  
>       assert(w);
>  
> -     for (FlagJobs::iterator flag_iter = flag.m_flag_jobs.begin();
> -               flag_iter != flag.m_flag_jobs.end();
> +     for (FlagJobs::iterator flag_iter = flag->m_flag_jobs.begin();
> +               flag_iter != flag->m_flag_jobs.end();
>                 ++flag_iter) {
>               if (flag_iter->request == &rq) {
>                       delete &rq;
>  
>                       w->start_task_program(game, flag_iter->program);
>  
> -                     flag.m_flag_jobs.erase(flag_iter);
> +                     flag->m_flag_jobs.erase(flag_iter);
>                       return;
>               }
>       }
>  
> -     flag.molog("BUG: flag_job_request_callback: worker not found in 
> list\n");
> +     flag->molog("BUG: flag_job_request_callback: worker not found in 
> list\n");
>  }
>  
>  void Flag::log_general_info(const Widelands::EditorGameBase & egbase)
> 
> === modified file 'src/economy/fleet.cc'
> --- src/economy/fleet.cc      2014-09-20 09:37:47 +0000
> +++ src/economy/fleet.cc      2014-11-29 08:14:12 +0000
> @@ -21,7 +21,6 @@
>  
>  #include <memory>
>  
> -#include "base/deprecated.h"
>  #include "base/macros.h"
>  #include "economy/economy.h"
>  #include "economy/flag.h"
> 
> === modified file 'src/economy/portdock.cc'
> --- src/economy/portdock.cc   2014-09-20 09:37:47 +0000
> +++ src/economy/portdock.cc   2014-11-29 08:14:12 +0000
> @@ -21,8 +21,8 @@
>  
>  #include <memory>
>  
> -#include "base/deprecated.h"
>  #include "base/log.h"
> +#include "base/macros.h"
>  #include "economy/fleet.h"
>  #include "economy/ware_instance.h"
>  #include "economy/wares_queue.h"
> 
> === modified file 'src/economy/road.cc'
> --- src/economy/road.cc       2014-09-19 12:54:54 +0000
> +++ src/economy/road.cc       2014-11-29 08:14:12 +0000
> @@ -382,15 +382,14 @@
>  {
>       assert(w);
>  
> -     Road    & road    = ref_cast<Road,    PlayerImmovable>(target);
> +     upcast(Road, road, &target);
> +     upcast(Carrier, carrier, w);
>  
> -     for (CarrierSlot& slot : road.m_carrier_slots) {
> +     for (CarrierSlot& slot : road->m_carrier_slots) {
>               if (slot.carrier_request == &rq) {
> -                     Carrier & carrier = ref_cast<Carrier, Worker> (*w);
>                       slot.carrier_request = nullptr;
> -                     slot.carrier = &carrier;
> -
> -                     carrier.start_task_road(game);
> +                     slot.carrier = carrier;
> +                     carrier->start_task_road(game);
>                       delete &rq;
>                       return;
>               }
> @@ -402,7 +401,7 @@
>        */
>       log
>               ("Road(%u): got a request_callback but do not have the 
> request\n",
> -              road.serial());
> +              road->serial());
>       delete &rq;
>       w->start_task_gowarehouse(game);
>  }
> 
> === modified file 'src/economy/routeastar.h'
> --- src/economy/routeastar.h  2014-09-14 11:31:58 +0000
> +++ src/economy/routeastar.h  2014-11-29 08:14:12 +0000
> @@ -20,7 +20,6 @@
>  #ifndef WL_ECONOMY_ROUTEASTAR_H
>  #define WL_ECONOMY_ROUTEASTAR_H
>  
> -#include "base/deprecated.h"
>  #include "economy/itransport_cost_calculator.h"
>  #include "economy/routing_node.h"
>  
> 
> === modified file 'src/economy/supply_list.cc'
> --- src/economy/supply_list.cc        2014-07-25 16:37:06 +0000
> +++ src/economy/supply_list.cc        2014-11-29 08:14:12 +0000
> @@ -19,7 +19,6 @@
>  
>  #include "economy/supply_list.h"
>  
> -#include "base/deprecated.h"
>  #include "base/wexception.h"
>  #include "economy/request.h"
>  #include "economy/supply.h"
> 
> === modified file 'src/economy/test/CMakeLists.txt'
> --- src/economy/test/CMakeLists.txt   2014-10-28 21:14:24 +0000
> +++ src/economy/test/CMakeLists.txt   2014-11-29 08:14:12 +0000
> @@ -4,7 +4,6 @@
>      test_road.cc
>      test_routing.cc
>    DEPENDS
> -    base_deprecated
>      economy
>      io_filesystem
>      logic
> 
> === modified file 'src/economy/test/test_routing.cc'
> --- src/economy/test/test_routing.cc  2014-10-28 21:14:24 +0000
> +++ src/economy/test/test_routing.cc  2014-11-29 08:14:12 +0000
> @@ -22,7 +22,6 @@
>  #include <boost/bind.hpp>
>  #include <boost/test/unit_test.hpp>
>  
> -#include "base/deprecated.h"
>  #include "economy/flag.h"
>  #include "economy/iroute.h"
>  #include "economy/itransport_cost_calculator.h"
> 
> === modified file 'src/economy/ware_instance.cc'
> --- src/economy/ware_instance.cc      2014-09-20 09:37:47 +0000
> +++ src/economy/ware_instance.cc      2014-11-29 08:14:12 +0000
> @@ -560,8 +560,8 @@
>       m_location = fr.unsigned_32();
>       m_transfer_nextstep = fr.unsigned_32();
>       if (fr.unsigned_8()) {
> -             ware.m_transfer =
> -                     new Transfer(ref_cast<Game, EditorGameBase>(egbase()), 
> ware);
> +             upcast(Game, game, &egbase());
> +             ware.m_transfer = new Transfer(*game, ware);
>               ware.m_transfer->read(fr, m_transfer);
>       }
>  }
> 
> === modified file 'src/economy/wares_queue.cc'
> --- src/economy/wares_queue.cc        2014-09-20 09:37:47 +0000
> +++ src/economy/wares_queue.cc        2014-11-29 08:14:12 +0000
> @@ -130,8 +130,8 @@
>  #endif
>        PlayerImmovable & target)
>  {
> -     WaresQueue & wq =
> -             ref_cast<Building, PlayerImmovable>(target).waresqueue(ware);
> +     upcast(Building, building, &target);
> +     WaresQueue & wq = building->waresqueue(ware);
>  
>       assert(!w); // WaresQueue can't hold workers
>       assert(wq.m_filled < wq.m_max_size);
> 
> === modified file 'src/editor/editorinteractive.cc'
> --- src/editor/editorinteractive.cc   2014-11-23 14:34:38 +0000
> +++ src/editor/editorinteractive.cc   2014-11-29 08:14:12 +0000
> @@ -336,12 +336,15 @@
>  }
>  
>  void EditorInteractive::set_sel_radius_and_update_menu(uint32_t const val) {
> -     if (tools.current().has_size_one())
> +     if (tools.current().has_size_one()) {
>               return;
> -     if (UI::UniqueWindow * const w = m_toolsizemenu.window)
> -             ref_cast<EditorToolsizeMenu, UI::UniqueWindow>(*w).update(val);
> -     else
> +     }
> +     if (UI::UniqueWindow * const w = m_toolsizemenu.window) {
> +             upcast(EditorToolsizeMenu, tool_size_menu, w);
> +             tool_size_menu->update(val);
> +     } else {
>               set_sel_radius(val);
> +     }
>  }
>  
>  
> 
> === modified file 'src/editor/ui_menus/editor_main_menu.cc'
> --- src/editor/ui_menus/editor_main_menu.cc   2014-09-10 14:08:25 +0000
> +++ src/editor/ui_menus/editor_main_menu.cc   2014-11-29 08:14:12 +0000
> @@ -37,7 +37,8 @@
>  #define vspacing 15
>  
>  inline EditorInteractive & EditorMainMenu::eia() {
> -     return ref_cast<EditorInteractive, UI::Panel>(*get_parent());
> +     upcast(EditorInteractive, result, get_parent());
> +     return *result;
>  }
>  
>  /**
> 
> === modified file 'src/editor/ui_menus/editor_main_menu_load_map.cc'
> --- src/editor/ui_menus/editor_main_menu_load_map.cc  2014-10-28 14:57:52 
> +0000
> +++ src/editor/ui_menus/editor_main_menu_load_map.cc  2014-11-29 08:14:12 
> +0000
> @@ -146,7 +146,8 @@
>               m_mapfiles.clear();
>               fill_list();
>       } else {
> -             ref_cast<EditorInteractive, 
> UI::Panel>(*get_parent()).load(filename);
> +             upcast(EditorInteractive, eia, get_parent());
> +             eia->load(filename);
>               die();
>       }
>  }
> 
> === modified file 'src/editor/ui_menus/editor_main_menu_map_options.cc'
> --- src/editor/ui_menus/editor_main_menu_map_options.cc       2014-10-28 
> 08:16:53 +0000
> +++ src/editor/ui_menus/editor_main_menu_map_options.cc       2014-11-29 
> 08:14:12 +0000
> @@ -36,7 +36,8 @@
>  
>  
>  inline EditorInteractive & MainMenuMapOptions::eia() {
> -     return ref_cast<EditorInteractive, UI::Panel>(*get_parent());
> +     upcast(EditorInteractive, result, get_parent());
> +     return *result;
>  }
>  
>  
> 
> === modified file 'src/editor/ui_menus/editor_main_menu_new_map.cc'
> --- src/editor/ui_menus/editor_main_menu_new_map.cc   2014-11-13 08:25:45 
> +0000
> +++ src/editor/ui_menus/editor_main_menu_new_map.cc   2014-11-29 08:14:12 
> +0000
> @@ -133,9 +133,8 @@
>  }
>  
>  void MainMenuNewMap::clicked_create_map() {
> -     EditorInteractive & eia =
> -             ref_cast<EditorInteractive, UI::Panel>(*get_parent());
> -     Widelands::EditorGameBase & egbase = eia.egbase();
> +     upcast(EditorInteractive, eia, get_parent());
> +     Widelands::EditorGameBase & egbase = eia->egbase();
>       Widelands::Map              & map    = egbase.map();
>       UI::ProgressWindow loader;
>  
> @@ -152,7 +151,7 @@
>  
>       map.recalc_whole_map(egbase.world());
>  
> -     eia.set_need_save(true);
> +     eia->set_need_save(true);
>  
>       die();
>  }
> 
> === modified file 'src/editor/ui_menus/editor_main_menu_random_map.cc'
> --- src/editor/ui_menus/editor_main_menu_random_map.cc        2014-11-13 
> 08:25:45 +0000
> +++ src/editor/ui_menus/editor_main_menu_random_map.cc        2014-11-29 
> 08:14:12 +0000
> @@ -483,9 +483,8 @@
>  }
>  
>  void MainMenuNewRandomMap::clicked_create_map() {
> -     EditorInteractive & eia =
> -             ref_cast<EditorInteractive, UI::Panel>(*get_parent());
> -     Widelands::EditorGameBase & egbase = eia.egbase();
> +     upcast(EditorInteractive, eia, get_parent());
> +     Widelands::EditorGameBase & egbase = eia->egbase();
>       Widelands::Map              & map    = egbase.map();
>       UI::ProgressWindow loader;
>  
> @@ -518,8 +517,8 @@
>  
>       map.recalc_whole_map(egbase.world());
>  
> -     eia.set_need_save(true);
> -     eia.register_overlays();
> +     eia->set_need_save(true);
> +     eia->register_overlays();
>  
>       die();
>  }
> 
> === modified file 'src/editor/ui_menus/editor_main_menu_save_map.cc'
> --- src/editor/ui_menus/editor_main_menu_save_map.cc  2014-10-28 14:57:52 
> +0000
> +++ src/editor/ui_menus/editor_main_menu_save_map.cc  2014-11-29 08:14:12 
> +0000
> @@ -46,7 +46,8 @@
>  #include "ui_basic/textarea.h"
>  
>  inline EditorInteractive & MainMenuSaveMap::eia() {
> -     return ref_cast<EditorInteractive, UI::Panel>(*get_parent());
> +     upcast(EditorInteractive, result, get_parent());
> +     return *result;
>  }
>  
>  
> 
> === modified file 'src/editor/ui_menus/editor_player_menu.cc'
> --- src/editor/ui_menus/editor_player_menu.cc 2014-11-22 10:18:20 +0000
> +++ src/editor/ui_menus/editor_player_menu.cc 2014-11-29 08:14:12 +0000
> @@ -38,6 +38,11 @@
>  
>  #define UNDEFINED_TRIBE_NAME "<undefined>"
>  
> +inline EditorInteractive & EditorPlayerMenu::eia() {
> +     upcast(EditorInteractive, result, get_parent());
> +     return *result;
> +}
> +
>  EditorPlayerMenu::EditorPlayerMenu
>       (EditorInteractive & parent, UI::UniqueWindow::Registry & registry)
>       :
> @@ -108,9 +113,7 @@
>       if (is_minimal())
>               return;
>  
> -     Widelands::Map & map =
> -             ref_cast<EditorInteractive const, UI::Panel 
> const>(*get_parent())
> -             .egbase().map();
> +     Widelands::Map & map = eia().egbase().map();
>       Widelands::PlayerNumber const nr_players = map.get_nrplayers();
>       {
>               assert(nr_players <= 99); //  2 decimal digits
> @@ -194,9 +197,7 @@
>  }
>  
>  void EditorPlayerMenu::clicked_add_player() {
> -     EditorInteractive & menu =
> -             ref_cast<EditorInteractive, UI::Panel>(*get_parent());
> -     Widelands::Map & map = menu.egbase().map();
> +     Widelands::Map & map = eia().egbase().map();
>       Widelands::PlayerNumber const nr_players = map.get_nrplayers() + 1;
>       assert(nr_players <= MAX_PLAYERS);
>       map.set_nrplayers(nr_players);
> @@ -211,7 +212,7 @@
>               map.set_scenario_player_name(nr_players, name);
>       }
>       map.set_scenario_player_tribe(nr_players, m_tribes[0]);
> -     menu.set_need_save(true);
> +     eia().set_need_save(true);
>       m_add_player        .set_enabled(nr_players < MAX_PLAYERS);
>       m_remove_last_player.set_enabled(true);
>       update();
> @@ -219,14 +220,12 @@
>  
>  
>  void EditorPlayerMenu::clicked_remove_last_player() {
> -     EditorInteractive & menu =
> -             ref_cast<EditorInteractive, UI::Panel>(*get_parent());
> -     Widelands::Map & map = menu.egbase().map();
> +     Widelands::Map & map = eia().egbase().map();
>       Widelands::PlayerNumber const old_nr_players = map.get_nrplayers();
>       Widelands::PlayerNumber const nr_players     = old_nr_players - 1;
>       assert(1 <= nr_players);
>  
> -     if (!menu.is_player_tribe_referenced(old_nr_players)) {
> +     if (!eia().is_player_tribe_referenced(old_nr_players)) {
>               if (const Widelands::Coords sp = 
> map.get_starting_pos(old_nr_players)) {
>                       //  Remove starting position marker.
>                       char picsname[] = 
> "pics/editor_player_00_starting_pos.png";
> @@ -306,9 +305,8 @@
>   * Player Tribe Button clicked
>   */
>  void EditorPlayerMenu::player_tribe_clicked(uint8_t n) {
> -     EditorInteractive & menu =
> -             ref_cast<EditorInteractive, UI::Panel>(*get_parent());
> -     if (!menu.is_player_tribe_referenced(n + 1)) {
> +     EditorInteractive& menu = eia();
> +             if (!menu.is_player_tribe_referenced(n + 1)) {
>               std::string t = m_plr_set_tribes_buts[n]->get_title();
>               if (!Widelands::TribeDescr::exists_tribe(t))
>                       throw wexception
> @@ -338,8 +336,7 @@
>   * Set Current Start Position button selected
>   */
>  void EditorPlayerMenu::set_starting_pos_clicked(uint8_t n) {
> -     EditorInteractive & menu =
> -             ref_cast<EditorInteractive, UI::Panel>(*get_parent());
> +     EditorInteractive& menu = eia();
>       //  jump to the current node
>       Widelands::Map & map = menu.egbase().map();
>       if (Widelands::Coords const sp = map.get_starting_pos(n))
> @@ -366,8 +363,7 @@
>  void EditorPlayerMenu::name_changed(int32_t m) {
>       //  Player name has been changed.
>       std::string text = m_plr_names[m]->text();
> -     EditorInteractive & menu =
> -             ref_cast<EditorInteractive, UI::Panel>(*get_parent());
> +     EditorInteractive& menu = eia();
>       Widelands::Map & map = menu.egbase().map();
>       if (text == "") {
>               text = map.get_scenario_player_name(m + 1);
> 
> === modified file 'src/editor/ui_menus/editor_player_menu.h'
> --- src/editor/ui_menus/editor_player_menu.h  2014-09-10 14:08:25 +0000
> +++ src/editor/ui_menus/editor_player_menu.h  2014-11-29 08:14:12 +0000
> @@ -44,6 +44,7 @@
>       virtual ~EditorPlayerMenu() {}
>  
>  private:
> +     EditorInteractive & eia();
>       UI::UniqueWindow::Registry m_allow_buildings_menu;
>       UI::Textarea * m_nr_of_players_ta;
>       UI::EditBox * m_plr_names[MAX_PLAYERS];
> 
> === modified file 
> 'src/editor/ui_menus/editor_tool_change_resources_options_menu.cc'
> --- src/editor/ui_menus/editor_tool_change_resources_options_menu.cc  
> 2014-09-30 05:41:55 +0000
> +++ src/editor/ui_menus/editor_tool_change_resources_options_menu.cc  
> 2014-11-29 08:14:12 +0000
> @@ -37,6 +37,12 @@
>  const static int BUTTON_WIDTH = 20;
>  const static int BUTTON_HEIGHT = 20;
>  
> +inline EditorInteractive & EditorToolChangeResourcesOptionsMenu::eia() {
> +     upcast(EditorInteractive, result, get_parent());
> +     return *result;
> +}
> +
> +
>  EditorToolChangeResourcesOptionsMenu::
>  EditorToolChangeResourcesOptionsMenu
>               (EditorInteractive             & parent,
> @@ -213,7 +219,7 @@
>       m_increase_tool.set_cur_res(n);
>       m_increase_tool.decrease_tool().set_cur_res(n);
>  
> -     Widelands::EditorGameBase& egbase = ref_cast<EditorInteractive, 
> UI::Panel>(*get_parent()).egbase();
> +     Widelands::EditorGameBase& egbase = eia().egbase();
>       Widelands::Map & map = egbase.map();
>       map.overlay_manager().register_overlay_callback_function(
>          boost::bind(&editor_change_resource_tool_callback, _1, 
> boost::ref(map), boost::ref(egbase.world()), n));
> @@ -234,8 +240,7 @@
>                                                                               
> static_cast<unsigned int>(m_increase_tool.set_tool().get_set_to())));
>  
>       m_cur_selection.set_text
> -             (ref_cast<EditorInteractive, UI::Panel>(*get_parent()).egbase()
> -              
> .world().get_resource(m_increase_tool.set_tool().get_cur_res())->descname());
> +             
> (eia().egbase().world().get_resource(m_increase_tool.set_tool().get_cur_res())->descname());
>       m_cur_selection.set_pos
>               (Point
>                       ((get_inner_w() - m_cur_selection.get_w()) / 2, 
> get_inner_h() - 20));
> 
> === modified file 
> 'src/editor/ui_menus/editor_tool_change_resources_options_menu.h'
> --- src/editor/ui_menus/editor_tool_change_resources_options_menu.h   
> 2014-09-10 14:08:25 +0000
> +++ src/editor/ui_menus/editor_tool_change_resources_options_menu.h   
> 2014-11-29 08:14:12 +0000
> @@ -37,6 +37,7 @@
>                UI::UniqueWindow::Registry     &);
>  
>  private:
> +     EditorInteractive & eia();
>       void selected();
>       enum Button {
>               Change_By_Increase, Change_By_Decrease,
> 
> === modified file 'src/editor/ui_menus/editor_tool_menu.cc'
> --- src/editor/ui_menus/editor_tool_menu.cc   2014-09-20 09:37:47 +0000
> +++ src/editor/ui_menus/editor_tool_menu.cc   2014-11-29 08:14:12 +0000
> @@ -98,38 +98,37 @@
>  void EditorToolMenu::changed_to() {
>       const int32_t n = m_radioselect.get_state();
>  
> -     EditorInteractive & parent =
> -             ref_cast<EditorInteractive, UI::Panel>(*get_parent());
> +     upcast(EditorInteractive, eia, get_parent());
>  
>       EditorTool                * current_tool_pointer = nullptr;
>       UI::UniqueWindow::Registry * current_registry_pointer = nullptr;
>       switch (n) {
>       case 0:
> -             current_tool_pointer     = &parent.tools.increase_height;
> -             current_registry_pointer = &parent.m_heightmenu;
> +             current_tool_pointer     = &eia->tools.increase_height;
> +             current_registry_pointer = &eia->m_heightmenu;
>               break;
>       case 1:
> -             current_tool_pointer     = &parent.tools.noise_height;
> -             current_registry_pointer = &parent.m_noise_heightmenu;
> +             current_tool_pointer     = &eia->tools.noise_height;
> +             current_registry_pointer = &eia->m_noise_heightmenu;
>               break;
>       case 2:
> -             current_tool_pointer     = &parent.tools.set_terrain;
> -             current_registry_pointer = &parent.m_terrainmenu;
> +             current_tool_pointer     = &eia->tools.set_terrain;
> +             current_registry_pointer = &eia->m_terrainmenu;
>               break;
>       case 3:
> -             current_tool_pointer     = &parent.tools.place_immovable;
> -             current_registry_pointer = &parent.m_immovablemenu;
> +             current_tool_pointer     = &eia->tools.place_immovable;
> +             current_registry_pointer = &eia->m_immovablemenu;
>               break;
>       case 4:
> -             current_tool_pointer     = &parent.tools.place_bob;
> -             current_registry_pointer = &parent.m_bobmenu;
> +             current_tool_pointer     = &eia->tools.place_bob;
> +             current_registry_pointer = &eia->m_bobmenu;
>               break;
>       case 5:
> -             current_tool_pointer     = &parent.tools.increase_resources;
> -             current_registry_pointer = &parent.m_resourcesmenu;
> +             current_tool_pointer     = &eia->tools.increase_resources;
> +             current_registry_pointer = &eia->m_resourcesmenu;
>               break;
>       case 6:
> -             current_tool_pointer     = &parent.tools.set_port_space;
> +             current_tool_pointer     = &eia->tools.set_port_space;
>               current_registry_pointer = nullptr; // no need for a window
>               break;
>       default:
> @@ -137,13 +136,13 @@
>               break;
>       }
>  
> -     parent.select_tool(*current_tool_pointer, EditorTool::First);
> -     if (current_tool_pointer == &parent.tools.set_port_space) {
> +     eia->select_tool(*current_tool_pointer, EditorTool::First);
> +     if (current_tool_pointer == &eia->tools.set_port_space) {
>               // Set correct overlay
> -             Widelands::Map & map = parent.egbase().map();
> +             Widelands::Map & map = eia->egbase().map();
>               map.overlay_manager().register_overlay_callback_function(
>                               
> boost::bind(&editor_Tool_set_port_space_callback, _1, boost::ref(map)));
> -             map.recalc_whole_map(parent.egbase().world());
> +             map.recalc_whole_map(eia->egbase().world());
>               update();
>       }
>  
> @@ -158,38 +157,38 @@
>                       switch (n) { //  create window
>                       case 0:
>                               new EditorToolChangeHeightOptionsMenu
> -                                     (parent,
> -                                     parent.tools.increase_height,
> +                                     (*eia,
> +                                     eia->tools.increase_height,
>                                       *current_registry_pointer);
>                               break;
>                       case 1:
>                               new EditorToolNoiseHeightOptionsMenu
> -                                     (parent,
> -                                     parent.tools.noise_height,
> +                                     (*eia,
> +                                     eia->tools.noise_height,
>                                       *current_registry_pointer);
>                               break;
>                       case 2:
>                               new EditorToolSetTerrainOptionsMenu
> -                                     (parent,
> -                                     parent.tools.set_terrain,
> +                                     (*eia,
> +                                     eia->tools.set_terrain,
>                                       *current_registry_pointer);
>                               break;
>                       case 3:
>                               new EditorToolPlaceImmovableOptionsMenu
> -                                     (parent,
> -                                     parent.tools.place_immovable,
> +                                     (*eia,
> +                                     eia->tools.place_immovable,
>                                       *current_registry_pointer);
>                               break;
>                       case 4:
>                               new EditorToolPlaceBobOptionsMenu
> -                                     (parent,
> -                                     parent.tools.place_bob,
> +                                     (*eia,
> +                                     eia->tools.place_bob,
>                                       *current_registry_pointer);
>                               break;
>                       case 5:
>                               new EditorToolChangeResourcesOptionsMenu
> -                                     (parent,
> -                                     parent.tools.increase_resources,
> +                                     (*eia,
> +                                     eia->tools.increase_resources,
>                                       *current_registry_pointer);
>                               break;
>                       default:
> 
> === modified file 'src/editor/ui_menus/editor_tool_options_menu.cc'
> --- src/editor/ui_menus/editor_tool_options_menu.cc   2014-09-10 14:08:25 
> +0000
> +++ src/editor/ui_menus/editor_tool_options_menu.cc   2014-11-29 08:14:12 
> +0000
> @@ -35,6 +35,6 @@
>  
>  
>  void EditorToolOptionsMenu::select_correct_tool() {
> -     ref_cast<EditorInteractive, UI::Panel>(*get_parent())
> -             .select_tool(*m_current_pointer, EditorTool::First);
> +     upcast(EditorInteractive, eia, get_parent());
> +     eia->select_tool(*m_current_pointer, EditorTool::First);
>  }
> 
> === modified file 'src/editor/ui_menus/editor_toolsize_menu.cc'
> --- src/editor/ui_menus/editor_toolsize_menu.cc       2014-09-18 18:52:34 
> +0000
> +++ src/editor/ui_menus/editor_toolsize_menu.cc       2014-11-29 08:14:12 
> +0000
> @@ -29,10 +29,10 @@
>  #include "graphic/graphic.h"
>  
>  inline EditorInteractive & EditorToolsizeMenu::eia() {
> -     return ref_cast<EditorInteractive, UI::Panel>(*get_parent());
> +     upcast(EditorInteractive, result, get_parent());
> +     return *result;
>  }
>  
> -
>  /**
>   * Create all the buttons etc...
>  */
> 
> === modified file 'src/graphic/CMakeLists.txt'
> --- src/graphic/CMakeLists.txt        2014-11-24 07:25:21 +0000
> +++ src/graphic/CMakeLists.txt        2014-11-29 08:14:12 +0000
> @@ -128,7 +128,6 @@
>    USES_SDL2_IMAGE
>    USES_SDL2_TTF
>    DEPENDS
> -    base_deprecated
>      base_exceptions
>      base_geometry
>      base_i18n
> 
> === modified file 'src/graphic/animation.cc'
> --- src/graphic/animation.cc  2014-11-24 07:10:03 +0000
> +++ src/graphic/animation.cc  2014-11-29 08:14:12 +0000
> @@ -30,7 +30,6 @@
>  #include <boost/format.hpp>
>  #include <boost/lexical_cast.hpp>
>  
> -#include "base/deprecated.h"
>  #include "base/i18n.h"
>  #include "base/log.h"
>  #include "base/macros.h"
> 
> === modified file 'src/graphic/graphic.cc'
> --- src/graphic/graphic.cc    2014-11-24 07:10:03 +0000
> +++ src/graphic/graphic.cc    2014-11-29 08:14:12 +0000
> @@ -25,7 +25,6 @@
>  
>  #include <SDL_image.h>
>  
> -#include "base/deprecated.h"
>  #include "base/i18n.h"
>  #include "base/log.h"
>  #include "base/macros.h"
> 
> === modified file 'src/graphic/terrain_texture.cc'
> --- src/graphic/terrain_texture.cc    2014-11-24 07:10:03 +0000
> +++ src/graphic/terrain_texture.cc    2014-11-29 08:14:12 +0000
> @@ -21,7 +21,6 @@
>  
>  #include <SDL_image.h>
>  
> -#include "base/deprecated.h"
>  #include "base/log.h"
>  #include "base/wexception.h"
>  #include "graphic/image_io.h"
> 
> === modified file 'src/graphic/text_parser.cc'
> --- src/graphic/text_parser.cc        2014-09-10 14:48:40 +0000
> +++ src/graphic/text_parser.cc        2014-11-29 08:14:12 +0000
> @@ -24,7 +24,6 @@
>  #include <string>
>  #include <vector>
>  
> -#include "base/deprecated.h"
>  #include "base/log.h"
>  #include "helper.h"
>  
> 
> === modified file 'src/io/CMakeLists.txt'
> --- src/io/CMakeLists.txt     2014-10-13 15:04:50 +0000
> +++ src/io/CMakeLists.txt     2014-11-29 08:14:12 +0000
> @@ -37,7 +37,6 @@
>      filesystem/zip_filesystem.cc
>      filesystem/zip_filesystem.h
>    DEPENDS
> -    base_deprecated
>      base_exceptions
>      base_log
>      base_macros
> 
> === modified file 'src/io/filesystem/layered_filesystem.cc'
> --- src/io/filesystem/layered_filesystem.cc   2014-09-29 13:30:46 +0000
> +++ src/io/filesystem/layered_filesystem.cc   2014-11-29 08:14:12 +0000
> @@ -22,7 +22,6 @@
>  #include <cstdio>
>  #include <memory>
>  
> -#include "base/deprecated.h"
>  #include "base/log.h"
>  #include "base/wexception.h"
>  #include "io/fileread.h"
> 
> === modified file 'src/logic/CMakeLists.txt'
> --- src/logic/CMakeLists.txt  2014-10-13 15:04:50 +0000
> +++ src/logic/CMakeLists.txt  2014-11-29 08:14:12 +0000
> @@ -215,7 +215,6 @@
>    USES_SDL2
>    DEPENDS
>      ai
> -    base_deprecated
>      base_exceptions
>      base_geometry
>      base_i18n
> 
> === modified file 'src/logic/battle.cc'
> --- src/logic/battle.cc       2014-09-20 09:37:47 +0000
> +++ src/logic/battle.cc       2014-11-29 08:14:12 +0000
> @@ -83,23 +83,29 @@
>  
>       m_creationtime = egbase.get_gametime();
>  
> -     if (Battle* battle = m_first ->get_battle())
> -             battle->cancel(ref_cast<Game, EditorGameBase>(egbase), 
> *m_first);
> -     m_first->set_battle(ref_cast<Game, EditorGameBase>(egbase), this);
> -     if (Battle* battle = m_second->get_battle())
> -             battle->cancel(ref_cast<Game, EditorGameBase>(egbase), 
> *m_second);
> -     m_second->set_battle(ref_cast<Game, EditorGameBase>(egbase), this);
> +     upcast(Game, game, &egbase);
> +
> +     if (Battle* battle = m_first ->get_battle()) {
> +             battle->cancel(*game, *m_first);
> +     }
> +     m_first->set_battle(*game, this);
> +     if (Battle* battle = m_second->get_battle()) {
> +             battle->cancel(*game, *m_second);
> +     }
> +     m_second->set_battle(*game, this);
>  }
>  
>  
>  void Battle::cleanup (EditorGameBase & egbase)
>  {
>       if (m_first) {
> -             m_first ->set_battle(ref_cast<Game, EditorGameBase>(egbase), 
> nullptr);
> +             upcast(Game, game, &egbase);
> +             m_first ->set_battle(*game, nullptr);
>               m_first  = nullptr;
>       }
>       if (m_second) {
> -             m_second->set_battle(ref_cast<Game, EditorGameBase>(egbase), 
> nullptr);
> +             upcast(Game, game, &egbase);
> +             m_second->set_battle(*game, nullptr);
>               m_second = nullptr;
>       }
>  
> 
> === modified file 'src/logic/bob.cc'
> --- src/logic/bob.cc  2014-09-20 09:37:47 +0000
> +++ src/logic/bob.cc  2014-11-29 08:14:12 +0000
> @@ -149,8 +149,10 @@
>   */
>  void Bob::cleanup(EditorGameBase & egbase)
>  {
> -     while (!m_stack.empty()) //  bobs in the editor do not have tasks
> -             do_pop_task(ref_cast<Game, EditorGameBase>(egbase));
> +     while (!m_stack.empty()) { //  bobs in the editor do not have tasks
> +             upcast(Game, game, &egbase);
> +             do_pop_task(*game);
> +     }
>  
>       set_owner(nullptr); // implicitly remove ourselves from owner's map
>  
> 
> === modified file 'src/logic/building.cc'
> --- src/logic/building.cc     2014-11-24 07:25:21 +0000
> +++ src/logic/building.cc     2014-11-29 08:14:12 +0000
> @@ -244,11 +244,11 @@
>       BuildingDescr const * const descr =
>               m_tribe.get_building_descr
>                       (m_tribe.safe_building_index("constructionsite"));
> -     ConstructionSite & csite =
> -             ref_cast<ConstructionSite, MapObject>(descr->create_object());
> -     csite.set_building(*this);
> -
> -     return csite;
> +
> +     upcast(ConstructionSite, csite, &descr->create_object());
> +     csite->set_building(*this);
> +
> +     return *csite;
>  }
>  
>  
> @@ -724,25 +724,24 @@
>  void Building::draw_help
>       (const EditorGameBase& game, RenderTarget& dst, const FCoords&, const 
> Point& pos)
>  {
> -     const InteractiveGameBase & igbase =
> -             ref_cast<InteractiveGameBase const, InteractiveBase const>
> -                     (*game.get_ibase());
> -     uint32_t const dpyflags = igbase.get_display_flags();
> +     upcast(InteractiveGameBase const, igbase, game.get_ibase());
> +
> +     uint32_t const dpyflags = igbase->get_display_flags();
>  
>       if (dpyflags & InteractiveBase::dfShowCensus) {
> -             const std::string info = 
> info_string(igbase.building_census_format());
> +             const std::string info = 
> info_string(igbase->building_census_format());
>               if (!info.empty()) {
>                       dst.blit(pos - Point(0, 48), UI::g_fh1->render(info), 
> BlendMode::UseAlpha, UI::Align_Center);
>               }
>       }
>  
>       if (dpyflags & InteractiveBase::dfShowStatistics) {
> -             if (upcast(InteractivePlayer const, iplayer, &igbase))
> +             if (upcast(InteractivePlayer const, iplayer, igbase))
>                       if
>                               (!iplayer->player().see_all() &&
>                                iplayer->player().is_hostile(*get_owner()))
>                               return;
> -             const std::string info = 
> info_string(igbase.building_statistics_format());
> +             const std::string info = 
> info_string(igbase->building_statistics_format());
>               if (!info.empty()) {
>                       dst.blit(pos - Point(0, 35), UI::g_fh1->render(info), 
> BlendMode::UseAlpha, UI::Align_Center);
>               }
> 
> === modified file 'src/logic/carrier.cc'
> --- src/logic/carrier.cc      2014-09-20 09:37:47 +0000
> +++ src/logic/carrier.cc      2014-11-29 08:14:12 +0000
> @@ -84,8 +84,6 @@
>               return pop_task(game);
>       }
>  
> -     Road & road = ref_cast<Road, PlayerImmovable>(*get_location(game));
> -
>       // Check for pending wares
>       if (m_promised_pickup_to == NOONE)
>               find_pending_ware(game);
> @@ -103,12 +101,13 @@
>               }
>       }
>  
> +     upcast(Road, road, get_location(game));
> +
>       // Move into idle position if necessary
> -     if
> -             (start_task_movepath
> +     if (start_task_movepath
>                       (game,
> -                      road.get_path(),
> -                      road.get_idle_index(),
> +                      road->get_path(),
> +                      road->get_idle_index(),
>                        descr().get_right_walk_anims(does_carry_ware())))
>               return;
>  
> @@ -127,9 +126,9 @@
>  void Carrier::road_pop(Game & game, State & /* state */)
>  {
>       if (m_promised_pickup_to != NOONE && get_location(game)) {
> -             Road & road      = ref_cast<Road, 
> PlayerImmovable>(*get_location(game));
> -             Flag & flag      = 
> road.get_flag(static_cast<Road::FlagId>(m_promised_pickup_to));
> -             Flag & otherflag = 
> road.get_flag(static_cast<Road::FlagId>(m_promised_pickup_to ^ 1));
> +             upcast(Road, road, get_location(game));
> +             Flag & flag      = 
> road->get_flag(static_cast<Road::FlagId>(m_promised_pickup_to));
> +             Flag & otherflag = 
> road->get_flag(static_cast<Road::FlagId>(m_promised_pickup_to ^ 1));
>  
>               flag.cancel_pickup(game, otherflag);
>       }
> @@ -176,8 +175,6 @@
>               return pop_task(game);
>       }
>  
> -     Road & road = ref_cast<Road, PlayerImmovable>(*get_location(game));
> -
>       if (state.ivar1 == -1)
>               // If we're "in" the target building, special code applies
>               deliver_to_building(game, state);
> @@ -187,9 +184,10 @@
>               pickup_from_flag(game, state);
>  
>       else {
> +             upcast(Road, road, get_location(game));
>               // If the ware should go to the building attached to our flag, 
> walk
>               // directly into said building
> -             Flag & flag = 
> road.get_flag(static_cast<Road::FlagId>(state.ivar1 ^ 1));
> +             Flag & flag = 
> road->get_flag(static_cast<Road::FlagId>(state.ivar1 ^ 1));
>  
>               WareInstance & ware = *get_carried_ware(game);
>               assert(ware.get_location(game) == this);
> @@ -240,10 +238,11 @@
>                               molog
>                                       ("[Carrier]: Building switch from under 
> us, return to road.\n");
>  
> +                             upcast(Road, road, get_location(game));
>                               state.ivar1 =
>                                       &building->base_flag()
>                                       ==
> -                                     &ref_cast<Road, 
> PlayerImmovable>(*get_location(game)).get_flag
> +                                     &road->get_flag
>                                               (static_cast<Road::FlagId>(0));
>                               break;
>                       }
> @@ -277,9 +276,9 @@
>  
>               m_promised_pickup_to = NOONE;
>  
> -             Road & road      = ref_cast<Road, 
> PlayerImmovable>(*get_location(game));
> -             Flag & flag      = 
> road.get_flag(static_cast<Road::FlagId>(ivar1));
> -             Flag & otherflag = 
> road.get_flag(static_cast<Road::FlagId>(ivar1 ^ 1));
> +             upcast(Road, road, get_location(game));
> +             Flag & flag      = 
> road->get_flag(static_cast<Road::FlagId>(ivar1));
> +             Flag & otherflag = 
> road->get_flag(static_cast<Road::FlagId>(ivar1 ^ 1));
>  
>               // Are there wares to move between our flags?
>               if (WareInstance * const ware = flag.fetch_pending_ware(game, 
> otherflag))
> @@ -305,15 +304,15 @@
>  void Carrier::drop_ware(Game & game, State & state)
>  {
>       WareInstance * other = nullptr;
> -     Road & road = ref_cast<Road, PlayerImmovable>(*get_location(game));
> -     Flag & flag = road.get_flag(static_cast<Road::FlagId>(state.ivar1 ^ 1));
> +     upcast(Road, road, get_location(game));
> +     Flag & flag = road->get_flag(static_cast<Road::FlagId>(state.ivar1 ^ 
> 1));
>  
>       if (m_promised_pickup_to == (state.ivar1 ^ 1)) {
>               // If there's an ware we acked, we can drop ours even if the 
> flag is
>               // flooded
>               other =
>                       flag.fetch_pending_ware
> -                             (game, 
> road.get_flag(static_cast<Road::FlagId>(state.ivar1)));
> +                             (game, 
> road->get_flag(static_cast<Road::FlagId>(state.ivar1)));
>  
>               if (!other && !flag.has_capacity()) {
>                       molog
> @@ -376,11 +375,11 @@
>  bool Carrier::swap_or_wait(Game & game, State & state)
>  {
>       // Road that employs us
> -     Road & road = ref_cast<Road, PlayerImmovable>(*get_location(game));
> +     upcast(Road, road, get_location(game));
>       // Flag we are delivering to
> -     Flag & flag = road.get_flag(static_cast<Road::FlagId>(state.ivar1 ^ 1));
> +     Flag & flag = road->get_flag(static_cast<Road::FlagId>(state.ivar1 ^ 
> 1));
>       // The other flag of our road
> -     Flag & otherflag = 
> road.get_flag(static_cast<Road::FlagId>(state.ivar1));
> +     Flag & otherflag = 
> road->get_flag(static_cast<Road::FlagId>(state.ivar1));
>  
>  
>       if (m_promised_pickup_to == (state.ivar1 ^ 1)) {
> @@ -456,32 +455,33 @@
>   */
>  void Carrier::find_pending_ware(Game & game)
>  {
> -     Road & road = ref_cast<Road, PlayerImmovable>(*get_location(game));
> +     upcast(Road, road, get_location(game));
>       uint32_t havewarebits = 0;
>  
>       assert(m_promised_pickup_to == NOONE);
>  
> -     if
> -             (road.get_flag(Road::FlagStart).has_pending_ware
> -                     (game, road.get_flag(Road::FlagEnd)))
> +     if (road->get_flag(Road::FlagStart).has_pending_ware
> +                     (game, road->get_flag(Road::FlagEnd))) {
>               havewarebits |= 1;
> +     }
>  
> -     if
> -             (road.get_flag(Road::FlagEnd).has_pending_ware
> -                     (game, road.get_flag(Road::FlagStart)))
> +     if (road->get_flag(Road::FlagEnd).has_pending_ware
> +                     (game, road->get_flag(Road::FlagStart))) {
>               havewarebits |= 2;
> +     }
>  
>       //  If both flags have an ware, we pick the one closer to us.
> -     if (havewarebits == 3)
> +     if (havewarebits == 3) {
>               havewarebits = 1 << find_closest_flag(game);
> +     }
>  
>       // Ack our decision
>       if (havewarebits == 1) {
>               m_promised_pickup_to = START_FLAG;
>               if
>                       (!
> -                      road.get_flag(Road::FlagStart).ack_pickup
> -                             (game, road.get_flag(Road::FlagEnd)))
> +                      road->get_flag(Road::FlagStart).ack_pickup
> +                             (game, road->get_flag(Road::FlagEnd)))
>                       throw wexception
>                               ("Carrier::find_pending_ware: start flag is 
> messed up");
>  
> @@ -489,8 +489,8 @@
>               m_promised_pickup_to = END_FLAG;
>               if
>                       (!
> -                      road.get_flag(Road::FlagEnd).ack_pickup
> -                             (game, road.get_flag(Road::FlagStart)))
> +                      road->get_flag(Road::FlagEnd).ack_pickup
> +                             (game, road->get_flag(Road::FlagStart)))
>                       throw wexception("Carrier::find_pending_ware: end flag 
> is messed up");
>       }
>  }
> @@ -502,8 +502,8 @@
>  int32_t Carrier::find_closest_flag(Game & game)
>  {
>       Map & map = game.map();
> -     CoordPath startpath
> -             (map, ref_cast<Road, 
> PlayerImmovable>(*get_location(game)).get_path());
> +     upcast(Road, road, get_location(game));
> +     CoordPath startpath(map, road->get_path());
>  
>       CoordPath endpath;
>       int32_t startcost, endcost;
> @@ -550,8 +550,8 @@
>  bool Carrier::start_task_walktoflag
>       (Game & game, int32_t const flag, bool const offset)
>  {
> -     const Path & path =
> -             ref_cast<Road, PlayerImmovable>(*get_location(game)).get_path();
> +     upcast(Road, road, get_location(game));
> +     const Path & path = road->get_path();
>       int32_t idx;
>  
>       if (!flag) {
> 
> === modified file 'src/logic/constructionsite.cc'
> --- src/logic/constructionsite.cc     2014-09-10 17:52:49 +0000
> +++ src/logic/constructionsite.cc     2014-11-29 08:14:12 +0000
> @@ -172,16 +172,16 @@
>               Building & b =
>                       m_building->create(egbase, owner(), m_position, false, 
> false, m_old_buildings);
>               if (Worker * const builder = m_builder.get(egbase)) {
> -                     builder->reset_tasks(ref_cast<Game, 
> EditorGameBase>(egbase));
> +                     upcast(Game, game, &egbase);
> +                     builder->reset_tasks(*game);
>                       builder->set_location(&b);
>               }
>               // Open the new building window if needed
>               if (m_optionswindow) {
>                       Point window_position = m_optionswindow->get_pos();
>                       hide_options();
> -                     InteractiveGameBase & igbase =
> -                             ref_cast<InteractiveGameBase, 
> InteractiveBase>(*egbase.get_ibase());
> -                     b.show_options(igbase, false, window_position);
> +                     upcast(InteractiveGameBase, igbase, egbase.get_ibase());
> +                     b.show_options(*igbase, false, window_position);
>               }
>       }
>  }
> 
> === modified file 'src/logic/critter.cc'
> --- src/logic/critter.cc      2014-10-27 10:14:10 +0000
> +++ src/logic/critter.cc      2014-11-29 08:14:12 +0000
> @@ -301,14 +301,12 @@
>       }
>  
>       for (;;) {
> -             const CritterProgram & program =
> -                     ref_cast<CritterProgram const, BobProgramBase const>
> -                             (*state.program);
> +             upcast(CritterProgram const, program, state.program);
>  
> -             if (state.ivar1 >= program.get_size())
> +             if (state.ivar1 >= program->get_size())
>                       return pop_task(game);
>  
> -             const CritterAction & action = program[state.ivar1];
> +             const CritterAction & action = (*program)[state.ivar1];
>  
>               if ((this->*(action.function))(game, state, action))
>                       return;
> 
> === modified file 'src/logic/findnode.cc'
> --- src/logic/findnode.cc     2014-07-24 16:26:55 +0000
> +++ src/logic/findnode.cc     2014-11-29 08:14:12 +0000
> @@ -19,7 +19,6 @@
>  
>  #include "logic/findnode.h"
>  
> -#include "base/deprecated.h"
>  #include "base/wexception.h"
>  #include "logic/field.h"
>  #include "logic/immovable.h"
> 
> === modified file 'src/logic/immovable.cc'
> --- src/logic/immovable.cc    2014-11-24 07:25:21 +0000
> +++ src/logic/immovable.cc    2014-11-29 08:14:12 +0000
> @@ -25,7 +25,6 @@
>  #include <boost/algorithm/string.hpp>
>  #include <boost/format.hpp>
>  
> -#include "base/deprecated.h"
>  #include "base/macros.h"
>  #include "base/wexception.h"
>  #include "config.h"
> @@ -619,7 +618,7 @@
>  {
>       BaseImmovable::Loader::load(fr);
>  
> -     Immovable & imm = ref_cast<Immovable, MapObject>(*get_object());
> +     upcast(Immovable, imm, get_object());
>  
>       if (version >= 5) {
>               PlayerNumber pn = fr.unsigned_8();
> @@ -627,29 +626,29 @@
>                       Player * plr = egbase().get_player(pn);
>                       if (!plr)
>                               throw GameDataError("Immovable::load: player %u 
> does not exist", pn);
> -                     imm.set_owner(plr);
> +                     imm->set_owner(plr);
>               }
>       }
>  
>       // Position
> -     imm.m_position = read_coords_32(&fr, egbase().map().extent());
> -     imm.set_position(egbase(), imm.m_position);
> +     imm->m_position = read_coords_32(&fr, egbase().map().extent());
> +     imm->set_position(egbase(), imm->m_position);
>  
>       // Animation
>       char const * const animname = fr.c_string();
>       try {
> -             imm.m_anim = imm.descr().get_animation(animname);
> +             imm->m_anim = imm->descr().get_animation(animname);
>       } catch (const MapObjectDescr::AnimationNonexistent &) {
> -             imm.m_anim = imm.descr().main_animation();
> +             imm->m_anim = imm->descr().main_animation();
>               log
>                       ("Warning: (%s) Animation \"%s\" not found, using 
> animation %s).\n",
> -                      imm.descr().name().c_str(), animname, 
> imm.descr().get_animation_name(imm.m_anim).c_str());
> +                      imm->descr().name().c_str(), animname, 
> imm->descr().get_animation_name(imm->m_anim).c_str());
>       }
> -     imm.m_animstart = fr.signed_32();
> +     imm->m_animstart = fr.signed_32();
>       if (version >= 4) {
> -             imm.m_anim_construction_total = fr.unsigned_32();
> -             if (imm.m_anim_construction_total)
> -                     imm.m_anim_construction_done = fr.unsigned_32();
> +             imm->m_anim_construction_total = fr.unsigned_32();
> +             if (imm->m_anim_construction_total)
> +                     imm->m_anim_construction_done = fr.unsigned_32();
>       }
>  
>       { //  program
> @@ -664,14 +663,14 @@
>                       if (program_name.empty())
>                               program_name = "program";
>               }
> -             imm.m_program = imm.descr().get_program(program_name);
> +             imm->m_program = imm->descr().get_program(program_name);
>       }
> -     imm.m_program_ptr = fr.unsigned_32();
> +     imm->m_program_ptr = fr.unsigned_32();
>  
> -     if (!imm.m_program) {
> -             imm.m_program_ptr = 0;
> +     if (!imm->m_program) {
> +             imm->m_program_ptr = 0;
>       } else {
> -             if (imm.m_program_ptr >= imm.m_program->size()) {
> +             if (imm->m_program_ptr >= imm->m_program->size()) {
>                       // Try to not fail if the program of some immovable has 
> changed
>                       // significantly.
>                       // Note that in some cases, the immovable may end up 
> broken despite
> @@ -679,20 +678,20 @@
>                       log
>                               ("Warning: Immovable '%s', size of program '%s' 
> seems to have "
>                                "changed.\n",
> -                              imm.descr().name().c_str(), 
> imm.m_program->name().c_str());
> -                     imm.m_program_ptr = 0;
> +                              imm->descr().name().c_str(), 
> imm->m_program->name().c_str());
> +                     imm->m_program_ptr = 0;
>               }
>       }
>  
> -     imm.m_program_step = fr.signed_32();
> +     imm->m_program_step = fr.signed_32();
>  
>       if (version >= 3)
> -             imm.m_reserved_by_worker = fr.unsigned_8();
> +             imm->m_reserved_by_worker = fr.unsigned_8();
>  
>       if (version >= 4) {
>               std::string dataname = fr.c_string();
>               if (!dataname.empty()) {
> -                     imm.set_action_data(ImmovableActionData::load(fr, imm, 
> dataname));
> +                     imm->set_action_data(ImmovableActionData::load(fr, 
> *imm, dataname));
>               }
>       }
>  }
> 
> === modified file 'src/logic/instances.cc'
> --- src/logic/instances.cc    2014-09-20 09:37:47 +0000
> +++ src/logic/instances.cc    2014-11-29 08:14:12 +0000
> @@ -24,7 +24,6 @@
>  #include <cstring>
>  #include <string>
>  
> -#include "base/deprecated.h"
>  #include "base/log.h"
>  #include "base/wexception.h"
>  #include "io/fileread.h"
> 
> === modified file 'src/logic/instances.h'
> --- src/logic/instances.h     2014-09-19 12:54:54 +0000
> +++ src/logic/instances.h     2014-11-29 08:14:12 +0000
> @@ -30,7 +30,6 @@
>  #include <boost/unordered_map.hpp>
>  #include <boost/signals2.hpp>
>  
> -#include "base/deprecated.h"
>  #include "base/log.h"
>  #include "base/macros.h"
>  #include "logic/cmd_queue.h"
> @@ -181,9 +180,10 @@
>  
>  /// If you find a better way to do this that doesn't cost a virtual function
>  /// or additional member variable, go ahead
> -#define MO_DESCR(type) \
> -public: const type & descr() const { \
> -             return ref_cast<type const, MapObjectDescr const>(*m_descr);    
>       \
> +#define MO_DESCR(type)                     \
> +public: const type & descr() const {       \
> +             upcast(type const, result, m_descr); \
> +             return *result;                      \
>     }                                                                         
>  \
>  
>  class MapObject {
> @@ -311,7 +311,8 @@
>               MapObjectLoader & mol   () {return *m_mol;}
>               MapObject            * get_object() {return m_object;}
>               template<typename T> T & get() {
> -                     return ref_cast<T, MapObject>(*m_object);
> +                     upcast(T, result, m_object);
> +                     return *result;
>               }
>  
>       protected:
> 
> === modified file 'src/logic/militarysite.cc'
> --- src/logic/militarysite.cc 2014-09-30 05:41:55 +0000
> +++ src/logic/militarysite.cc 2014-11-29 08:14:12 +0000
> @@ -335,9 +335,9 @@
>               // Now I know that the new guy is worthy.
>               if (nullptr != kickoutCandidate)
>               {
> -                     Game & game = ref_cast<Game, 
> EditorGameBase>(owner().egbase());
> -                     kickoutCandidate->reset_tasks(game);
> -                     kickoutCandidate->start_task_leavebuilding(game, true);
> +                     upcast(Game, game, &owner().egbase());
> +                     kickoutCandidate->reset_tasks(*game);
> +                     kickoutCandidate->start_task_leavebuilding(*game, true);
>                       return true;
>               }
>       }
> @@ -355,10 +355,10 @@
>       // Call to drop_least routine has side effects: it tries to drop a 
> soldier. Order is important!
>       if (stationed_soldiers().size() < m_capacity || 
> drop_least_suited_soldier(true, &s))
>       {
> -             Game & game = ref_cast<Game, EditorGameBase>(egbase);
> +             upcast(Game, game, &egbase);
>               s.set_location(this);
> -             s.reset_tasks(game);
> -             s.start_task_buildingwork(game);
> +             s.reset_tasks(*game);
> +             s.start_task_buildingwork(*game);
>               return true;
>       }
>       return false;
> @@ -376,10 +376,9 @@
>        Worker          * const w,
>        PlayerImmovable &       target)
>  {
> -     MilitarySite & msite = ref_cast<MilitarySite, PlayerImmovable>(target);
> -     Soldier      & s     = ref_cast<Soldier,      Worker>         (*w);
> -
> -     msite.incorporate_soldier(game, s);
> +     upcast(MilitarySite, msite, &target);
> +     upcast(Soldier, s, w);
> +     msite->incorporate_soldier(game, *s);
>  }
>  
>  
> @@ -409,11 +408,11 @@
>       }
>  
>       if (m_capacity < present.size()) {
> -             Game & game = ref_cast<Game, EditorGameBase>(owner().egbase());
> +             upcast(Game, game, &owner().egbase());
>               for (uint32_t i = 0; i < present.size() - m_capacity; ++i) {
>                       Soldier & soldier = *present[i];
> -                     soldier.reset_tasks(game);
> -                     soldier.start_task_leavebuilding(game, true);
> +                     soldier.reset_tasks(*game);
> +                     soldier.start_task_leavebuilding(*game, true);
>               }
>       }
>  }
> @@ -716,7 +715,7 @@
>  
>  void MilitarySite::drop_soldier(Soldier & soldier)
>  {
> -     Game & game = ref_cast<Game, EditorGameBase>(owner().egbase());
> +     upcast(Game, game, &owner().egbase());
>  
>       if (!is_present(soldier)) {
>               // This can happen when the "drop soldier" player command is 
> delayed
> @@ -729,8 +728,8 @@
>               return;
>       }
>  
> -     soldier.reset_tasks(game);
> -     soldier.start_task_leavebuilding(game, true);
> +     soldier.reset_tasks(*game);
> +     soldier.start_task_leavebuilding(*game, true);
>  
>       update_soldier_request();
>  }
> @@ -754,8 +753,8 @@
>  
>  void MilitarySite::aggressor(Soldier & enemy)
>  {
> -     Game & game = ref_cast<Game, EditorGameBase>(owner().egbase());
> -     Map  & map  = game.map();
> +     upcast(Game, game, &owner().egbase());
> +     Map  & map  = game->map();
>       if
>               (enemy.get_owner() == &owner() ||
>                enemy.get_battle() ||
> @@ -784,7 +783,7 @@
>                               sj.enemy = &enemy;
>                               sj.stayhome = false;
>                               m_soldierjobs.push_back(sj);
> -                             temp_soldier->update_task_buildingwork(game);
> +                             temp_soldier->update_task_buildingwork(*game);
>                               return;
>                       }
>               }
> @@ -792,12 +791,12 @@
>  
>       // Inform the player, that we are under attack by adding a new entry to 
> the
>       // message queue - a sound will automatically be played.
> -     notify_player(game, true);
> +     notify_player(*game, true);
>  }
>  
>  bool MilitarySite::attack(Soldier & enemy)
>  {
> -     Game & game = ref_cast<Game, EditorGameBase>(owner().egbase());
> +     upcast(Game, game, &owner().egbase());
>  
>       std::vector<Soldier *> present = present_soldiers();
>       Soldier * defender = nullptr;
> @@ -832,11 +831,11 @@
>               sj.stayhome = true;
>               m_soldierjobs.push_back(sj);
>  
> -             defender->update_task_buildingwork(game);
> +             defender->update_task_buildingwork(*game);
>  
>               // Inform the player, that we are under attack by adding a new 
> entry to
>               // the message queue - a sound will automatically be played.
> -             notify_player(game);
> +             notify_player(*game);
>  
>               return true;
>       } else {
> @@ -844,7 +843,7 @@
>               const Coords coords = get_position();
>               {
>                       send_message
> -                             (game,
> +                             (*game,
>                                "site_lost",
>                                _("Militarysite lost!"),
>                                descr().m_defeated_enemy_str,
> @@ -855,11 +854,11 @@
>               // we still hold the bigger military presence in that area 
> (e.g. if there
>               // is a fortress one or two points away from our sentry, the 
> fortress has
>               // a higher presence and thus the enemy can just burn down the 
> sentry.
> -             if (military_presence_kept(game)) {
> +             if (military_presence_kept(*game)) {
>                       // Okay we still got the higher military presence, so 
> the attacked
>                       // militarysite will be destroyed.
>                       set_defeating_player(enemy.owner().player_number());
> -                     schedule_destroy(game);
> +                     schedule_destroy(*game);
>                       return false;
>               }
>  
> @@ -889,16 +888,16 @@
>  
>               // Now we destroy the old building before we place the new one.
>               set_defeating_player(enemy.owner().player_number());
> -             schedule_destroy(game);
> +             schedule_destroy(*game);
>  
>               enemyplayer->force_building(coords, former_buildings);
> -             BaseImmovable * const newimm = 
> game.map()[coords].get_immovable();
> +             BaseImmovable * const newimm = 
> game->map()[coords].get_immovable();
>               upcast(MilitarySite, newsite, newimm);
> -             newsite->reinit_after_conqueration(game);
> +             newsite->reinit_after_conqueration(*game);
>  
>               // Of course we should inform the victorious player as well
>               newsite->send_message
> -                     (game,
> +                     (*game,
>                        "site_defeated",
>                        _("Enemy at site defeated!"),
>                        newsite->descr().m_defeated_you_str,
> @@ -991,8 +990,8 @@
>       sj.stayhome = false;
>       m_soldierjobs.push_back(sj);
>  
> -     soldier.update_task_buildingwork
> -             (ref_cast<Game, EditorGameBase>(owner().egbase()));
> +     upcast(Game, game, &owner().egbase());
> +     soldier.update_task_buildingwork(*game);
>  }
>  
>  
> 
> === modified file 'src/logic/partially_finished_building.cc'
> --- src/logic/partially_finished_building.cc  2014-09-10 10:18:46 +0000
> +++ src/logic/partially_finished_building.cc  2014-11-29 08:14:12 +0000
> @@ -201,15 +201,15 @@
>  {
>       assert(w);
>  
> -     PartiallyFinishedBuilding & b = ref_cast<PartiallyFinishedBuilding, 
> PlayerImmovable>(target);
> +     upcast(PartiallyFinishedBuilding, b, &target);
>  
> -     b.m_builder = w;
> +     b->m_builder = w;
>  
>       delete &rq;
> -     b.m_builder_request = nullptr;
> +     b->m_builder_request = nullptr;
>  
>       w->start_task_buildingwork(game);
> -     b.set_seeing(true);
> +     b->set_seeing(true);
>  }
>  
>  
> 
> === modified file 'src/logic/pathfield.cc'
> --- src/logic/pathfield.cc    2014-09-19 12:54:54 +0000
> +++ src/logic/pathfield.cc    2014-11-29 08:14:12 +0000
> @@ -19,7 +19,6 @@
>  
>  #include "logic/pathfield.h"
>  
> -#include "base/deprecated.h"
>  #include "base/wexception.h"
>  
>  namespace Widelands {
> 
> === modified file 'src/logic/player.cc'
> --- src/logic/player.cc       2014-09-20 09:37:47 +0000
> +++ src/logic/player.cc       2014-11-29 08:14:12 +0000
> @@ -201,14 +201,14 @@
>               const TribeDescr::Initialization & initialization =
>                       tribe().initialization(m_initialization_index);
>  
> -             Game & game = ref_cast<Game, EditorGameBase>(egbase());
> +             upcast(Game, game, &egbase());
>  
>               // Run the corresponding script
> -             std::unique_ptr<LuaTable> 
> table(game.lua().run_script(initialization.script));
> +             std::unique_ptr<LuaTable> 
> table(game->lua().run_script(initialization.script));
>               table->do_not_warn_about_unaccessed_keys();
>               std::unique_ptr<LuaCoroutine> cr = table->get_coroutine("func");
>               cr->push_arg(this);
> -             game.enqueue_command(new CmdLuaCoroutine(game.get_gametime(), 
> cr.release()));
> +             game->enqueue_command(new CmdLuaCoroutine(game->get_gametime(), 
> cr.release()));
>  
>               // Check if other starting positions are shared in and 
> initialize them as well
>               for (uint8_t n = 0; n < m_further_shared_in_player.size(); ++n) 
> {
> @@ -216,12 +216,12 @@
>  
>                       // Run the corresponding script
>                       std::unique_ptr<LuaCoroutine> ncr =
> -                             game.lua()
> +                             game->lua()
>                                       
> .run_script(tribe().initialization(m_further_initializations.at(n)).script)
>                                       ->get_coroutine("func");
>                       ncr->push_arg(this);
>                       ncr->push_arg(further_pos);
> -                     game.enqueue_command(new 
> CmdLuaCoroutine(game.get_gametime(), ncr.release()));
> +                     game->enqueue_command(new 
> CmdLuaCoroutine(game->get_gametime(), ncr.release()));
>               }
>       } else
>               throw WLWarning
> @@ -485,7 +485,8 @@
>               log("Clearing for road at (%i, %i)\n", c.x, c.y);
>  
>               //  Make sure that the player owns the area around.
> -             ref_cast<Game, 
> EditorGameBase>(egbase()).conquer_area_no_building
> +             upcast(Game, game, &egbase());
> +             game->conquer_area_no_building
>                       (PlayerArea<Area<FCoords> >(player_number(), 
> Area<FCoords>(c, 1)));
>  
>               if (BaseImmovable * const immovable = c.field->get_immovable()) 
> {
> @@ -774,11 +775,13 @@
>  */
>  void Player::flagaction(Flag & flag)
>  {
> -     if (&flag.owner() == this) //  Additional security check.
> +     if (&flag.owner() == this) { //  Additional security check.
> +             upcast(Game, game, &egbase());
>               flag.add_flag_job
> -                     (ref_cast<Game, EditorGameBase>(egbase()),
> +                     (*game,
>                        tribe().worker_index("geologist"),
>                        "expedition");
> +     }
>  }
>  
>  
> 
> === modified file 'src/logic/production_program.h'
> --- src/logic/production_program.h    2014-09-14 11:31:58 +0000
> +++ src/logic/production_program.h    2014-11-29 08:14:12 +0000
> @@ -28,7 +28,6 @@
>  
>  #include <stdint.h>
>  
> -#include "base/deprecated.h"
>  #include "base/log.h"
>  #include "base/macros.h"
>  #include "logic/bill_of_materials.h"
> 
> === modified file 'src/logic/productionsite.cc'
> --- src/logic/productionsite.cc       2014-10-27 10:14:10 +0000
> +++ src/logic/productionsite.cc       2014-11-29 08:14:12 +0000
> @@ -517,10 +517,10 @@
>        Worker          * const w,
>        PlayerImmovable &       target)
>  {
> -     ProductionSite & psite = ref_cast<ProductionSite, 
> PlayerImmovable>(target);
> +     upcast(ProductionSite, psite, &target);
>  
>       assert(w);
> -     assert(w->get_location(game) == &psite);
> +     assert(w->get_location(game) == psite);
>  
>       // If there is more than one working position, it's possible, that 
> different level workers are
>       // requested and therefor possible, that a higher qualified worker 
> answers a request for a lower
> @@ -531,7 +531,7 @@
>       // placed on the slot that originally requested the arrived worker.
>       bool worker_placed = false;
>       WareIndex     idx = w->descr().worker_index();
> -     for (WorkingPosition * wp = psite.m_working_positions;; ++wp) {
> +     for (WorkingPosition * wp = psite->m_working_positions;; ++wp) {
>               if (wp->worker_request == &rq) {
>                       if (wp->worker_request->get_index() == idx) {
>                               // Place worker
> @@ -542,16 +542,16 @@
>                               // Set new request for this slot
>                               WareIndex workerid = 
> wp->worker_request->get_index();
>                               delete wp->worker_request;
> -                             wp->worker_request = 
> &psite.request_worker(workerid);
> +                             wp->worker_request = 
> &psite->request_worker(workerid);
>                       }
>                       break;
>               }
>       }
>       while (!worker_placed) {
>               {
> -                     uint8_t nwp = psite.descr().nr_working_positions();
> +                     uint8_t nwp = psite->descr().nr_working_positions();
>                       uint8_t pos = 0;
> -                     WorkingPosition * wp = psite.m_working_positions;
> +                     WorkingPosition * wp = psite->m_working_positions;
>                       for (; pos < nwp; ++wp, ++pos) {
>                               // Find a fitting slot
>                               if (!wp->worker && !worker_placed)
> @@ -565,10 +565,10 @@
>               }
>               if (!worker_placed) {
>                       // Find the next smaller version of this worker
> -                     WareIndex nuwo    = 
> psite.descr().tribe().get_nrworkers();
> +                     WareIndex nuwo    = 
> psite->descr().tribe().get_nrworkers();
>                       WareIndex current = WareIndex(static_cast<size_t>(0));
>                       for (; current < nuwo; ++current) {
> -                             WorkerDescr const * worker = 
> psite.descr().tribe().get_worker_descr(current);
> +                             WorkerDescr const * worker = 
> psite->descr().tribe().get_worker_descr(current);
>                               if (worker->becomes() == idx) {
>                                       idx = current;
>                                       break;
> @@ -578,8 +578,8 @@
>                               throw
>                                       wexception
>                                               ("Something went wrong! No 
> fitting place for worker %s in %s at (%u, %u) found!",
> -                                              w->descr().descname().c_str(), 
> psite.descr().descname().c_str(),
> -                                              psite.get_position().x, 
> psite.get_position().y);
> +                                              w->descr().descname().c_str(), 
> psite->descr().descname().c_str(),
> +                                              psite->get_position().x, 
> psite->get_position().y);
>               }
>       }
>  
> @@ -588,8 +588,8 @@
>       // primary worker if the worker that has just arrived is
>       // the last one we need to start working.
>       w->start_task_idle(game, 0, -1);
> -     psite.try_start_working(game);
> -     psite.workers_changed();
> +     psite->try_start_working(game);
> +     psite->workers_changed();
>  }
>  
>  
> @@ -765,14 +765,13 @@
>                       const WorkerDescr & worker_descr =
>                               
> *descr().tribe().get_worker_descr(worker_type_with_count.first);
>                       {
> -                             Worker & recruit =
> -                                     ref_cast<Worker, 
> Bob>(worker_descr.create_object());
> -                             recruit.set_owner(&worker.owner());
> -                             recruit.set_position(game, 
> worker.get_position());
> -                             recruit.init(game);
> -                             recruit.set_location(this);
> -                             recruit.start_task_leavebuilding(game, true);
> -                             worker.start_task_releaserecruit(game, recruit);
> +                             upcast(Worker, recruit, 
> &worker_descr.create_object());
> +                             recruit->set_owner(&worker.owner());
> +                             recruit->set_position(game, 
> worker.get_position());
> +                             recruit->init(game);
> +                             recruit->set_location(this);
> +                             recruit->start_task_leavebuilding(game, true);
> +                             worker.start_task_releaserecruit(game, 
> *recruit);
>                       }
>               }
>               assert(worker_type_with_count.second);
> 
> === modified file 'src/logic/requirements.cc'
> --- src/logic/requirements.cc 2014-09-20 09:37:47 +0000
> +++ src/logic/requirements.cc 2014-11-29 08:14:12 +0000
> @@ -19,7 +19,6 @@
>  
>  #include "logic/requirements.h"
>  
> -#include "base/deprecated.h"
>  #include "base/i18n.h"
>  #include "io/fileread.h"
>  #include "io/filewrite.h"
> 
> === modified file 'src/logic/ship.cc'
> --- src/logic/ship.cc 2014-09-20 09:37:47 +0000
> +++ src/logic/ship.cc 2014-11-29 08:14:12 +0000
> @@ -21,7 +21,7 @@
>  
>  #include <memory>
>  
> -#include "base/deprecated.h"
> +#include "base/macros.h"
>  #include "economy/economy.h"
>  #include "economy/flag.h"
>  #include "economy/fleet.h"
> @@ -1031,7 +1031,8 @@
>       // economy of all workers we're transporting so that they are in the 
> correct
>       // economy. Also, we might are on an expedition which means that we 
> just now
>       // created the economy of this ship and must inform all wares.
> -     ship.set_economy(ref_cast<Game>(egbase()), ship.m_economy);
> +     upcast(Game, game, &egbase());
> +     ship.set_economy(*game, ship.m_economy);
>  }
>  
>  
> 
> === modified file 'src/logic/soldier.cc'
> --- src/logic/soldier.cc      2014-10-27 10:14:10 +0000
> +++ src/logic/soldier.cc      2014-11-29 08:14:12 +0000
> @@ -700,12 +700,8 @@
>        uint32_t const time)
>  {
>       molog("[soldier] starting animation %s", animname);
> -     return
> -             start_task_idle
> -                     (ref_cast<Game, EditorGameBase>(egbase),
> -                      descr().get_rand_anim
> -                             (ref_cast<Game, EditorGameBase>(egbase), 
> animname),
> -                      time);
> +     upcast(Game, game, &egbase);
> +     return start_task_idle(*game, descr().get_rand_anim(*game, animname), 
> time);
>  }
>  
>  
> @@ -748,14 +744,17 @@
>   */
>  bool Soldier::can_be_challenged()
>  {
> -     if (m_hp_current < 1)  //< Soldier is dead!
> -             return false;
> -     if (!is_on_battlefield())
> -             return false;
> -     if (!m_battle)
> +     if (m_hp_current < 1) {  //< Soldier is dead!
> +             return false;
> +     }
> +     if (!is_on_battlefield()) {
> +             return false;
> +     }
> +     if (!m_battle) {
>               return true;
> -     return
> -             !m_battle->locked(ref_cast<Game, 
> EditorGameBase>(owner().egbase()));
> +     }
> +     upcast(Game, game, &owner().egbase());
> +     return !m_battle->locked(*game);
>  }
>  
>  /**
> @@ -1805,11 +1804,8 @@
>                        FindImmovableAttackable());
>  
>               for (BaseImmovable * temp_attackable : attackables) {
> -                     if
> -                             (ref_cast<PlayerImmovable const, BaseImmovable 
> const>(*temp_attackable)
> -                              .get_owner()->player_number()
> -                              ==
> -                              land_owner) {
> +                     upcast(PlayerImmovable const, imm, temp_attackable);
> +                     if (imm->get_owner()->player_number() == land_owner) {
>                               dynamic_cast<Attackable 
> &>(*temp_attackable).aggressor(*this);
>                       }
>               }
> 
> === modified file 'src/logic/trainingsite.cc'
> --- src/logic/trainingsite.cc 2014-10-27 10:14:10 +0000
> +++ src/logic/trainingsite.cc 2014-11-29 08:14:12 +0000
> @@ -341,13 +341,13 @@
>        Worker          * const w,
>        PlayerImmovable &       target)
>  {
> -     TrainingSite & tsite = ref_cast<TrainingSite, PlayerImmovable>(target);
> -     Soldier      & s     = ref_cast<Soldier,      Worker>         (*w);
> -
> -     assert(s.get_location(game) == &tsite);
> -     assert(tsite.m_soldier_request == &rq);
> -
> -     tsite.incorporate_soldier(game, s);
> +     upcast(TrainingSite, tsite, &target);
> +     upcast(Soldier, s, w);
> +
> +     assert(s->get_location(game) == tsite);
> +     assert(tsite->m_soldier_request == &rq);
> +
> +     tsite->incorporate_soldier(game, *s);
>  }
>  
>  /*
> @@ -416,7 +416,7 @@
>   */
>  void TrainingSite::drop_soldier(Soldier & soldier)
>  {
> -     Game & game = ref_cast<Game, EditorGameBase>(owner().egbase());
> +     upcast(Game, game, &owner().egbase());
>  
>       std::vector<Soldier *>::iterator it =
>               std::find(m_soldiers.begin(), m_soldiers.end(), &soldier);
> @@ -427,11 +427,11 @@
>  
>       m_soldiers.erase(it);
>  
> -     soldier.reset_tasks(game);
> -     soldier.start_task_leavebuilding(game, true);
> +     soldier.reset_tasks(*game);
> +     soldier.start_task_leavebuilding(*game, true);
>  
>       // Schedule, so that we can call new soldiers on next act()
> -     schedule_act(game, 100);
> +     schedule_act(*game, 100);
>  }
>  
>  
> 
> === modified file 'src/logic/warehouse.cc'
> --- src/logic/warehouse.cc    2014-09-30 05:41:55 +0000
> +++ src/logic/warehouse.cc    2014-11-29 08:14:12 +0000
> @@ -23,7 +23,6 @@
>  
>  #include <boost/format.hpp>
>  
> -#include "base/deprecated.h"
>  #include "base/log.h"
>  #include "base/macros.h"
>  #include "base/wexception.h"
> @@ -377,11 +376,10 @@
>                       (owner().is_worker_type_allowed(worker_index) &&
>                        m_next_worker_without_cost_spawn[i] == 
> static_cast<uint32_t>(never()))
>               {
> -                     if (next_spawn == static_cast<uint32_t>(never()))
> -                             next_spawn =
> -                                     schedule_act
> -                                             (ref_cast<Game, 
> EditorGameBase>(egbase),
> -                                              
> WORKER_WITHOUT_COST_SPAWN_INTERVAL);
> +                     upcast(Game, game, &egbase);
> +                     if (next_spawn == static_cast<uint32_t>(never())) {
> +                             next_spawn = schedule_act(*game, 
> WORKER_WITHOUT_COST_SPAWN_INTERVAL);
> +                     }
>                       m_next_worker_without_cost_spawn[i] = next_spawn;
>                       log
>                               ("WARNING: player %u is allowed to create 
> worker type %s but his "
> @@ -444,17 +442,13 @@
>               // m_next_military_act is not touched in the loading code. Is 
> only needed
>               // if there warehous is created in the game?  I assume it's for 
> the
>               // conquer_radius thing
> -             m_next_military_act =
> -                     schedule_act
> -                             (ref_cast<Game, EditorGameBase>(egbase), 1000);
> +             m_next_military_act = schedule_act(*game, 1000);
>  
> -             m_next_stock_remove_act =
> -                     schedule_act
> -                             (ref_cast<Game, EditorGameBase>(egbase), 4000);
> +             m_next_stock_remove_act = schedule_act(*game, 4000);
>  
>               log("Message: adding (wh) (%s) %i \n", 
> to_string(descr().type()).c_str(), player.player_number());
>               send_message
> -                     (ref_cast<Game, EditorGameBase>(egbase),
> +                     (*game,
>                        "warehouse",
>                        descr().descname(),
>                        (boost::format(_("A new %s was added to your 
> economy."))
> @@ -911,17 +905,17 @@
>        Worker          * const w,
>        PlayerImmovable &       target)
>  {
> -     Warehouse & wh = ref_cast<Warehouse, PlayerImmovable>(target);
> +     upcast(Warehouse, wh, &target);
>  
>       if (w) {
>               w->schedule_incorporate(game);
>       } else {
> -             wh.m_supply->add_wares(ware, 1);
> +             wh->m_supply->add_wares(ware, 1);
>  
>               // This ware may be used to build planned workers,
>               // so it seems like a good idea to update the associated 
> requests
>               // and use the ware before it is sent away again.
> -             wh._update_all_planned_workers(game);
> +             wh->_update_all_planned_workers(game);
>       }
>  }
>  
> @@ -1198,8 +1192,8 @@
>       if (!descr().get_conquers())
>               return;
>  
> -     Game & game = ref_cast<Game, EditorGameBase>(owner().egbase());
> -     Map  & map  = game.map();
> +     upcast(Game, game, &owner().egbase());
> +     Map  & map  = game->map();
>       if
>               (enemy.get_owner() == &owner() ||
>                enemy.get_battle() ||
> @@ -1209,7 +1203,7 @@
>               return;
>  
>       if
> -             (game.map().find_bobs
> +             (game->map().find_bobs
>                       
> (Area<FCoords>(map.get_fcoords(base_flag().get_position()), 2),
>                        nullptr,
>                        FindBobEnemySoldier(&owner())))
> @@ -1218,30 +1212,28 @@
>       WareIndex const soldier_index = descr().tribe().worker_index("soldier");
>       Requirements noreq;
>  
> -     if (!count_workers(game, soldier_index, noreq))
> +     if (!count_workers(*game, soldier_index, noreq))
>               return;
>  
> -     Soldier & defender =
> -             ref_cast<Soldier, Worker>(launch_worker(game, soldier_index, 
> noreq));
> -     defender.start_task_defense(game, false);
> +     upcast(Soldier, defender, &launch_worker(*game, soldier_index, noreq));
> +     defender->start_task_defense(*game, false);
>  }
>  
>  bool Warehouse::attack(Soldier & enemy)
>  {
> -     Game & game = ref_cast<Game, EditorGameBase>(owner().egbase());
> +     upcast(Game, game, &owner().egbase());
>       WareIndex const soldier_index = descr().tribe().worker_index("soldier");
>       Requirements noreq;
>  
> -     if (count_workers(game, soldier_index, noreq)) {
> -             Soldier & defender =
> -                     ref_cast<Soldier, Worker>(launch_worker(game, 
> soldier_index, noreq));
> -             defender.start_task_defense(game, true);
> -             enemy.send_signal(game, "sleep");
> +     if (count_workers(*game, soldier_index, noreq)) {
> +             upcast(Soldier, defender, &launch_worker(*game, soldier_index, 
> noreq));
> +             defender->start_task_defense(*game, true);
> +             enemy.send_signal(*game, "sleep");
>               return true;
>       }
>  
>       set_defeating_player(enemy.owner().player_number());
> -     schedule_destroy(game);
> +     schedule_destroy(*game);
>       return false;
>  }
>  
> 
> === modified file 'src/logic/worker.cc'
> --- src/logic/worker.cc       2014-10-27 10:14:10 +0000
> +++ src/logic/worker.cc       2014-11-29 08:14:12 +0000
> @@ -618,7 +618,8 @@
>       int32_t max_steps = -1;
>  
>       // First of all, make sure we're outside
> -     if (imm == &ref_cast<Building, PlayerImmovable>(*get_location(game))) {
> +     upcast(Building, building, get_location(game));
> +     if (imm == building) {
>               start_task_leavebuilding(game, false);
>               return true;
>       }
> @@ -902,7 +903,8 @@
>  bool Worker::run_geologist(Game & game, State & state, const Action & action)
>  {
>       // assert that location is of the right type.
> -     ref_cast<Flag const, PlayerImmovable const>(*get_location(game));
> +     // NOCOM(#gunchleoc): What's this supposed to do? There's nothing being 
> asserted here.

Dunno. Maybe the author thought that it would throw something like a bad cast 
exception, but I do not think it does in c++. Just delete it.

> +     //upcast(Flag const, flag, get_location(game));
>  
>       molog
>               ("  Start Geologist (%i attempts, %i radius -> %s)\n",
> @@ -1902,13 +1904,12 @@
>       }
>  
>       for (;;) {
> -             const WorkerProgram & program =
> -                     ref_cast<WorkerProgram const, BobProgramBase 
> const>(*state.program);
> +             upcast(WorkerProgram const, program, state.program);
>  
> -             if (static_cast<uint32_t>(state.ivar1) >= program.get_size())
> +             if (static_cast<uint32_t>(state.ivar1) >= program->get_size())
>                       return pop_task(game);
>  
> -             const Action & action = *program.get_action(state.ivar1);
> +             const Action & action = *program->get_action(state.ivar1);
>  
>               if ((this->*(action.function))(game, state, action))
>                       return;
> @@ -2082,9 +2083,12 @@
>  
>       WareInstance * ware = get_carried_ware(game);
>       BaseImmovable * const location = 
> game.map()[get_position()].get_immovable();
> +
>  #ifndef NDEBUG
> -     Building & ploc = ref_cast<Building, 
> PlayerImmovable>(*get_location(game));
> -     assert(&ploc == location || &ploc.base_flag() == location);
> +     upcast(BaseImmovable, ploc, get_location(game));
> +     upcast(Building, plbuild, get_location(game));
> +     upcast(BaseImmovable, plflagloc, &plbuild->base_flag());
> +     assert(ploc == location || plflagloc == location);
>  #endif
>  
>       // Deliver the ware
> @@ -2205,11 +2209,10 @@
>  
>               // The ware has decided that it doesn't want to go to us after 
> all
>               // In order to return to the warehouse, we're switching to 
> State_DropOff
> -             if
> -                     (WareInstance * const ware =
> -                             ref_cast<Flag, 
> PlayerImmovable>(*location).fetch_pending_ware
> -                                     (game, employer))
> +             upcast(Flag, flag, location);
> +             if (WareInstance * const ware = flag->fetch_pending_ware(game, 
> employer)) {
>                       set_carried_ware(game, ware);
> +             }
>  
>               set_animation(game, descr().get_animation("idle"));
>               return schedule_act(game, 20);
> @@ -2367,14 +2370,13 @@
>   */
>  void Worker::start_task_leavebuilding(Game & game, bool const changelocation)
>  {
> -     Building & building =
> -             ref_cast<Building, PlayerImmovable>(*get_location(game));
> +     upcast(Building, building, get_location(game));
>  
>       // Set the wait task
>       push_task(game, taskLeavebuilding);
>       State & state = top_state();
>       state.ivar1   = changelocation;
> -     state.objvar1 = &building;
> +     state.objvar1 = building;
>  }
>  
>  
> @@ -2437,8 +2439,10 @@
>       //  The if-statement is needed because this is (unfortunately) also 
> called
>       //  when the Worker is deallocated when shutting down the simulation. 
> Then
>       //  the building might not exist any more.
> -     if (MapObject * const building = state.objvar1.get(game))
> -             ref_cast<Building, MapObject>(*building).leave_skip(game, 
> *this);
> +     if (MapObject * const building = state.objvar1.get(game)) {
> +             upcast(Building, tmp_building, building);
> +             tmp_building->leave_skip(game, *this);
> +     }
>  }
>  
>  
> @@ -2544,7 +2548,7 @@
>               molog("[fugitive]: found a flag connected to warehouse(s)\n");
>               for (const ImmovableFound& tmp_flag : flags) {
>  
> -                     Flag & flag = ref_cast<Flag, 
> BaseImmovable>(*tmp_flag.object);
> +                     upcast(Flag, flag, tmp_flag.object);
>  
>                       if (game.logic_rand() % 2 == 0)
>                               continue;
> @@ -2553,7 +2557,7 @@
>                               map.calc_distance(get_position(), 
> tmp_flag.coords);
>  
>                       if (!best || bestdist > dist) {
> -                             best = &flag;
> +                             best = flag;
>                               bestdist = dist;
>                       }
>               }
> @@ -2649,10 +2653,8 @@
>       //
>       Map & map = game.map();
>       const World & world = game.world();
> -     Area<FCoords> owner_area
> -             (map.get_fcoords
> -                     (ref_cast<Flag, 
> PlayerImmovable>(*get_location(game)).get_position()),
> -              state.ivar2);
> +     upcast(Flag, flag, get_location(game));
> +     Area<FCoords> owner_area(map.get_fcoords(flag->get_position()), 
> state.ivar2);
>  
>       // Check if it's not time to go home
>       if (state.ivar1 > 0) {
> @@ -2798,12 +2800,11 @@
>       state.ivar2   = game.get_gametime() + time;
>  
>       // first get out
> -     Building & building =
> -             ref_cast<Building, PlayerImmovable>(*get_location(game));
> +     upcast(Building, building, get_location(game));
>       push_task(game, taskLeavebuilding);
>       State & stateLeave = top_state();
>       stateLeave.ivar1 = false;
> -     stateLeave.objvar1 = &building;
> +     stateLeave.objvar1 = building;
>  }
>  
>  
> @@ -2958,8 +2959,8 @@
>  
>       if (version >= 2) {
>               if (fr.unsigned_8()) {
> -                     worker.m_transfer =
> -                             new Transfer(ref_cast<Game, 
> EditorGameBase>(egbase()), worker);
> +                     upcast(Game, game, &egbase());
> +                     worker.m_transfer = new Transfer(*game, worker);
>                       worker.m_transfer->read(fr, m_transfer);
>               }
>       }
> 
> === modified file 'src/logic/worker_descr.cc'
> --- src/logic/worker_descr.cc 2014-09-20 09:37:47 +0000
> +++ src/logic/worker_descr.cc 2014-11-29 08:14:12 +0000
> @@ -19,8 +19,8 @@
>  
>  #include "logic/worker_descr.h"
>  
> -#include "base/deprecated.h"
>  #include "base/i18n.h"
> +#include "base/macros.h"
>  #include "base/wexception.h"
>  #include "graphic/graphic.h"
>  #include "logic/carrier.h"
> @@ -177,12 +177,12 @@
>        Coords             const coords)
>  const
>  {
> -     Worker & worker = ref_cast<Worker, MapObject>(create_object());
> -     worker.set_owner(&owner);
> -     worker.set_location(location);
> -     worker.set_position(egbase, coords);
> -     worker.init(egbase);
> -     return worker;
> +     upcast(Worker, worker, &create_object());
> +     worker->set_owner(&owner);
> +     worker->set_location(location);
> +     worker->set_position(egbase, coords);
> +     worker->init(egbase);
> +     return *worker;
>  }
>  
>  
> 
> === modified file 'src/map_io/CMakeLists.txt'
> --- src/map_io/CMakeLists.txt 2014-11-22 15:27:45 +0000
> +++ src/map_io/CMakeLists.txt 2014-11-29 08:14:12 +0000
> @@ -86,7 +86,6 @@
>      map_version_packet.h
>    USES_SDL2_IMAGE
>    DEPENDS
> -    base_deprecated
>      base_exceptions
>      base_log
>      base_macros
> 
> === modified file 'src/map_io/map_buildingdata_packet.cc'
> --- src/map_io/map_buildingdata_packet.cc     2014-09-20 09:37:47 +0000
> +++ src/map_io/map_buildingdata_packet.cc     2014-11-29 08:14:12 +0000
> @@ -194,43 +194,21 @@
>                                       //  Set economy now, some stuff below 
> will count on this.
>                                       
> building.set_economy(building.m_flag->get_economy());
>  
> +                                     upcast(Game, game, &egbase);
> +
>                                       if (upcast(ConstructionSite, 
> constructionsite, &building)) {
> -                                             read_constructionsite
> -                                                     (*constructionsite,
> -                                                      fr,
> -                                                      ref_cast<Game, 
> EditorGameBase>(egbase),
> -                                                      mol);
> +                                             read_constructionsite 
> (*constructionsite, fr, *game, mol);
>                                       } else if (upcast(DismantleSite, dms, 
> &building)) {
> -                                             read_dismantlesite
> -                                                     (*dms,
> -                                                      fr,
> -                                                      ref_cast<Game, 
> EditorGameBase>(egbase),
> -                                                      mol);
> +                                             read_dismantlesite(*dms, fr, 
> *game, mol);
>                                       } else if (upcast(Warehouse, warehouse, 
> &building)) {
> -                                             read_warehouse
> -                                                     (*warehouse,
> -                                                      fr,
> -                                                      ref_cast<Game, 
> EditorGameBase>(egbase),
> -                                                      mol);
> +                                             read_warehouse(*warehouse, fr, 
> *game, mol);
>                                       } else if (upcast(ProductionSite, 
> productionsite, &building)) {
>                                               if (upcast(MilitarySite, 
> militarysite, productionsite)) {
> -                                                     read_militarysite
> -                                                             (*militarysite,
> -                                                              fr,
> -                                                              ref_cast<Game, 
> EditorGameBase>(egbase),
> -                                                              mol);
> +                                                     
> read_militarysite(*militarysite, fr, *game, mol);
>                                               } else if (upcast(TrainingSite, 
> trainingsite, productionsite)) {
> -                                                     read_trainingsite
> -                                                             (*trainingsite,
> -                                                              fr,
> -                                                              ref_cast<Game, 
> EditorGameBase>(egbase),
> -                                                              mol);
> +                                                     
> read_trainingsite(*trainingsite, fr, *game, mol);
>                                               } else {
> -                                                     read_productionsite
> -                                                             
> (*productionsite,
> -                                                              fr,
> -                                                              ref_cast<Game, 
> EditorGameBase>(egbase),
> -                                                              mol);
> +                                                     
> read_productionsite(*productionsite, fr, *game, mol);
>                                               }
>                                       } else {
>                                               //  type of building is not one 
> of (or derived from)
> @@ -238,8 +216,7 @@
>                                               assert(false);
>                                       }
>                                       if (packet_version < 3) {
> -                                             read_formerbuildings_v2
> -                                                     (building, fr, 
> ref_cast<Game, EditorGameBase>(egbase), mol);
> +                                             
> read_formerbuildings_v2(building, fr, *game, mol);
>                                       }
>  
>                                       mol.mark_object_as_loaded(building);
> @@ -1137,7 +1114,7 @@
>       Map & map = egbase.map();
>       const uint32_t mapwidth = map.get_width();
>       MapIndex const max_index = map.max_index();
> -     for (MapIndex i = 0; i < max_index; ++i)
> +     for (MapIndex i = 0; i < max_index; ++i) {
>               if (upcast(Building const, building, map[i].get_immovable())) {
>                       assert(mos.is_object_known(*building));
>  
> @@ -1190,52 +1167,32 @@
>                               fw.unsigned_8(is_stopped);
>                       }
>  
> -                     if (upcast(ConstructionSite const, constructionsite, 
> building))
> -                             write_constructionsite
> -                                     (*constructionsite,
> -                                      fw,
> -                                      ref_cast<Game, EditorGameBase>(egbase),
> -                                      mos);
> -                     else if (upcast(DismantleSite const, dms, building))
> -                             write_dismantlesite
> -                                     (*dms,
> -                                      fw,
> -                                      ref_cast<Game, EditorGameBase>(egbase),
> -                                      mos);
> -                     else if (upcast(Warehouse const, warehouse, building))
> -                             write_warehouse
> -                                     (*warehouse,
> -                                      fw,
> -                                      ref_cast<Game, EditorGameBase>(egbase),
> -                                      mos);
> -                     else if (upcast(ProductionSite const, productionsite, 
> building)) {
> -                             if (upcast(MilitarySite const, militarysite, 
> productionsite))
> -                                     write_militarysite
> -                                             (*militarysite,
> -                                              fw,
> -                                              ref_cast<Game, 
> EditorGameBase>(egbase),
> -                                              mos);
> -                             else if (upcast(TrainingSite const, 
> trainingsite, productionsite))
> -                                     write_trainingsite
> -                                             (*trainingsite,
> -                                              fw,
> -                                              ref_cast<Game, 
> EditorGameBase>(egbase),
> -                                              mos);
> -                             else
> -                                     write_productionsite
> -                                             (*productionsite,
> -                                              fw,
> -                                              ref_cast<Game, 
> EditorGameBase>(egbase),
> -                                              mos);
> +                     upcast(Game, game, &egbase);
> +
> +                     if (upcast(ConstructionSite const, constructionsite, 
> building)) {
> +                             write_constructionsite(*constructionsite, fw, 
> *game, mos);
> +                     } else if (upcast(DismantleSite const, dms, building)) {
> +                             write_dismantlesite(*dms, fw, *game, mos);
> +                     } else if (upcast(Warehouse const, warehouse, 
> building)) {
> +                             write_warehouse (*warehouse, fw, *game, mos);
> +                     } else if (upcast(ProductionSite const, productionsite, 
> building)) {
> +                             if (upcast(MilitarySite const, militarysite, 
> productionsite)) {
> +                                     write_militarysite(*militarysite, fw, 
> *game, mos);
> +                             }
> +                             else if (upcast(TrainingSite const, 
> trainingsite, productionsite)) {
> +                                     write_trainingsite(*trainingsite, fw, 
> *game, mos);
> +                             }
> +                             else {
> +                                     write_productionsite(*productionsite, 
> fw, *game, mos);
> +                             }
>                       } else {
>                               assert(false);
>                               //  type of building is not one of (or derived 
> from)
>                               //  {ConstructionSite, Warehouse, 
> ProductionSite}
>                       }
> -
>                       mos.mark_object_as_saved(*building);
>               }
> -
> +     }
>       fw.write(fs, "binary/building_data");
>  }
>  
> 
> === modified file 'src/map_io/map_elemental_packet.cc'
> --- src/map_io/map_elemental_packet.cc        2014-10-29 06:41:10 +0000
> +++ src/map_io/map_elemental_packet.cc        2014-11-29 08:14:12 +0000
> @@ -22,7 +22,6 @@
>  #include <boost/algorithm/string.hpp>
>  #include <boost/format.hpp>
>  
> -#include "base/deprecated.h"
>  #include "logic/editor_game_base.h"
>  #include "logic/game_data_error.h"
>  #include "logic/map.h"
> 
> === modified file 'src/map_io/map_flag_packet.cc'
> --- src/map_io/map_flag_packet.cc     2014-09-20 09:37:47 +0000
> +++ src/map_io/map_flag_packet.cc     2014-11-29 08:14:12 +0000
> @@ -106,12 +106,10 @@
>                                               //  packet. We always create 
> this, no matter what skip is
>                                               //  since we have to read the 
> data packets. We delete this
>                                               //  object later again, if it 
> is not wanted.
> +                                             upcast(Game, game, &egbase);
>                                               mol.register_object<Flag>
>                                                       (serial,
> -                                                      *new Flag
> -                                                             (ref_cast<Game, 
> EditorGameBase>(egbase),
> -                                                              
> egbase.player(owner),
> -                                                              fc));
> +                                                      *new Flag(*game, 
> egbase.player(owner), fc));
>                                       } catch (const WException & e) {
>                                               throw GameDataError
>                                                       ("%u (at (%i, %i), 
> owned by player %u): %s",
> 
> === modified file 'src/map_io/map_flagdata_packet.cc'
> --- src/map_io/map_flagdata_packet.cc 2014-09-20 09:37:47 +0000
> +++ src/map_io/map_flagdata_packet.cc 2014-11-29 08:14:12 +0000
> @@ -201,8 +201,8 @@
>                                                                               
>  0,
>                                                                               
>  Flag::flag_job_request_callback,
>                                                                               
>  wwWORKER);
> -                                                             f.request->read
> -                                                                     (fr, 
> ref_cast<Game, EditorGameBase>(egbase), mol);
> +                                                             upcast(Game, 
> game, &egbase);
> +                                                             
> f.request->read(fr, *game, mol);
>                                                       } else {
>                                                               f.request = 
> nullptr;
>                                                       }
> @@ -301,8 +301,8 @@
>                       for (const Flag::FlagJob& temp_job : flag_jobs) {
>                               if (temp_job.request) {
>                                       fw.unsigned_8(1);
> -                                     temp_job.request->write
> -                                             (fw, ref_cast<Game, 
> EditorGameBase>(egbase), mos);
> +                                     upcast(Game, game, &egbase);
> +                                     temp_job.request->write(fw, *game, mos);
>                               } else
>                                       fw.unsigned_8(0);
>  
> 
> === modified file 'src/map_io/map_object_saver.cc'
> --- src/map_io/map_object_saver.cc    2014-09-14 11:31:58 +0000
> +++ src/map_io/map_object_saver.cc    2014-11-29 08:14:12 +0000
> @@ -19,7 +19,6 @@
>  
>  #include "map_io/map_object_saver.h"
>  
> -#include "base/deprecated.h"
>  #include "base/wexception.h"
>  #include "economy/flag.h"
>  #include "economy/fleet.h"
> 
> === modified file 'src/map_io/map_port_spaces_packet.cc'
> --- src/map_io/map_port_spaces_packet.cc      2014-09-30 05:41:55 +0000
> +++ src/map_io/map_port_spaces_packet.cc      2014-11-29 08:14:12 +0000
> @@ -23,7 +23,6 @@
>  
>  #include <boost/algorithm/string.hpp>
>  
> -#include "base/deprecated.h"
>  #include "base/log.h"
>  #include "logic/editor_game_base.h"
>  #include "logic/game_data_error.h"
> 
> === modified file 'src/map_io/map_roaddata_packet.cc'
> --- src/map_io/map_roaddata_packet.cc 2014-09-20 09:37:47 +0000
> +++ src/map_io/map_roaddata_packet.cc 2014-11-29 08:14:12 +0000
> @@ -69,6 +69,7 @@
>                                       break;
>                               }
>                               try {
> +                                     upcast(Game, game, &egbase);
>                                       Road & road = mol.get<Road>(serial);
>                                       if (mol.is_object_loaded(road))
>                                               throw GameDataError("already 
> loaded");
> @@ -124,7 +125,7 @@
>  
>                                       //  Now that all rudimentary data is 
> set, init this road. Then
>                                       //  overwrite the initialization values.
> -                                     road._link_into_flags(ref_cast<Game, 
> EditorGameBase>(egbase));
> +                                     road._link_into_flags(*game);
>  
>                                       road.m_idle_index      = 
> fr.unsigned_32();
>  
> @@ -166,8 +167,8 @@
>                                                                       (road,
>                                                                        0,
>                                                                        
> Road::_request_carrier_callback,
> -                                                                      
> wwWORKER))
> -                                                     ->read(fr, 
> ref_cast<Game, EditorGameBase>(egbase), mol);
> +                                                                      
> wwWORKER))
> +                                                     ->read(fr, *game, mol);
>                                               } else {
>                                                       carrier_request = 
> nullptr;
>                                                       //log("No request in 
> this slot");
> @@ -190,13 +191,8 @@
>                                               } else {
>                                                       delete carrier_request;
>                                                       if (carrier) {
> -                                                             
> //carrier->set_location (0);
> -                                                             
> carrier->reset_tasks
> -                                                                     
> (ref_cast<Game,
> -                                                                      
> EditorGameBase>(egbase));
> -                                                             
> //carrier->send_signal
> -                                                             
> //(ref_cast<Game,
> -                                                             
> //EditorGameBase>(egbase), "location");
> +                                                             upcast(Game, 
> game, &egbase);
> +                                                             
> carrier->reset_tasks(*game);
>                                                       }
>                                               }
>                                       }
> @@ -275,8 +271,8 @@
>  
>                                       if (temp_slot.carrier_request) {
>                                               fw.unsigned_8(1);
> -                                             temp_slot.carrier_request->write
> -                                                     (fw, ref_cast<Game, 
> EditorGameBase>(egbase), mos);
> +                                             upcast(Game, game, &egbase);
> +                                             
> temp_slot.carrier_request->write(fw, *game, mos);
>                                       } else {
>                                               fw.unsigned_8(0);
>                                       }
> 
> === modified file 'src/network/CMakeLists.txt'
> --- src/network/CMakeLists.txt        2014-10-13 15:04:50 +0000
> +++ src/network/CMakeLists.txt        2014-11-29 08:14:12 +0000
> @@ -23,7 +23,6 @@
>    USES_SDL2_NET
>    DEPENDS
>      ai
> -    base_deprecated
>      base_exceptions
>      base_i18n
>      base_log
> 
> === modified file 'src/network/network_lan_promotion.cc'
> --- src/network/network_lan_promotion.cc      2014-09-20 09:37:47 +0000
> +++ src/network/network_lan_promotion.cc      2014-11-29 08:14:12 +0000
> @@ -22,7 +22,6 @@
>  #include <cstdio>
>  #include <cstring>
>  
> -#include "base/deprecated.h"
>  #include "base/log.h"
>  #include "base/macros.h"
>  #include "build_info.h"
> 
> === modified file 'src/scripting/CMakeLists.txt'
> --- src/scripting/CMakeLists.txt      2014-07-25 20:16:31 +0000
> +++ src/scripting/CMakeLists.txt      2014-11-29 08:14:12 +0000
> @@ -38,7 +38,6 @@
>      scripting.h
>    USES_BOOST_REGEX
>    DEPENDS
> -    base_deprecated
>      base_exceptions
>      base_i18n
>      base_log
> 
> === modified file 'src/scripting/lua_map.cc'
> --- src/scripting/lua_map.cc  2014-10-27 10:14:10 +0000
> +++ src/scripting/lua_map.cc  2014-11-29 08:14:12 +0000
> @@ -21,8 +21,8 @@
>  
>  #include <boost/format.hpp>
>  
> -#include "base/deprecated.h"
>  #include "base/log.h"
> +#include "base/macros.h"
>  #include "economy/wares_queue.h"
>  #include "graphic/graphic.h"
>  #include "logic/carrier.h"
> @@ -444,11 +444,10 @@
>                       lua_rawset(L, -3);
>               }
>       } else {
> -             const SoldierDescr& soldier_descr = ref_cast<SoldierDescr 
> const, WorkerDescr const>
> -                     
> (*tribe.get_worker_descr(tribe.worker_index("soldier")));
> +             upcast(SoldierDescr const, soldier_descr, 
> tribe.get_worker_descr(tribe.worker_index("soldier")));
>  
>               // Only return the number of those requested
> -             const SoldierMapDescr wanted = unbox_lua_soldier_description(L, 
> 2, soldier_descr);
> +             const SoldierMapDescr wanted = unbox_lua_soldier_description(L, 
> 2, *soldier_descr);
>               uint32_t rv = 0;
>               for (const Soldier* s : soldiers) {
>                       SoldierMapDescr sd
> @@ -469,10 +468,8 @@
>       assert(owner != nullptr);
>  
>       const TribeDescr& tribe = owner->tribe();
> -     const SoldierDescr& soldier_descr =  //  soldiers
> -             ref_cast<SoldierDescr const, WorkerDescr const>
> -                     
> (*tribe.get_worker_descr(tribe.worker_index("soldier")));
> -     SoldiersMap setpoints = m_parse_set_soldiers_arguments(L, 
> soldier_descr);
> +     upcast(SoldierDescr const, soldier_descr, 
> tribe.get_worker_descr(tribe.worker_index("soldier")));
> +     SoldiersMap setpoints = m_parse_set_soldiers_arguments(L, 
> *soldier_descr);
>  
>       // Get information about current soldiers
>       const std::vector<Soldier*> curs = sc->stationed_soldiers();
> @@ -517,12 +514,11 @@
>                       }
>               } else if (d > 0) {
>                       for (; d; --d) {
> -                             Soldier& soldier = ref_cast<Soldier, Worker>
> -                                     (soldier_descr.create(egbase, *owner, 
> nullptr, building_position));
> -                             soldier.set_level
> +                             upcast(Soldier, soldier, 
> &soldier_descr->create(egbase, *owner, nullptr, building_position));
> +                             soldier->set_level
>                                       (sp.first.hp, sp.first.at, sp.first.de, 
> sp.first.ev);
> -                             if (sc->incorporate_soldier(egbase, soldier)) {
> -                                     soldier.remove(egbase);
> +                             if (sc->incorporate_soldier(egbase, *soldier)) {
> +                                     soldier->remove(egbase);
>                                       report_error(L, "No space left for 
> soldier!");
>                               }
>                       }
> @@ -2586,13 +2582,13 @@
>       for (Path::StepVector::size_type i = 0; i < idle_index; ++i)
>               egbase.map().get_neighbour(idle_position, path[i], 
> &idle_position);
>  
> -     Carrier & carrier = ref_cast<Carrier, Worker>
> -             (wdes->create (egbase, r.owner(), &r, idle_position));
> -
> -     if (upcast(Game, game, &egbase))
> -             carrier.start_task_road(*game);
> -
> -     r.assign_carrier(carrier, 0);
> +     upcast(Carrier, carrier, &wdes->create(egbase, r.owner(), &r, 
> idle_position));
> +
> +     if (upcast(Game, game, &egbase)) {
> +             carrier->start_task_road(*game);
> +     }
> +
> +     r.assign_carrier(*carrier, 0);
>       return 0;
>  }
>  
> 
> === modified file 'src/sound/CMakeLists.txt'
> --- src/sound/CMakeLists.txt  2014-10-13 15:04:50 +0000
> +++ src/sound/CMakeLists.txt  2014-11-29 08:14:12 +0000
> @@ -10,7 +10,6 @@
>    USES_SDL2
>    USES_SDL2_MIXER
>    DEPENDS
> -    base_deprecated
>      base_i18n
>      base_log
>      graphic
> 
> === modified file 'src/sound/sound_handler.cc'
> --- src/sound/sound_handler.cc        2014-10-16 16:06:37 +0000
> +++ src/sound/sound_handler.cc        2014-11-29 08:14:12 +0000
> @@ -28,7 +28,6 @@
>  #include <windows.h>
>  #endif
>  
> -#include "base/deprecated.h"
>  #include "base/i18n.h"
>  #include "base/log.h"
>  #include "graphic/graphic.h"
> 
> === modified file 'src/ui_basic/CMakeLists.txt'
> --- src/ui_basic/CMakeLists.txt       2014-11-22 11:00:04 +0000
> +++ src/ui_basic/CMakeLists.txt       2014-11-29 08:14:12 +0000
> @@ -51,7 +51,6 @@
>    USES_BOOST_REGEX
>    USES_SDL2
>    DEPENDS
> -    base_deprecated
>      base_exceptions
>      base_geometry
>      base_i18n
> 
> === modified file 'src/ui_basic/listselect.cc'
> --- src/ui_basic/listselect.cc        2014-11-22 10:18:20 +0000
> +++ src/ui_basic/listselect.cc        2014-11-29 08:14:12 +0000
> @@ -23,7 +23,6 @@
>  
>  #include <boost/bind.hpp>
>  
> -#include "base/deprecated.h"
>  #include "base/log.h"
>  #include "graphic/font.h"
>  #include "graphic/font_handler.h"
> 
> === modified file 'src/ui_basic/progresswindow.cc'
> --- src/ui_basic/progresswindow.cc    2014-10-14 06:30:20 +0000
> +++ src/ui_basic/progresswindow.cc    2014-11-29 08:14:12 +0000
> @@ -23,7 +23,6 @@
>  #include <sys/time.h>
>  #endif
>  
> -#include "base/deprecated.h"
>  #include "base/i18n.h"
>  #include "graphic/font.h"
>  #include "graphic/font_handler.h"
> 
> === modified file 'src/ui_basic/spinbox.cc'
> --- src/ui_basic/spinbox.cc   2014-09-30 05:41:55 +0000
> +++ src/ui_basic/spinbox.cc   2014-11-29 08:14:12 +0000
> @@ -23,7 +23,6 @@
>  
>  #include <boost/format.hpp>
>  
> -#include "base/deprecated.h"
>  #include "base/i18n.h"
>  #include "base/wexception.h"
>  #include "ui_basic/button.h"
> 
> === modified file 'src/ui_basic/table.cc'
> --- src/ui_basic/table.cc     2014-11-22 10:18:20 +0000
> +++ src/ui_basic/table.cc     2014-11-29 08:14:12 +0000
> @@ -21,7 +21,6 @@
>  
>  #include <boost/bind.hpp>
>  
> -#include "base/deprecated.h"
>  #include "graphic/font.h"
>  #include "graphic/font_handler.h"
>  #include "graphic/font_handler1.h"
> 
> === modified file 'src/wui/CMakeLists.txt'
> --- src/wui/CMakeLists.txt    2014-10-13 15:04:50 +0000
> +++ src/wui/CMakeLists.txt    2014-11-29 08:14:12 +0000
> @@ -129,7 +129,6 @@
>      watchwindow.h
>    USES_SDL2
>    DEPENDS
> -    base_deprecated
>      base_exceptions
>      base_geometry
>      base_i18n
> 
> === modified file 'src/wui/actionconfirm.cc'
> --- src/wui/actionconfirm.cc  2014-11-13 08:25:45 +0000
> +++ src/wui/actionconfirm.cc  2014-11-29 08:14:12 +0000
> @@ -46,7 +46,8 @@
>                Widelands::Ship & ship);
>  
>       InteractivePlayer & iaplayer() const {
> -             return ref_cast<InteractivePlayer, UI::Panel>(*get_parent());
> +             upcast(InteractivePlayer, result, get_parent());
> +             return *result;
>       }
>  
>       virtual void think() = 0;
> 
> === modified file 'src/wui/building_statistics_menu.cc'
> --- src/wui/building_statistics_menu.cc       2014-10-28 14:57:52 +0000
> +++ src/wui/building_statistics_menu.cc       2014-11-29 08:14:12 +0000
> @@ -65,7 +65,8 @@
>  namespace Columns {enum {Name, Size, Prod, Owned, Build};}
>  
>  inline InteractivePlayer & BuildingStatisticsMenu::iplayer() const {
> -     return ref_cast<InteractivePlayer, UI::Panel>(*get_parent());
> +     upcast(InteractivePlayer, result, get_parent());
> +     return *result;
>  }
>  
>  BuildingStatisticsMenu::BuildingStatisticsMenu
> @@ -418,11 +419,10 @@
>                               ++nr_build;
>                       else {
>                               ++nr_owned;
> -                             if (productionsite)
> -                                     total_prod +=
> -                                             
> ref_cast<Widelands::ProductionSite, Widelands::BaseImmovable>
> -                                                     
> (*map[vec[l].pos].get_immovable())
> -                                             .get_statistics_percent();
> +                             if (productionsite) {
> +                                     upcast(Widelands::ProductionSite, 
> psite, map[vec[l].pos].get_immovable());
> +                                     total_prod += 
> psite->get_statistics_percent();
> +                             }
>                       }
>               }
>  
> 
> === modified file 'src/wui/buildingwindow.cc'
> --- src/wui/buildingwindow.cc 2014-11-24 07:25:21 +0000
> +++ src/wui/buildingwindow.cc 2014-11-29 08:14:12 +0000
> @@ -378,7 +378,8 @@
>                       igbase().game().send_player_bulldoze(m_building);
>       }
>       else {
> -             show_bulldoze_confirm(ref_cast<InteractivePlayer, 
> InteractiveGameBase>(igbase()), m_building);
> +             upcast(InteractivePlayer, iaplayer, &igbase());
> +             show_bulldoze_confirm(*iaplayer, m_building);
>       }
>  }
>  
> @@ -394,7 +395,8 @@
>                       igbase().game().send_player_dismantle(m_building);
>       }
>       else {
> -             show_dismantle_confirm(ref_cast<InteractivePlayer, 
> InteractiveGameBase>(igbase()), m_building);
> +             upcast(InteractivePlayer, iaplayer, &igbase());
> +             show_dismantle_confirm(*iaplayer, m_building);
>       }
>  }
>  
> @@ -437,10 +439,8 @@
>                       
> igbase().game().send_player_enhance_building(m_building, id);
>       }
>       else {
> -             show_enhance_confirm
> -                     (ref_cast<InteractivePlayer, 
> InteractiveGameBase>(igbase()),
> -                      m_building,
> -                      id);
> +             upcast(InteractivePlayer, iaplayer, &igbase());
> +             show_enhance_confirm(*iaplayer, m_building, id);
>       }
>  }
>  
> 
> === modified file 'src/wui/buildingwindow.h'
> --- src/wui/buildingwindow.h  2014-09-10 14:48:40 +0000
> +++ src/wui/buildingwindow.h  2014-11-29 08:14:12 +0000
> @@ -47,7 +47,8 @@
>       Widelands::Building & building() {return m_building;}
>  
>       InteractiveGameBase & igbase() const {
> -             return ref_cast<InteractiveGameBase, UI::Panel>(*get_parent());
> +             upcast(InteractiveGameBase, result, get_parent());
> +             return *result;
>       }
>  
>       void draw(RenderTarget &) override;
> 
> === modified file 'src/wui/constructionsitewindow.cc'
> --- src/wui/constructionsitewindow.cc 2014-09-10 14:48:40 +0000
> +++ src/wui/constructionsitewindow.cc 2014-11-29 08:14:12 +0000
> @@ -84,11 +84,8 @@
>  void ConstructionSiteWindow::think()
>  {
>       BuildingWindow::think();
> -
> -     const Widelands::ConstructionSite & cs =
> -             ref_cast<Widelands::ConstructionSite, 
> Widelands::Building>(building());
> -
> -     m_progress->set_state(cs.get_built_per64k());
> +     upcast(Widelands::ConstructionSite, cs, &building());
> +     m_progress->set_state(cs->get_built_per64k());
>  }
>  
>  
> 
> === modified file 'src/wui/dismantlesitewindow.cc'
> --- src/wui/dismantlesitewindow.cc    2014-09-10 14:48:40 +0000
> +++ src/wui/dismantlesitewindow.cc    2014-11-29 08:14:12 +0000
> @@ -78,11 +78,8 @@
>  void DismantleSiteWindow::think()
>  {
>       BuildingWindow::think();
> -
> -     const Widelands::DismantleSite & ds =
> -             ref_cast<Widelands::DismantleSite, 
> Widelands::Building>(building());
> -
> -     m_progress->set_state(ds.get_built_per64k());
> +     upcast(Widelands::DismantleSite, ds, &building());
> +     m_progress->set_state(ds->get_built_per64k());
>  }
>  
>  
> 
> === modified file 'src/wui/encyclopedia_window.cc'
> --- src/wui/encyclopedia_window.cc    2014-10-28 14:57:52 +0000
> +++ src/wui/encyclopedia_window.cc    2014-11-29 08:14:12 +0000
> @@ -51,7 +51,8 @@
>  using namespace Widelands;
>  
>  inline InteractivePlayer & EncyclopediaWindow::iaplayer() const {
> -     return ref_cast<InteractivePlayer, UI::Panel>(*get_parent());
> +     upcast(InteractivePlayer, result, get_parent());
> +     return *result;
>  }
>  
>  
> @@ -141,10 +142,8 @@
>       condTable.clear();
>       const TribeDescr & tribe = iaplayer().player().tribe();
>  
> -     const ProductionSiteDescr::Programs & programs =
> -             ref_cast<ProductionSiteDescr const, BuildingDescr const>
> -                     (*tribe.get_building_descr(prodSites.get_selected()))
> -             .programs();
> +     upcast(ProductionSiteDescr const, descr, 
> tribe.get_building_descr(prodSites.get_selected()));
> +     const ProductionSiteDescr::Programs & programs = descr->programs();
>  
>       //  TODO(unknown): This needs reworking. A program can indeed produce 
> iron even if
>       //  the program name is not any of produce_iron, smelt_iron, prog_iron
> 
> === modified file 'src/wui/fieldaction.cc'
> --- src/wui/fieldaction.cc    2014-11-13 08:25:45 +0000
> +++ src/wui/fieldaction.cc    2014-11-29 08:14:12 +0000
> @@ -177,7 +177,8 @@
>       ~FieldActionWindow();
>  
>       InteractiveBase & ibase() {
> -             return ref_cast<InteractiveBase, UI::Panel>(*get_parent());
> +             upcast(InteractiveBase, result, get_parent());
> +             return *result;
>       }
>  
>       void think() override;
> @@ -656,8 +657,8 @@
>  */
>  void FieldActionWindow::act_watch()
>  {
> -     show_watch_window
> -             (ref_cast<InteractiveGameBase, InteractiveBase>(ibase()), 
> m_node);
> +     upcast(InteractiveGameBase, igbase, &ibase());
> +     show_watch_window(*igbase, m_node);
>       okdialog();
>  }
>  
> @@ -710,9 +711,10 @@
>  
>       if (ibase().is_building_road())
>               ibase().finish_build_road();
> -     else if (game)
> -             ref_cast<InteractivePlayer, InteractiveBase>(ibase())
> -                     .set_flag_to_connect(m_node);
> +     else if (game) {
> +             upcast(InteractivePlayer, iaplayer, &ibase());
> +             iaplayer->set_flag_to_connect(m_node);
> +     }
>  
>       okdialog();
>  }
> @@ -734,22 +736,22 @@
>  {
>       okdialog();
>       Widelands::EditorGameBase & egbase = ibase().egbase();
> +     upcast(Game, game, &egbase);
> +     upcast(InteractivePlayer, iaplayer, &ibase());
> +
>       if (upcast(Widelands::Flag, flag, m_node.field->get_immovable())) {
>               if (Building * const building = flag->get_building()) {
>                       if (building->get_playercaps() & 
> Building::PCap_Bulldoze) {
>                               if (get_key_state(SDL_SCANCODE_LCTRL) || 
> get_key_state(SDL_SCANCODE_RCTRL)) {
> -                                     ref_cast<Game, 
> EditorGameBase>(egbase).send_player_bulldoze
> +                                     game->send_player_bulldoze
>                                               (*flag, 
> get_key_state(SDL_SCANCODE_LCTRL) || get_key_state(SDL_SCANCODE_RCTRL));
>                               }
>                               else {
> -                                     show_bulldoze_confirm
> -                                             (ref_cast<InteractivePlayer, 
> InteractiveBase>(ibase()),
> -                                              *building,
> -                                              flag);
> +                                     show_bulldoze_confirm(*iaplayer, 
> *building, flag);
>                               }
>                       }
>               } else {
> -                     ref_cast<Game, 
> EditorGameBase>(egbase).send_player_bulldoze
> +                     game->send_player_bulldoze
>                                       (*flag, 
> get_key_state(SDL_SCANCODE_LCTRL) || get_key_state(SDL_SCANCODE_RCTRL));
>               }
>       }
> @@ -792,9 +794,11 @@
>  void FieldActionWindow::act_removeroad()
>  {
>       Widelands::EditorGameBase & egbase = ibase().egbase();
> -     if (upcast(Widelands::Road, road, egbase.map().get_immovable(m_node)))
> -             ref_cast<Game, EditorGameBase>(egbase).send_player_bulldoze
> +     if (upcast(Widelands::Road, road, egbase.map().get_immovable(m_node))) {
> +             upcast(Game, game, &ibase().egbase());
> +             game->send_player_bulldoze
>                       (*road, get_key_state(SDL_SCANCODE_LCTRL) || 
> get_key_state(SDL_SCANCODE_RCTRL));
> +     }
>       okdialog();
>  }
>  
> @@ -806,15 +810,12 @@
>  */
>  void FieldActionWindow::act_build(Widelands::BuildingIndex idx)
>  {
> -     Widelands::Game & game = ref_cast<Game, 
> EditorGameBase>(ibase().egbase());
> -     game.send_player_build
> -             (ref_cast<InteractivePlayer, 
> InteractiveBase>(ibase()).player_number(),
> -              m_node,
> -              Widelands::BuildingIndex(idx));
> -     ibase().reference_player_tribe
> -             (m_plr->player_number(), &m_plr->tribe());
> -     ref_cast<InteractivePlayer, 
> InteractiveBase>(ibase()).set_flag_to_connect
> -             (game.map().br_n(m_node));
> +     upcast(Game, game, &ibase().egbase());
> +     upcast(InteractivePlayer, iaplayer, &ibase());
> +
> +     game->send_player_build(iaplayer->player_number(), m_node, 
> Widelands::BuildingIndex(idx));
> +     ibase().reference_player_tribe(m_plr->player_number(), &m_plr->tribe());
> +     iaplayer->set_flag_to_connect(game->map().br_n(m_node));
>       okdialog();
>  }
>  
> @@ -848,10 +849,10 @@
>  */
>  void FieldActionWindow::act_geologist()
>  {
> -     Game & game = ref_cast<Game, EditorGameBase>(ibase().egbase());
> -     if (upcast(Widelands::Flag, flag, game.map().get_immovable(m_node)))
> -             game.send_player_flagaction (*flag);
> -
> +     upcast(Game, game, &ibase().egbase());
> +     if (upcast(Widelands::Flag, flag, game->map().get_immovable(m_node))) {
> +             game->send_player_flagaction (*flag);
> +     }
>       okdialog();
>  }
>  
> @@ -863,15 +864,16 @@
>   */
>  void FieldActionWindow::act_attack ()
>  {
> -     Game & game = ref_cast<Game, EditorGameBase>(ibase().egbase());
> -
>       assert(m_attack_box);
> -     if (upcast(Building, building, game.map().get_immovable(m_node)))
> -             if (m_attack_box->soldiers() > 0)
> -                     game.send_player_enemyflagaction(
> +     upcast(Game, game, &ibase().egbase());
> +     if (upcast(Building, building, game->map().get_immovable(m_node)))
> +             if (m_attack_box->soldiers() > 0) {
> +                     upcast(InteractivePlayer const, iaplayer, &ibase());
> +                     game->send_player_enemyflagaction(
>                          building->base_flag(),
> -                        ref_cast<const InteractivePlayer, const 
> InteractiveBase>(ibase()).player_number(),
> +                             iaplayer->player_number(),
>                          m_attack_box->soldiers() /*  number of soldiers */);
> +             }
>       okdialog();
>  }
>  
> @@ -933,8 +935,8 @@
>                       finish = true;
>               else if (dynamic_cast<const Widelands::Road *>(i))
>                       if (player->get_buildcaps(target) & 
> Widelands::BUILDCAPS_FLAG) {
> -                             ref_cast<Game, EditorGameBase>(player->egbase())
> -                                     
> .send_player_build_flag(player->player_number(), target);
> +                             upcast(Game, game, &player->egbase());
> +                             
> game->send_player_build_flag(player->player_number(), target);
>                               finish = true;
>                       }
>               if (finish)
> 
> === modified file 'src/wui/game_debug_ui.cc'
> --- src/wui/game_debug_ui.cc  2014-10-27 10:14:10 +0000
> +++ src/wui/game_debug_ui.cc  2014-11-29 08:14:12 +0000
> @@ -133,7 +133,8 @@
>       MapObjectDebugWindow(InteractiveBase & parent, Widelands::MapObject &);
>  
>       InteractiveBase & ibase() {
> -             return ref_cast<InteractiveBase, UI::Panel>(*get_parent());
> +             upcast(InteractiveBase, result, get_parent());
> +             return *result;
>       }
>  
>       void think() override;
> @@ -212,7 +213,8 @@
>       FieldDebugWindow(InteractiveBase & parent, Widelands::Coords);
>  
>       InteractiveBase & ibase() {
> -             return ref_cast<InteractiveBase, UI::Panel>(*get_parent());
> +             upcast(InteractiveBase, result, get_parent());
> +             return *result;
>       }
>  
>       void think() override;
> @@ -273,9 +275,7 @@
>       UI::Window::think();
>  
>       // Select information about the field itself
> -     const Widelands::EditorGameBase & egbase =
> -             ref_cast<InteractiveBase const, UI::Panel const>(*get_parent())
> -             .egbase();
> +     const Widelands::EditorGameBase & egbase = ibase().egbase();
>       {
>               Widelands::PlayerNumber const owner = 
> m_coords.field->get_owned_by();
>               str += (boost::format("(%i, %i)\nheight: %u\nowner: %u\n")
> 
> === modified file 'src/wui/game_main_menu_save_game.cc'
> --- src/wui/game_main_menu_save_game.cc       2014-10-27 10:31:04 +0000
> +++ src/wui/game_main_menu_save_game.cc       2014-11-29 08:14:12 +0000
> @@ -35,7 +35,8 @@
>  #include "wui/interactive_gamebase.h"
>  
>  InteractiveGameBase & GameMainMenuSaveGame::igbase() {
> -     return ref_cast<InteractiveGameBase, UI::Panel>(*get_parent());
> +     upcast(InteractiveGameBase, result, get_parent());
> +     return *result;
>  }
>  
>  #define WINDOW_WIDTH                                                        
> 440
> @@ -262,7 +263,8 @@
>       {}
>  
>       GameMainMenuSaveGame & menu_save_game() {
> -             return ref_cast<GameMainMenuSaveGame, UI::Panel>(*get_parent());
> +             upcast(GameMainMenuSaveGame, result, get_parent());
> +             return *result;
>       }
>  
>  
> @@ -328,7 +330,8 @@
>       void pressed_yes() override
>       {
>               g_fs->fs_unlink(m_filename);
> -             ref_cast<GameMainMenuSaveGame, 
> UI::Panel>(*get_parent()).fill_list();
> +             upcast(GameMainMenuSaveGame, panel, get_parent());
> +             panel->fill_list();
>               die();
>       }
>  
> 
> === modified file 'src/wui/game_main_menu_save_game.h'
> --- src/wui/game_main_menu_save_game.h        2014-09-10 13:03:40 +0000
> +++ src/wui/game_main_menu_save_game.h        2014-11-29 08:14:12 +0000
> @@ -20,7 +20,6 @@
>  #ifndef WL_WUI_GAME_MAIN_MENU_SAVE_GAME_H
>  #define WL_WUI_GAME_MAIN_MENU_SAVE_GAME_H
>  
> -#include "base/deprecated.h"
>  #include "base/i18n.h"
>  #include "ui_basic/button.h"
>  #include "ui_basic/editbox.h"
> 
> === modified file 'src/wui/game_message_menu.cc'
> --- src/wui/game_message_menu.cc      2014-11-22 10:18:20 +0000
> +++ src/wui/game_message_menu.cc      2014-11-29 08:14:12 +0000
> @@ -21,7 +21,7 @@
>  
>  #include <boost/bind.hpp>
>  
> -#include "base/deprecated.h"
> +#include "base/macros.h"
>  #include "base/time_string.h"
>  #include "graphic/graphic.h"
>  #include "logic/instances.h"
> @@ -35,7 +35,8 @@
>  using Widelands::MessageQueue;
>  
>  inline InteractivePlayer & GameMessageMenu::iplayer() const {
> -     return ref_cast<InteractivePlayer, UI::Panel>(*get_parent());
> +     upcast(InteractivePlayer, result, get_parent());
> +     return *result;
>  }
>  
>  
> 
> === modified file 'src/wui/game_message_menu.h'
> --- src/wui/game_message_menu.h       2014-10-14 06:30:20 +0000
> +++ src/wui/game_message_menu.h       2014-11-29 08:14:12 +0000
> @@ -20,7 +20,6 @@
>  #ifndef WL_WUI_GAME_MESSAGE_MENU_H
>  #define WL_WUI_GAME_MESSAGE_MENU_H
>  
> -#include "base/deprecated.h"
>  #include "base/i18n.h"
>  #include "logic/message_queue.h"
>  #include "ui_basic/button.h"
> 
> === modified file 'src/wui/game_objectives_menu.cc'
> --- src/wui/game_objectives_menu.cc   2014-10-27 10:31:04 +0000
> +++ src/wui/game_objectives_menu.cc   2014-11-29 08:14:12 +0000
> @@ -31,7 +31,8 @@
>  
>  
>  inline InteractivePlayer & GameObjectivesMenu::iplayer() const {
> -     return ref_cast<InteractivePlayer, UI::Panel>(*get_parent());
> +     upcast(InteractivePlayer, result, get_parent());
> +     return *result;
>  }
>  
>  
> 
> === modified file 'src/wui/general_statistics_menu.cc'
> --- src/wui/general_statistics_menu.cc        2014-11-22 11:32:06 +0000
> +++ src/wui/general_statistics_menu.cc        2014-11-29 08:14:12 +0000
> @@ -284,7 +284,8 @@
>  }
>  
>  GeneralStatisticsMenu::~GeneralStatisticsMenu() {
> -     Game & game = ref_cast<InteractiveGameBase, 
> UI::Panel>(*get_parent()).game();
> +     upcast(InteractiveGameBase, igbase, get_parent());
> +     Game & game = igbase->game();
>       if (game.is_loaded()) {
>               // Save informations for recreation, if window is reopened
>               m_my_registry->selected_information = m_selected_information;
> @@ -320,9 +321,8 @@
>   * The radiogroup has changed
>   */
>  void GeneralStatisticsMenu::radiogroup_changed(int32_t const id) {
> -     size_t const statistics_size =
> -             ref_cast<InteractiveGameBase, UI::Panel>(*get_parent()).game()
> -             .get_general_statistics().size();
> +     upcast(InteractiveGameBase, igbase, get_parent());
> +     size_t const statistics_size = 
> igbase->game().get_general_statistics().size();
>       for (uint32_t i = 0; i < statistics_size; ++i)
>               if (m_cbs[i]) {
>                       m_plot.show_plot
> 
> === modified file 'src/wui/interactive_base.cc'
> --- src/wui/interactive_base.cc       2014-11-27 11:15:34 +0000
> +++ src/wui/interactive_base.cc       2014-11-29 08:14:12 +0000
> @@ -446,7 +446,8 @@
>                       ((fps_format %
>                         (1000.0 / m_frametime) % (1000.0 / (m_avg_usframetime 
> / 1000)))
>                        .str(), UI_FONT_SIZE_SMALL);
> -             dst.blit(Point(5, (is_game) ? 25 : 5), 
> UI::g_fh1->render(fps_text), BlendMode::UseAlpha, UI::Align_Left);
> +             dst.blit(Point(5, (is_game) ? 25 : 5),
> +                                     UI::g_fh1->render(fps_text), 
> BlendMode::UseAlpha, UI::Align_Left);
>       }
>  }
>  
> 
> === modified file 'src/wui/interactive_gamebase.cc'
> --- src/wui/interactive_gamebase.cc   2014-09-20 09:37:47 +0000
> +++ src/wui/interactive_gamebase.cc   2014-11-29 08:14:12 +0000
> @@ -53,7 +53,8 @@
>  
>  Widelands::Game & InteractiveGameBase::    game() const
>  {
> -     return ref_cast<Widelands::Game, Widelands::EditorGameBase>(egbase());
> +     upcast(Widelands::Game, result, &egbase());
> +     return *result;
>  }
>  
>  void InteractiveGameBase::set_chat_provider(ChatProvider & chat)
> 
> === modified file 'src/wui/interactive_player.cc'
> --- src/wui/interactive_player.cc     2014-11-23 14:34:38 +0000
> +++ src/wui/interactive_player.cc     2014-11-29 08:14:12 +0000
> @@ -304,8 +304,8 @@
>       (Widelands::MessageId const id, const Widelands::Message & message)
>  {
>       m_message_menu.create();
> -     ref_cast<GameMessageMenu, UI::UniqueWindow>(*m_message_menu.window)
> -     .show_new_message(id, message);
> +     upcast(GameMessageMenu, menu, m_message_menu.window);
> +     menu->show_new_message(id, message);
>  }
>  
>  
> @@ -470,10 +470,9 @@
>               for (uint16_t x = 0; x < extent.w; ++x)
>                       overlay_manager.recalc_field_overlays
>                               (map.get_fcoords(Widelands::Coords(x, y)));
> -     if
> -             (UI::UniqueWindow * const building_statistics_window =
> -                     m_mainm_windows.building_stats.window)
> -             ref_cast<BuildingStatisticsMenu, UI::UniqueWindow>
> -                     (*building_statistics_window)
> -                     .update();
> +     if (UI::UniqueWindow * const building_statistics_window =
> +              m_mainm_windows.building_stats.window) {
> +             upcast(BuildingStatisticsMenu, menu, 
> building_statistics_window);
> +             menu->update();
> +     }
>  }
> 
> === modified file 'src/wui/interactive_spectator.cc'
> --- src/wui/interactive_spectator.cc  2014-11-23 14:34:38 +0000
> +++ src/wui/interactive_spectator.cc  2014-11-29 08:14:12 +0000
> @@ -275,8 +275,8 @@
>                       if (!m_chat.window)
>                               GameChatMenu::create_chat_console(this, m_chat, 
> *m_chatProvider);
>  
> -                     ref_cast<GameChatMenu, UI::UniqueWindow>(*m_chat.window)
> -                             .enter_chat_message();
> +                     // NOCOM(#gunchleoc): Compiler did not like upcast. Is 
> dynamic_cast OK?

Yes, I think it is preferable in all places where you are sure about what you 
are casting into. dynamic_cast is a code smell in the same sense that typeid is 
- it shows that your design is not quite right if you have to switch on types 
at runtime. But this is only about getting rid of our own invented stuff.

> +                     
> dynamic_cast<GameChatMenu*>(m_chat.window)->enter_chat_message();
>                       return true;
>  
>               default:
> 
> === modified file 'src/wui/militarysitewindow.cc'
> --- src/wui/militarysitewindow.cc     2014-09-10 13:03:40 +0000
> +++ src/wui/militarysitewindow.cc     2014-11-29 08:14:12 +0000
> @@ -38,7 +38,8 @@
>                UI::Window *       & registry);
>  
>       MilitarySite & militarysite() {
> -             return ref_cast<MilitarySite, Widelands::Building>(building());
> +             upcast(MilitarySite, result, &building());
> +             return *result;
>       }
>  
>  protected:
> 
> === modified file 'src/wui/minimap.cc'
> --- src/wui/minimap.cc        2014-11-24 07:10:03 +0000
> +++ src/wui/minimap.cc        2014-11-29 08:14:12 +0000
> @@ -98,7 +98,8 @@
>  
>       m_ibase.egbase().map().normalize_coords(c);
>  
> -     ref_cast<MiniMap, UI::Panel>(*get_parent()).warpview(c.x * 
> TRIANGLE_WIDTH, c.y * TRIANGLE_HEIGHT);
> +     upcast(MiniMap, minimap, get_parent());
> +     minimap->warpview(c.x * TRIANGLE_WIDTH, c.y * TRIANGLE_HEIGHT);
>  
>       return true;
>  }
> 
> === modified file 'src/wui/productionsitewindow.h'
> --- src/wui/productionsitewindow.h    2014-09-10 13:03:40 +0000
> +++ src/wui/productionsitewindow.h    2014-11-29 08:14:12 +0000
> @@ -31,7 +31,8 @@
>                UI::Window *         & registry);
>  
>       Widelands::ProductionSite & productionsite() {
> -             return ref_cast<Widelands::ProductionSite, 
> Widelands::Building>(building());
> +             upcast(Widelands::ProductionSite, result, &building());
> +             return *result;
>       }
>       void update_worker_table();
>  protected:
> 
> === modified file 'src/wui/shipwindow.cc'
> --- src/wui/shipwindow.cc     2014-11-22 10:18:20 +0000
> +++ src/wui/shipwindow.cc     2014-11-29 08:14:12 +0000
> @@ -295,7 +295,8 @@
>               m_igbase.game().send_player_sink_ship(m_ship);
>       }
>       else {
> -             show_ship_sink_confirm(ref_cast<InteractivePlayer, 
> InteractiveGameBase>(m_igbase), m_ship);
> +             upcast(InteractivePlayer, iaplayer, &m_igbase);
> +             show_ship_sink_confirm(*iaplayer, m_ship);
>       }
>  }
>  
> @@ -306,8 +307,8 @@
>               m_igbase.game().send_player_cancel_expedition_ship(m_ship);
>       }
>       else {
> -             show_ship_cancel_expedition_confirm
> -                     (ref_cast<InteractivePlayer, 
> InteractiveGameBase>(m_igbase), m_ship);
> +             upcast(InteractivePlayer, iaplayer, &m_igbase);
> +             show_ship_cancel_expedition_confirm(*iaplayer, m_ship);
>       }
>  }
>  
> 
> === modified file 'src/wui/soldierlist.cc'
> --- src/wui/soldierlist.cc    2014-11-22 10:18:20 +0000
> +++ src/wui/soldierlist.cc    2014-11-29 08:14:12 +0000
> @@ -22,7 +22,6 @@
>  #include <boost/bind.hpp>
>  #include <boost/format.hpp>
>  
> -#include "base/deprecated.h"
>  #include "base/macros.h"
>  #include "graphic/font.h"
>  #include "graphic/graphic.h"
> 
> === modified file 'src/wui/trainingsitewindow.cc'
> --- src/wui/trainingsitewindow.cc     2014-09-10 13:03:40 +0000
> +++ src/wui/trainingsitewindow.cc     2014-11-29 08:14:12 +0000
> @@ -37,7 +37,8 @@
>               (InteractiveGameBase & parent, TrainingSite &, UI::Window * & 
> registry);
>  
>       TrainingSite & trainingsite() {
> -             return ref_cast<TrainingSite, Widelands::Building>(building());
> +             upcast(TrainingSite, result, &building());
> +             return *result;
>       }
>  
>  protected:
> 
> === modified file 'src/wui/transport_ui.cc'
> --- src/wui/transport_ui.cc   2014-11-22 11:32:06 +0000
> +++ src/wui/transport_ui.cc   2014-11-29 08:14:12 +0000
> @@ -159,10 +159,10 @@
>                                               
> m_economy.ware_target_quantity(id);
>                                       if (1 < tq.permanent) {
>                                               Widelands::Player & player = 
> m_economy.owner();
> -                                             Game & game = ref_cast<Game, 
> EditorGameBase>(player.egbase());
> -                                             game.send_player_command
> +                                             upcast(Game, game, 
> &player.egbase());
> +                                             game->send_player_command
>                                                       (*new 
> Widelands::CmdSetWareTargetQuantity
> -                                                             
> (game.get_gametime(), player.player_number(),
> +                                                             
> (game->get_gametime(), player.player_number(),
>                                                                
> player.get_economy_number(&m_economy), id,
>                                                                tq.permanent - 
> 1));
>                                       }
> @@ -181,10 +181,10 @@
>                                       const Economy::TargetQuantity & tq =
>                                               
> m_economy.ware_target_quantity(id);
>                                       Widelands::Player & player = 
> m_economy.owner();
> -                                     Game & game = ref_cast<Game, 
> EditorGameBase>(player.egbase());
> -                                     game.send_player_command
> +                                     upcast(Game, game, &player.egbase());
> +                                     game->send_player_command
>                                               (*new 
> Widelands::CmdSetWareTargetQuantity
> -                                                     (game.get_gametime(), 
> player.player_number(),
> +                                                     (game->get_gametime(), 
> player.player_number(),
>                                                        
> player.get_economy_number(&m_economy), id,
>                                                        tq.permanent + 1));
>                               }
> @@ -200,10 +200,10 @@
>                       {
>                               if (m_display.ware_selected(id)) {
>                                       Widelands::Player & player = 
> m_economy.owner();
> -                                     Game & game = ref_cast<Game, 
> EditorGameBase>(player.egbase());
> -                                     game.send_player_command
> +                                     upcast(Game, game, &player.egbase());
> +                                     game->send_player_command
>                                               (*new 
> Widelands::CmdResetWareTargetQuantity
> -                                                     (game.get_gametime(), 
> player.player_number(),
> +                                                     (game->get_gametime(), 
> player.player_number(),
>                                                        
> player.get_economy_number(&m_economy), id));
>                               }
>                       }
> @@ -256,10 +256,10 @@
>                                               
> m_economy.worker_target_quantity(id);
>                                       if (1 < tq.permanent) {
>                                               Widelands::Player & player = 
> m_economy.owner();
> -                                             Game & game = ref_cast<Game, 
> EditorGameBase>(player.egbase());
> -                                             game.send_player_command
> +                                             upcast(Game, game, 
> &player.egbase());
> +                                             game->send_player_command
>                                                       (*new 
> Widelands::CmdSetWorkerTargetQuantity
> -                                                             
> (game.get_gametime(), player.player_number(),
> +                                                             
> (game->get_gametime(), player.player_number(),
>                                                                
> player.get_economy_number(&m_economy), id,
>                                                                tq.permanent - 
> 1));
>                                       }
> @@ -278,10 +278,10 @@
>                                       const Economy::TargetQuantity & tq =
>                                               
> m_economy.worker_target_quantity(id);
>                                       Widelands::Player & player = 
> m_economy.owner();
> -                                     Game & game = ref_cast<Game, 
> EditorGameBase>(player.egbase());
> -                                     game.send_player_command
> +                                     upcast(Game, game, &player.egbase());
> +                                     game->send_player_command
>                                               (*new 
> Widelands::CmdSetWorkerTargetQuantity
> -                                                     (game.get_gametime(), 
> player.player_number(),
> +                                                     (game->get_gametime(), 
> player.player_number(),
>                                                        
> player.get_economy_number(&m_economy), id,
>                                                        tq.permanent + 1));
>                               }
> @@ -296,10 +296,10 @@
>                       {
>                               if (m_display.ware_selected(id)) {
>                                       Widelands::Player & player = 
> m_economy.owner();
> -                                     Game & game = ref_cast<Game, 
> EditorGameBase>(player.egbase());
> -                                     game.send_player_command
> +                                     upcast(Game, game, &player.egbase());
> +                                     game->send_player_command
>                                               (*new 
> Widelands::CmdResetWorkerTargetQuantity
> -                                                     (game.get_gametime(), 
> player.player_number(),
> +                                                     (game->get_gametime(), 
> player.player_number(),
>                                                        
> player.get_economy_number(&m_economy), id));
>                               }
>                       }
> @@ -313,11 +313,10 @@
>  // users can register for change updates. The registry should be
>  // moved to InteractivePlayer or some other UI component.
>  void Economy::show_options_window() {
> -     if (m_optionswindow_registry.window)
> +     if (m_optionswindow_registry.window) {
>               m_optionswindow_registry.window->move_to_top();
> -     else
> -             new EconomyOptionsWindow
> -                     (ref_cast<InteractiveGameBase, InteractiveBase>
> -                             (*owner().egbase().get_ibase()),
> -                      *this);
> +     } else {
> +             upcast(InteractiveGameBase, igbase, 
> owner().egbase().get_ibase());
> +             new EconomyOptionsWindow(*igbase, *this);
> +     }
>  }
> 
> === modified file 'src/wui/warehousewindow.cc'
> --- src/wui/warehousewindow.cc        2014-09-10 13:03:40 +0000
> +++ src/wui/warehousewindow.cc        2014-11-29 08:14:12 +0000
> @@ -176,7 +176,8 @@
>               (InteractiveGameBase & parent, Warehouse &, UI::Window * & 
> registry);
>  
>       Warehouse & warehouse() {
> -             return ref_cast<Warehouse, Widelands::Building>(building());
> +             upcast(Warehouse, result, &building());
> +             return *result;
>       }
>  };
>  
> 
> === modified file 'src/wui/watchwindow.cc'
> --- src/wui/watchwindow.cc    2014-11-22 11:32:06 +0000
> +++ src/wui/watchwindow.cc    2014-11-29 08:14:12 +0000
> @@ -56,7 +56,8 @@
>       ~WatchWindow();
>  
>       Widelands::Game & game() const {
> -             return ref_cast<InteractiveGameBase, 
> UI::Panel>(*get_parent()).game();
> +             upcast(InteractiveGameBase, igbase, get_parent());
> +             return igbase->game();
>       }
>  
>       boost::signals2::signal<void (Point)> warp_mainview;
> 


-- 
https://code.launchpad.net/~widelands-dev/widelands/delete_deprecated/+merge/243174
Your team Widelands Developers is subscribed to branch 
lp:~widelands-dev/widelands/delete_deprecated.

_______________________________________________
Mailing list: https://launchpad.net/~widelands-dev
Post to     : widelands-dev@lists.launchpad.net
Unsubscribe : https://launchpad.net/~widelands-dev
More help   : https://help.launchpad.net/ListHelp

Reply via email to