diff --git a/src/fontcache.cpp b/src/fontcache.cpp index ac9adffc55..1c1095b350 100644 --- a/src/fontcache.cpp +++ b/src/fontcache.cpp @@ -715,7 +715,7 @@ const Sprite *GetGlyph(FontSize size, WChar key) FT_Render_Glyph(face->glyph, aa ? FT_RENDER_MODE_NORMAL : FT_RENDER_MODE_MONO); /* Despite requesting a normal glyph, FreeType may have returned a bitmap */ - aa = (slot->bitmap.palette_mode == FT_PIXEL_MODE_GRAY); + aa = (slot->bitmap.pixel_mode == FT_PIXEL_MODE_GRAY); /* Add 1 pixel for the shadow on the medium font. Our sprite must be at least 1x1 pixel */ width = max(1, slot->bitmap.width + (size == FS_NORMAL)); diff --git a/src/lang/english.txt b/src/lang/english.txt index d3a95da12e..bdba92bf97 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -637,7 +637,7 @@ STR_0299_SAVE_SCENARIO :{WHITE}Save Sce STR_029A_PLAY_SCENARIO :{BLACK}Play Scenario STR_PLAY_HEIGHTMAP :{BLACK}Play Heightmap STR_PLAY_HEIGHTMAP_HINT :{BLACK}Start a new game, using a heightmap as landscape -STR_QUIT_SCENARIO_QUERY :{YELLOW}Are you sure you want to quit this scenario ? +STR_QUIT_SCENARIO_QUERY :{YELLOW}Are you sure you want to quit this scenario? STR_029D_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE}...can only be built in towns with a population of at least 1200 STR_029E_MOVE_THE_STARTING_DATE :{BLACK}Move the starting date backward 1 year STR_029F_MOVE_THE_STARTING_DATE :{BLACK}Move the starting date forward 1 year diff --git a/src/newgrf_engine.cpp b/src/newgrf_engine.cpp index e567cb6c6d..dfb2566dfb 100644 --- a/src/newgrf_engine.cpp +++ b/src/newgrf_engine.cpp @@ -129,10 +129,18 @@ uint32 GetEngineGRFID(EngineID engine) static int MapOldSubType(const Vehicle *v) { - if (v->type != VEH_TRAIN) return v->subtype; - if (IsTrainEngine(v)) return 0; - if (IsFreeWagon(v)) return 4; - return 2; + switch (v->type) { + case VEH_TRAIN: + if (IsTrainEngine(v)) return 0; + if (IsFreeWagon(v)) return 4; + return 2; + case VEH_ROAD: + case VEH_SHIP: return 0; + case VEH_AIRCRAFT: + case VEH_DISASTER: return v->subtype; + case VEH_EFFECT: return v->subtype << 1; + default: NOT_REACHED(); + } } @@ -685,12 +693,12 @@ static uint32 VehicleGetVariable(const ResolverObject *object, byte variable, by /* General vehicle properties */ switch (variable - 0x80) { - case 0x00: return v->type; + case 0x00: return v->type + 0x10; case 0x01: return MapOldSubType(v); case 0x04: return v->index; case 0x05: return GB(v->index, 8, 8); - case 0x0A: return v->current_order.Pack(); - case 0x0B: return GB(v->current_order.Pack(), 8, 8); + case 0x0A: return v->current_order.MapOldOrder(); + case 0x0B: return v->current_order.GetDestination(); case 0x0C: return v->GetNumOrders(); case 0x0D: return v->cur_order_index; case 0x10: return v->load_unload_time_rem; diff --git a/src/order_base.h b/src/order_base.h index e7ae1ccee0..b40e5a4d6a 100644 --- a/src/order_base.h +++ b/src/order_base.h @@ -232,6 +232,13 @@ public: */ uint32 Pack() const; + /** + * Pack this order into a 16 bits integer as close to the TTD + * representation as possible. + * @return the TTD-like packed representation. + */ + uint16 MapOldOrder() const; + /** * Converts this order from an old savegame's version; * it moves all bits to the new location. diff --git a/src/order_cmd.cpp b/src/order_cmd.cpp index 0e80152034..cb415c6014 100644 --- a/src/order_cmd.cpp +++ b/src/order_cmd.cpp @@ -125,6 +125,28 @@ uint32 Order::Pack() const return this->dest << 16 | this->flags << 8 | this->type; } +uint16 Order::MapOldOrder() const +{ + uint16 order = this->GetType(); + switch (this->type) { + case OT_GOTO_STATION: + if (this->GetUnloadType() & OUFB_UNLOAD) SetBit(order, 5); + if (this->GetLoadType() & OLFB_FULL_LOAD) SetBit(order, 6); + if (this->GetNonStopType() & ONSF_NO_STOP_AT_INTERMEDIATE_STATIONS) SetBit(order, 7); + order |= GB(this->GetDestination(), 0, 8) << 8; + break; + case OT_GOTO_DEPOT: + if (!(this->GetDepotOrderType() & ODTFB_PART_OF_ORDERS)) SetBit(order, 6); + SetBit(order, 7); + order |= GB(this->GetDestination(), 0, 8) << 8; + break; + case OT_LOADING: + if (this->GetLoadType() & OLFB_FULL_LOAD) SetBit(order, 6); + break; + } + return order; +} + Order::Order(uint32 packed) { this->type = (OrderType)GB(packed, 0, 8); diff --git a/src/saveload/oldloader_sl.cpp b/src/saveload/oldloader_sl.cpp index 1d12692a15..de575f8a36 100644 --- a/src/saveload/oldloader_sl.cpp +++ b/src/saveload/oldloader_sl.cpp @@ -520,36 +520,36 @@ static const OldChunks town_chunk[] = { OCL_NULL( 2 ), ///< population, no longer in use OCL_SVAR( OC_UINT16, Town, townnametype ), OCL_SVAR( OC_UINT32, Town, townnameparts ), - OCL_SVAR( OC_UINT8, Town, grow_counter ), + OCL_SVAR( OC_FILE_U8 | OC_VAR_U16, Town, grow_counter ), OCL_NULL( 1 ), ///< sort_index, no longer in use OCL_NULL( 4 ), ///< sign-coordinates, no longer in use OCL_NULL( 2 ), ///< namewidth, no longer in use - OCL_SVAR( OC_UINT16, Town, flags12 ), + OCL_SVAR( OC_FILE_U16 | OC_VAR_U8, Town, flags12 ), OCL_NULL( 10 ), ///< radius, no longer in use - OCL_SVAR( OC_UINT16, Town, ratings[0] ), - OCL_SVAR( OC_UINT16, Town, ratings[1] ), - OCL_SVAR( OC_UINT16, Town, ratings[2] ), - OCL_SVAR( OC_UINT16, Town, ratings[3] ), - OCL_SVAR( OC_UINT16, Town, ratings[4] ), - OCL_SVAR( OC_UINT16, Town, ratings[5] ), - OCL_SVAR( OC_UINT16, Town, ratings[6] ), - OCL_SVAR( OC_UINT16, Town, ratings[7] ), + OCL_SVAR( OC_INT16, Town, ratings[0] ), + OCL_SVAR( OC_INT16, Town, ratings[1] ), + OCL_SVAR( OC_INT16, Town, ratings[2] ), + OCL_SVAR( OC_INT16, Town, ratings[3] ), + OCL_SVAR( OC_INT16, Town, ratings[4] ), + OCL_SVAR( OC_INT16, Town, ratings[5] ), + OCL_SVAR( OC_INT16, Town, ratings[6] ), + OCL_SVAR( OC_INT16, Town, ratings[7] ), OCL_SVAR( OC_FILE_U32 | OC_VAR_U16, Town, have_ratings ), OCL_SVAR( OC_FILE_U32 | OC_VAR_U16, Town, statues ), OCL_NULL( 2 ), ///< num_houses, no longer in use - OCL_SVAR( OC_UINT8, Town, time_until_rebuild ), - OCL_SVAR( OC_UINT8, Town, growth_rate ), + OCL_SVAR( OC_FILE_U8 | OC_VAR_U16, Town, time_until_rebuild ), + OCL_SVAR( OC_FILE_U8 | OC_VAR_I16, Town, growth_rate ), - OCL_SVAR( OC_UINT16, Town, new_max_pass ), - OCL_SVAR( OC_UINT16, Town, new_max_mail ), - OCL_SVAR( OC_UINT16, Town, new_act_pass ), - OCL_SVAR( OC_UINT16, Town, new_act_mail ), - OCL_SVAR( OC_UINT16, Town, max_pass ), - OCL_SVAR( OC_UINT16, Town, max_mail ), - OCL_SVAR( OC_UINT16, Town, act_pass ), - OCL_SVAR( OC_UINT16, Town, act_mail ), + OCL_SVAR( OC_FILE_U16 | OC_VAR_U32, Town, new_max_pass ), + OCL_SVAR( OC_FILE_U16 | OC_VAR_U32, Town, new_max_mail ), + OCL_SVAR( OC_FILE_U16 | OC_VAR_U32, Town, new_act_pass ), + OCL_SVAR( OC_FILE_U16 | OC_VAR_U32, Town, new_act_mail ), + OCL_SVAR( OC_FILE_U16 | OC_VAR_U32, Town, max_pass ), + OCL_SVAR( OC_FILE_U16 | OC_VAR_U32, Town, max_mail ), + OCL_SVAR( OC_FILE_U16 | OC_VAR_U32, Town, act_pass ), + OCL_SVAR( OC_FILE_U16 | OC_VAR_U32, Town, act_mail ), OCL_SVAR( OC_UINT8, Town, pct_pass_transported ), OCL_SVAR( OC_UINT8, Town, pct_mail_transported ), diff --git a/src/saveload/town_sl.cpp b/src/saveload/town_sl.cpp index c28f6acace..ec1b90d60a 100644 --- a/src/saveload/town_sl.cpp +++ b/src/saveload/town_sl.cpp @@ -112,9 +112,9 @@ static const SaveLoad _town_desc[] = { SLE_VAR(Town, new_act_food, SLE_UINT16), SLE_VAR(Town, new_act_water, SLE_UINT16), - SLE_CONDVAR(Town, time_until_rebuild, SLE_UINT8, 0, 53), - SLE_CONDVAR(Town, grow_counter, SLE_UINT8, 0, 53), - SLE_CONDVAR(Town, growth_rate, SLE_UINT8, 0, 53), + SLE_CONDVAR(Town, time_until_rebuild, SLE_FILE_U8 | SLE_VAR_U16, 0, 53), + SLE_CONDVAR(Town, grow_counter, SLE_FILE_U8 | SLE_VAR_U16, 0, 53), + SLE_CONDVAR(Town, growth_rate, SLE_FILE_U8 | SLE_VAR_I16, 0, 53), SLE_CONDVAR(Town, time_until_rebuild, SLE_UINT16, 54, SL_MAX_VERSION), SLE_CONDVAR(Town, grow_counter, SLE_UINT16, 54, SL_MAX_VERSION), diff --git a/src/settings.cpp b/src/settings.cpp index c554f10324..a4be31153d 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -2153,7 +2153,12 @@ void IConsoleSetSetting(const char *name, const char *value) uint32 val; extern bool GetArgumentInteger(uint32 *value, const char *arg); success = GetArgumentInteger(&val, value); - if (success) success = SetSettingValue(index, val); + if (!success) { + IConsolePrintF(CC_ERROR, "'%s' is not an integer.", value); + return; + } + + success = SetSettingValue(index, val); } if (!success) {