summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--depends/protobuf/CMakeLists.txt4
-rw-r--r--library/CMakeLists.txt2
-rw-r--r--library/include/modules/World.h11
-rw-r--r--library/modules/Gui.cpp23
-rw-r--r--library/modules/Windows.cpp6
-rw-r--r--library/modules/World.cpp45
-rw-r--r--plugins/autolabor.cpp2
-rw-r--r--plugins/fastdwarf.cpp2
-rw-r--r--plugins/weather.cpp21
9 files changed, 54 insertions, 62 deletions
diff --git a/depends/protobuf/CMakeLists.txt b/depends/protobuf/CMakeLists.txt
index dddefb06..570c77b1 100644
--- a/depends/protobuf/CMakeLists.txt
+++ b/depends/protobuf/CMakeLists.txt
@@ -200,7 +200,9 @@ google/protobuf/compiler/zip_writer.cc
LIST(APPEND LIBPROTOBUF_FULL_SRCS ${LIBPROTOBUF_LITE_SRCS})
-SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -Wno-sign-compare")
+IF(CMAKE_COMPILER_IS_GNUCC)
+ SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -Wno-sign-compare")
+ENDIF()
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR})
SET(PROTOBUF_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR})
diff --git a/library/CMakeLists.txt b/library/CMakeLists.txt
index 16954727..bcb453a9 100644
--- a/library/CMakeLists.txt
+++ b/library/CMakeLists.txt
@@ -205,6 +205,8 @@ IF(UNIX)
SET_SOURCE_FILES_PROPERTIES(DataStatics.cpp DataStaticsCtor.cpp DataStaticsFields.cpp
PROPERTIES COMPILE_FLAGS "-g0 -O1")
ELSE(WIN32)
+ SET_SOURCE_FILES_PROPERTIES(DataStatics.cpp DataStaticsCtor.cpp DataStaticsFields.cpp
+ PROPERTIES COMPILE_FLAGS "/O1 /bigobj")
ENDIF()
diff --git a/library/include/modules/World.h b/library/include/modules/World.h
index e7b17ce4..81ebfbd6 100644
--- a/library/include/modules/World.h
+++ b/library/include/modules/World.h
@@ -40,16 +40,6 @@ namespace DFHack
/**
* \ingroup grp_world
*/
- enum WeatherType
- {
- CLEAR,
- RAINING,
- SNOWING
- };
- typedef unsigned char weather_map [5][5];
- /**
- * \ingroup grp_world
- */
enum GameMode
{
GAMEMODE_DWARF,
@@ -113,7 +103,6 @@ namespace DFHack
class DFHACK_EXPORT World : public Module
{
public:
- weather_map * wmap;
World();
~World();
bool Start();
diff --git a/library/modules/Gui.cpp b/library/modules/Gui.cpp
index 27ac3ddd..e1810522 100644
--- a/library/modules/Gui.cpp
+++ b/library/modules/Gui.cpp
@@ -998,16 +998,29 @@ bool Gui::setDesignationCoords (const int32_t x, const int32_t y, const int32_t
bool Gui::getMousePos (int32_t & x, int32_t & y)
{
- x = gps->mouse_x;
- y = gps->mouse_y;
+ if (gps) {
+ x = gps->mouse_x;
+ y = gps->mouse_y;
+ }
+ else {
+ x = -1;
+ y = -1;
+ }
return (x == -1) ? false : true;
}
bool Gui::getWindowSize (int32_t &width, int32_t &height)
{
- width = gps->dimx;
- height = gps->dimy;
- return true;
+ if (gps) {
+ width = gps->dimx;
+ height = gps->dimy;
+ return true;
+ }
+ else {
+ width = 80;
+ height = 25;
+ return false;
+ }
}
bool Gui::getMenuWidth(uint8_t &menu_width, uint8_t &area_map_width)
diff --git a/library/modules/Windows.cpp b/library/modules/Windows.cpp
index e069d964..218b6f7e 100644
--- a/library/modules/Windows.cpp
+++ b/library/modules/Windows.cpp
@@ -34,10 +34,12 @@ distribution.
#include "modules/Windows.h"
using namespace DFHack;
+using df::global::gps;
Windows::df_screentile *Windows::getScreenBuffer()
{
- return (df_screentile *) df::global::gps->screen;
+ if (!gps) return NULL;
+ return (df_screentile *) gps->screen;
}
Windows::df_window::df_window(int x, int y, unsigned int width, unsigned int height)
@@ -79,7 +81,7 @@ bool Windows::df_window::unlock (painter * painter)
return false;
}
-Windows::top_level_window::top_level_window(): df_window(0,0,df::global::gps->dimx,df::global::gps->dimy)
+Windows::top_level_window::top_level_window() : df_window(0,0,gps ? gps->dimx : 80,gps ? gps->dimy : 25)
{
buffer = 0;
}
diff --git a/library/modules/World.cpp b/library/modules/World.cpp
index 6f6a69a5..4b50b44c 100644
--- a/library/modules/World.cpp
+++ b/library/modules/World.cpp
@@ -63,15 +63,8 @@ struct World::Private
bool Inited;
bool PauseInited;
- void * pause_state_offset;
-
bool StartedWeather;
- char * weather_offset;
-
bool StartedMode;
- void * gamemode_offset;
- void * controlmode_offset;
- void * controlmodecopy_offset;
int next_persistent_id;
std::multimap<std::string, int> persistent_index;
@@ -86,21 +79,14 @@ World::World()
Core & c = Core::getInstance();
d = new Private;
d->owner = c.p;
- wmap = 0;
- d->pause_state_offset = (void *) c.vinfo->getAddress ("pause_state");
- if(d->pause_state_offset)
+ if(df::global::pause_state)
d->PauseInited = true;
- d->weather_offset = (char *) c.vinfo->getAddress( "current_weather" );
- if(d->weather_offset)
- {
- wmap = (weather_map *) d->weather_offset;
+ if(df::global::current_weather)
d->StartedWeather = true;
- }
- d->gamemode_offset = (void *) c.vinfo->getAddress( "game_mode" );
- d->controlmode_offset = (void *) c.vinfo->getAddress( "control_mode" );
- d->StartedMode = true;
+ if (df::global::game_mode && df::global::control_mode)
+ d->StartedMode = true;
d->Inited = true;
}
@@ -123,14 +109,13 @@ bool World::Finish()
bool World::ReadPauseState()
{
if(!d->PauseInited) return false;
- uint8_t pauseState = d->owner->readByte (d->pause_state_offset);
- return pauseState & 1;
+ return *df::global::pause_state;
}
void World::SetPauseState(bool paused)
{
- if(!d->PauseInited) return;
- d->owner->writeByte (d->pause_state_offset, paused);
+ if (d->PauseInited)
+ *df::global::pause_state = paused;
}
uint32_t World::ReadCurrentYear()
@@ -147,8 +132,8 @@ bool World::ReadGameMode(t_gamemodes& rd)
{
if(d->Inited && d->StartedMode)
{
- rd.g_mode = (GameMode) d->owner->readDWord( d->controlmode_offset);
- rd.g_type = (GameType) d->owner->readDWord(d->gamemode_offset);
+ rd.g_mode = (DFHack::GameMode)*df::global::control_mode;
+ rd.g_type = (DFHack::GameType)*df::global::game_mode;
return true;
}
return false;
@@ -157,8 +142,8 @@ bool World::WriteGameMode(const t_gamemodes & wr)
{
if(d->Inited && d->StartedMode)
{
- d->owner->writeDWord(d->gamemode_offset,wr.g_type);
- d->owner->writeDWord(d->controlmode_offset,wr.g_mode);
+ *df::global::control_mode = wr.g_mode;
+ *df::global::game_mode = wr.g_type;
return true;
}
return false;
@@ -199,18 +184,14 @@ uint32_t World::ReadCurrentDay()
uint8_t World::ReadCurrentWeather()
{
if (d->Inited && d->StartedWeather)
- return(d->owner->readByte(d->weather_offset + 12));
+ return (*df::global::current_weather)[2][2];
return 0;
}
void World::SetCurrentWeather(uint8_t weather)
{
if (d->Inited && d->StartedWeather)
- {
- uint8_t buf[25];
- memset(&buf,weather, sizeof(buf));
- d->owner->write(d->weather_offset,sizeof(buf),buf);
- }
+ memset(df::global::current_weather, weather, 25);
}
string World::ReadWorldFolder()
diff --git a/plugins/autolabor.cpp b/plugins/autolabor.cpp
index d89ddd7c..de1a1aef 100644
--- a/plugins/autolabor.cpp
+++ b/plugins/autolabor.cpp
@@ -706,7 +706,7 @@ DFhackCExport command_result plugin_onupdate ( color_ostream &out )
{
static int step_count = 0;
// check run conditions
- if(!world->map.block_index || !enable_autolabor)
+ if(!world || !world->map.block_index || !enable_autolabor)
{
// give up if we shouldn't be running'
return CR_OK;
diff --git a/plugins/fastdwarf.cpp b/plugins/fastdwarf.cpp
index 643a097c..5a2e2f20 100644
--- a/plugins/fastdwarf.cpp
+++ b/plugins/fastdwarf.cpp
@@ -28,7 +28,7 @@ static int enable_fastdwarf = false;
DFhackCExport command_result plugin_onupdate ( color_ostream &out )
{
// check run conditions
- if(!world->map.block_index || !enable_fastdwarf)
+ if(!world || !world->map.block_index || !enable_fastdwarf)
{
// give up if we shouldn't be running'
return CR_OK;
diff --git a/plugins/weather.cpp b/plugins/weather.cpp
index 68eb078a..33fa45fd 100644
--- a/plugins/weather.cpp
+++ b/plugins/weather.cpp
@@ -5,10 +5,13 @@
#include <vector>
#include <string>
#include "modules/World.h"
+#include "DataDefs.h"
+#include "df/weather_type.h"
using std::vector;
using std::string;
using namespace DFHack;
+using namespace df::enums;
bool locked = false;
unsigned char locked_data[25];
@@ -82,7 +85,7 @@ command_result weather (color_ostream &con, vector <string> & parameters)
CoreSuspender suspend;
DFHack::World * w = Core::getInstance().getWorld();
- if(!w->wmap)
+ if(!df::global::current_weather)
{
con << "Weather support seems broken :(" << std::endl;
return CR_FAILURE;
@@ -95,19 +98,19 @@ command_result weather (color_ostream &con, vector <string> & parameters)
{
for(int x = 0; x<5;x++)
{
- switch((*w->wmap)[x][y])
+ switch((*df::global::current_weather)[x][y])
{
- case CLEAR:
+ case weather_type::None:
con << "C ";
break;
- case RAINING:
+ case weather_type::Rain:
con << "R ";
break;
- case SNOWING:
+ case weather_type::Snow:
con << "S ";
break;
default:
- con << (int) (*w->wmap)[x][y] << " ";
+ con << (int) (*df::global::current_weather)[x][y] << " ";
break;
}
}
@@ -120,17 +123,17 @@ command_result weather (color_ostream &con, vector <string> & parameters)
if(rain)
{
con << "Here comes the rain." << std::endl;
- w->SetCurrentWeather(RAINING);
+ w->SetCurrentWeather(weather_type::Rain);
}
if(snow)
{
con << "Snow everywhere!" << std::endl;
- w->SetCurrentWeather(SNOWING);
+ w->SetCurrentWeather(weather_type::Snow);
}
if(clear)
{
con << "Suddenly, sunny weather!" << std::endl;
- w->SetCurrentWeather(CLEAR);
+ w->SetCurrentWeather(weather_type::None);
}
if(val_override != -1)
{