diff options
-rw-r--r-- | src/newgrf.cpp | 994 |
1 files changed, 493 insertions, 501 deletions
diff --git a/src/newgrf.cpp b/src/newgrf.cpp index 432f7a81d..7a01757b5 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -103,6 +103,54 @@ public: throw OTTDByteReaderSignal(); } + uint16 ReadWord() + { + uint16 val = ReadByte(); + return val | (ReadByte() << 8); + } + + uint16 ReadExtended() + { + uint16 val = ReadByte(); + return val == 0xFF ? ReadWord() : val; + } + + uint32 ReadDWord() + { + uint32 val = ReadWord(); + return val | (ReadWord() << 16); + } + + uint32 ReadVarSize(byte size) + { + switch (size) { + case 1: return ReadByte(); + case 2: return ReadWord(); + case 4: return ReadDWord(); + default: + NOT_REACHED(); + return 0; + } + } + + const char *ReadString() + { + char *string = reinterpret_cast<char *>(data); + size_t string_length = ttd_strnlen(string, Remaining()); + + if (string_length == Remaining()) { + /* String was not NUL terminated, so make sure it is now. */ + string[string_length - 1] = '\0'; + grfmsg(7, "String was not terminated with a zero byte."); + } else { + /* Increase the string length to include the NUL byte. */ + string_length++; + } + Skip(string_length); + + return string; + } + FORCEINLINE size_t Remaining() const { return end - data; @@ -192,62 +240,6 @@ void CDECL grfmsg(int severity, const char *str, ...) DEBUG(grf, severity, "[%s:%d] %s", _cur_grfconfig->filename, _nfo_line, buf); } -static inline byte grf_load_byte(ByteReader **buf) -{ - return (*buf)->ReadByte(); -} - -static uint16 grf_load_word(ByteReader **buf) -{ - uint16 val = grf_load_byte(buf); - return val | (grf_load_byte(buf) << 8); -} - -static uint16 grf_load_extended(ByteReader **buf) -{ - uint16 val; - val = grf_load_byte(buf); - if (val == 0xFF) val = grf_load_word(buf); - return val; -} - -static uint32 grf_load_dword(ByteReader **buf) -{ - uint32 val = grf_load_word(buf); - return val | (grf_load_word(buf) << 16); -} - -static uint32 grf_load_var(byte size, ByteReader **buf) -{ - switch (size) { - case 1: return grf_load_byte(buf); - case 2: return grf_load_word(buf); - case 4: return grf_load_dword(buf); - default: - NOT_REACHED(); - return 0; - } -} - -static const char *grf_load_string(ByteReader **bufp) -{ - ByteReader *buf = *bufp; - char *string = reinterpret_cast<char *>(buf->Data()); - size_t string_length = ttd_strnlen(string, buf->Remaining()); - - if (string_length == buf->Remaining()) { - /* String was not NUL terminated, so make sure it is now. */ - string[string_length - 1] = '\0'; - grfmsg(7, "String was not terminated with a zero byte."); - } else { - /* Increase the string length to include the NUL byte. */ - string_length++; - } - buf->Skip(string_length); - - return string; -} - static GRFFile *GetFileByGRFID(uint32 grfid) { const GRFFile * const *end = _grf_files.End(); @@ -482,27 +474,27 @@ enum ChangeInfoResult { typedef ChangeInfoResult (*VCI_Handler)(uint engine, int numinfo, int prop, ByteReader *buf); -static ChangeInfoResult CommonVehicleChangeInfo(EngineInfo *ei, int prop, ByteReader **buf) +static ChangeInfoResult CommonVehicleChangeInfo(EngineInfo *ei, int prop, ByteReader *buf) { switch (prop) { case 0x00: // Introduction date - ei->base_intro = grf_load_word(buf) + DAYS_TILL_ORIGINAL_BASE_YEAR; + ei->base_intro = buf->ReadWord() + DAYS_TILL_ORIGINAL_BASE_YEAR; break; case 0x02: // Decay speed - ei->decay_speed = grf_load_byte(buf); + ei->decay_speed = buf->ReadByte(); break; case 0x03: // Vehicle life - ei->lifelength = grf_load_byte(buf); + ei->lifelength = buf->ReadByte(); break; case 0x04: // Model life - ei->base_life = grf_load_byte(buf); + ei->base_life = buf->ReadByte(); break; case 0x06: // Climates available - ei->climates = grf_load_byte(buf); + ei->climates = buf->ReadByte(); /* Sometimes a GRF wants hidden vehicles. Setting climates to * zero may cause the ID to be reallocated. */ if (ei->climates == 0) ei->climates = 0x80; @@ -510,7 +502,7 @@ static ChangeInfoResult CommonVehicleChangeInfo(EngineInfo *ei, int prop, ByteRe case 0x07: // Loading speed /* Amount of cargo loaded during a vehicle's "loading tick" */ - ei->load_amount = grf_load_byte(buf); + ei->load_amount = buf->ReadByte(); break; default: @@ -531,7 +523,7 @@ static ChangeInfoResult RailVehicleChangeInfo(uint engine, int numinfo, int prop switch (prop) { case 0x05: { // Track type - uint8 tracktype = grf_load_byte(&buf); + uint8 tracktype = buf->ReadByte(); if (tracktype < _cur_grffile->railtype_max) { RailType railtype = GetRailTypeByLabel(_cur_grffile->railtype_list[tracktype]); @@ -557,18 +549,18 @@ static ChangeInfoResult RailVehicleChangeInfo(uint engine, int numinfo, int prop case 0x08: // AI passenger service /* Tells the AI that this engine is designed for * passenger services and shouldn't be used for freight. */ - rvi->ai_passenger_only = grf_load_byte(&buf); + rvi->ai_passenger_only = buf->ReadByte(); break; case PROP_TRAIN_SPEED: { // 0x09 Speed (1 unit is 1 km-ish/h) - uint16 speed = grf_load_word(&buf); + uint16 speed = buf->ReadWord(); if (speed == 0xFFFF) speed = 0; rvi->max_speed = speed; } break; case PROP_TRAIN_POWER: // 0x0B Power - rvi->power = grf_load_word(&buf); + rvi->power = buf->ReadWord(); /* Set engine / wagon state based on power */ if (rvi->power != 0) { @@ -581,15 +573,15 @@ static ChangeInfoResult RailVehicleChangeInfo(uint engine, int numinfo, int prop break; case PROP_TRAIN_RUNNING_COST_FACTOR: // 0x0D Running cost factor - rvi->running_cost = grf_load_byte(&buf); + rvi->running_cost = buf->ReadByte(); break; case 0x0E: // Running cost base - ConvertTTDBasePrice(grf_load_dword(&buf), "RailVehicleChangeInfo", &rvi->running_cost_class); + ConvertTTDBasePrice(buf->ReadDWord(), "RailVehicleChangeInfo", &rvi->running_cost_class); break; case 0x12: { // Sprite ID - uint8 spriteid = grf_load_byte(&buf); + uint8 spriteid = buf->ReadByte(); /* TTD sprite IDs point to a location in a 16bit array, but we use it * as an array index, so we need it to be half the original value. */ @@ -599,7 +591,7 @@ static ChangeInfoResult RailVehicleChangeInfo(uint engine, int numinfo, int prop } break; case 0x13: { // Dual-headed - uint8 dual = grf_load_byte(&buf); + uint8 dual = buf->ReadByte(); if (dual != 0) { rvi->railveh_type = RAILVEH_MULTIHEAD; @@ -610,11 +602,11 @@ static ChangeInfoResult RailVehicleChangeInfo(uint engine, int numinfo, int prop } break; case PROP_TRAIN_CARGO_CAPACITY: // 0x14 Cargo capacity - rvi->capacity = grf_load_byte(&buf); + rvi->capacity = buf->ReadByte(); break; case 0x15: { // Cargo type - uint8 ctype = grf_load_byte(&buf); + uint8 ctype = buf->ReadByte(); if (ctype < NUM_CARGO && HasBit(_cargo_mask, ctype)) { ei->cargo_type = ctype; @@ -628,16 +620,16 @@ static ChangeInfoResult RailVehicleChangeInfo(uint engine, int numinfo, int prop } break; case PROP_TRAIN_WEIGHT: // 0x16 Weight - SB(rvi->weight, 0, 8, grf_load_byte(&buf)); + SB(rvi->weight, 0, 8, buf->ReadByte()); break; case PROP_TRAIN_COST_FACTOR: // 0x17 Cost factor - rvi->cost_factor = grf_load_byte(&buf); + rvi->cost_factor = buf->ReadByte(); break; case 0x18: // AI rank grfmsg(2, "RailVehicleChangeInfo: Property 0x18 'AI rank' not used by NoAI, ignored."); - grf_load_byte(&buf); + buf->ReadByte(); break; case 0x19: { // Engine traction type @@ -648,7 +640,7 @@ static ChangeInfoResult RailVehicleChangeInfo(uint engine, int numinfo, int prop * 0x32 .. 0x37: Monorail * 0x38 .. 0x41: Maglev */ - uint8 traction = grf_load_byte(&buf); + uint8 traction = buf->ReadByte(); EngineClass engclass; if (traction <= 0x07) { @@ -676,51 +668,51 @@ static ChangeInfoResult RailVehicleChangeInfo(uint engine, int numinfo, int prop } break; case 0x1A: // Alter purchase list sort order - AlterVehicleListOrder(e->index, grf_load_extended(&buf)); + AlterVehicleListOrder(e->index, buf->ReadExtended()); break; case 0x1B: // Powered wagons power bonus - rvi->pow_wag_power = grf_load_word(&buf); + rvi->pow_wag_power = buf->ReadWord(); break; case 0x1C: // Refit cost - ei->refit_cost = grf_load_byte(&buf); + ei->refit_cost = buf->ReadByte(); break; case 0x1D: // Refit cargo - ei->refit_mask = grf_load_dword(&buf); + ei->refit_mask = buf->ReadDWord(); _gted[e->index].refitmask_valid = true; break; case 0x1E: // Callback - ei->callback_mask = grf_load_byte(&buf); + ei->callback_mask = buf->ReadByte(); break; case PROP_TRAIN_TRACTIVE_EFFORT: // 0x1F Tractive effort coefficient - rvi->tractive_effort = grf_load_byte(&buf); + rvi->tractive_effort = buf->ReadByte(); break; case 0x20: // Air drag /** @todo Air drag for trains. */ - grf_load_byte(&buf); + buf->ReadByte(); ret = CIR_UNHANDLED; break; case 0x21: // Shorter vehicle - rvi->shorten_factor = grf_load_byte(&buf); + rvi->shorten_factor = buf->ReadByte(); break; case 0x22: // Visual effect /** @see note in engine.h about rvi->visual_effect */ - rvi->visual_effect = grf_load_byte(&buf); + rvi->visual_effect = buf->ReadByte(); break; case 0x23: // Powered wagons weight bonus - rvi->pow_wag_weight = grf_load_byte(&buf); + rvi->pow_wag_weight = buf->ReadByte(); break; case 0x24: { // High byte of vehicle weight - byte weight = grf_load_byte(&buf); + byte weight = buf->ReadByte(); if (weight > 4) { grfmsg(2, "RailVehicleChangeInfo: Nonsensical weight of %d tons, ignoring", weight << 8); @@ -730,34 +722,34 @@ static ChangeInfoResult RailVehicleChangeInfo(uint engine, int numinfo, int prop } break; case PROP_TRAIN_USER_DATA: // 0x25 User-defined bit mask to set when checking veh. var. 42 - rvi->user_def_data = grf_load_byte(&buf); + rvi->user_def_data = buf->ReadByte(); break; case 0x26: // Retire vehicle early - ei->retire_early = grf_load_byte(&buf); + ei->retire_early = buf->ReadByte(); break; case 0x27: // Miscellaneous flags - ei->misc_flags = grf_load_byte(&buf); + ei->misc_flags = buf->ReadByte(); _loaded_newgrf_features.has_2CC |= HasBit(ei->misc_flags, EF_USES_2CC); break; case 0x28: // Cargo classes allowed - _gted[e->index].cargo_allowed = grf_load_word(&buf); + _gted[e->index].cargo_allowed = buf->ReadWord(); _gted[e->index].refitmask_valid = true; break; case 0x29: // Cargo classes disallowed - _gted[e->index].cargo_disallowed = grf_load_word(&buf); + _gted[e->index].cargo_disallowed = buf->ReadWord(); _gted[e->index].refitmask_valid = true; break; case 0x2A: // Long format introduction date (days since year 0) - ei->base_intro = grf_load_dword(&buf); + ei->base_intro = buf->ReadDWord(); break; default: - ret = CommonVehicleChangeInfo(ei, prop, &buf); + ret = CommonVehicleChangeInfo(ei, prop, buf); break; } } @@ -776,19 +768,19 @@ static ChangeInfoResult RoadVehicleChangeInfo(uint engine, int numinfo, int prop switch (prop) { case 0x08: // Speed (1 unit is 0.5 kmh) - rvi->max_speed = grf_load_byte(&buf); + rvi->max_speed = buf->ReadByte(); break; case PROP_ROADVEH_RUNNING_COST_FACTOR: // 0x09 Running cost factor - rvi->running_cost = grf_load_byte(&buf); + rvi->running_cost = buf->ReadByte(); break; case 0x0A: // Running cost base - ConvertTTDBasePrice(grf_load_dword(&buf), "RoadVehicleChangeInfo", &rvi->running_cost_class); + ConvertTTDBasePrice(buf->ReadDWord(), "RoadVehicleChangeInfo", &rvi->running_cost_class); break; case 0x0E: { // Sprite ID - uint8 spriteid = grf_load_byte(&buf); + uint8 spriteid = buf->ReadByte(); /* cars have different custom id in the GRF file */ if (spriteid == 0xFF) spriteid = 0xFD; @@ -799,11 +791,11 @@ static ChangeInfoResult RoadVehicleChangeInfo(uint engine, int numinfo, int prop } break; case PROP_ROADVEH_CARGO_CAPACITY: // 0x0F Cargo capacity - rvi->capacity = grf_load_byte(&buf); + rvi->capacity = buf->ReadByte(); break; case 0x10: { // Cargo type - uint8 cargo = grf_load_byte(&buf); + uint8 cargo = buf->ReadByte(); if (cargo < NUM_CARGO && HasBit(_cargo_mask, cargo)) { ei->cargo_type = cargo; @@ -816,75 +808,75 @@ static ChangeInfoResult RoadVehicleChangeInfo(uint engine, int numinfo, int prop } break; case PROP_ROADVEH_COST_FACTOR: // 0x11 Cost factor - rvi->cost_factor = grf_load_byte(&buf); + rvi->cost_factor = buf->ReadByte(); break; case 0x12: // SFX - rvi->sfx = grf_load_byte(&buf); + rvi->sfx = buf->ReadByte(); break; case 0x13: // Power in 10hp - rvi->power = grf_load_byte(&buf); + rvi->power = buf->ReadByte(); break; case 0x14: // Weight in 1/4 tons - rvi->weight = grf_load_byte(&buf); + rvi->weight = buf->ReadByte(); break; case 0x15: // Speed in mph/0.8 - _gted[e->index].rv_max_speed = grf_load_byte(&buf); + _gted[e->index].rv_max_speed = buf->ReadByte(); break; case 0x16: // Cargos available for refitting - ei->refit_mask = grf_load_dword(&buf); + ei->refit_mask = buf->ReadDWord(); _gted[e->index].refitmask_valid = true; break; case 0x17: // Callback mask - ei->callback_mask = grf_load_byte(&buf); + ei->callback_mask = buf->ReadByte(); break; case 0x18: // Tractive effort - rvi->tractive_effort = grf_load_byte(&buf); + rvi->tractive_effort = buf->ReadByte(); break; case 0x19: // Air drag - rvi->air_drag = grf_load_byte(&buf); + rvi->air_drag = buf->ReadByte(); break; case 0x1A: // Refit cost - ei->refit_cost = grf_load_byte(&buf); + ei->refit_cost = buf->ReadByte(); break; case 0x1B: // Retire vehicle early - ei->retire_early = grf_load_byte(&buf); + ei->retire_early = buf->ReadByte(); break; case 0x1C: // Miscellaneous flags - ei->misc_flags = grf_load_byte(&buf); + ei->misc_flags = buf->ReadByte(); _loaded_newgrf_features.has_2CC |= HasBit(ei->misc_flags, EF_USES_2CC); break; case 0x1D: // Cargo classes allowed - _gted[e->index].cargo_allowed = grf_load_word(&buf); + _gted[e->index].cargo_allowed = buf->ReadWord(); _gted[e->index].refitmask_valid = true; break; case 0x1E: // Cargo classes disallowed - _gted[e->index].cargo_disallowed = grf_load_word(&buf); + _gted[e->index].cargo_disallowed = buf->ReadWord(); _gted[e->index].refitmask_valid = true; break; case 0x1F: // Long format introduction date (days since year 0) - ei->base_intro = grf_load_dword(&buf); + ei->base_intro = buf->ReadDWord(); break; case 0x20: // Alter purchase list sort order - AlterVehicleListOrder(e->index, grf_load_extended(&buf)); + AlterVehicleListOrder(e->index, buf->ReadExtended()); break; default: - ret = CommonVehicleChangeInfo(ei, prop, &buf); + ret = CommonVehicleChangeInfo(ei, prop, buf); break; } } @@ -903,7 +895,7 @@ static ChangeInfoResult ShipVehicleChangeInfo(uint engine, int numinfo, int prop switch (prop) { case 0x08: { // Sprite ID - uint8 spriteid = grf_load_byte(&buf); + uint8 spriteid = buf->ReadByte(); /* ships have different custom id in the GRF file */ if (spriteid == 0xFF) spriteid = 0xFD; @@ -914,19 +906,19 @@ static ChangeInfoResult ShipVehicleChangeInfo(uint engine, int numinfo, int prop } break; case 0x09: // Refittable - svi->old_refittable = (grf_load_byte(&buf) != 0); + svi->old_refittable = (buf->ReadByte() != 0); break; case PROP_SHIP_COST_FACTOR: // 0x0A Cost factor - svi->cost_factor = grf_load_byte(&buf); + svi->cost_factor = buf->ReadByte(); break; case PROP_SHIP_SPEED: // 0x0B Speed (1 unit is 0.5 km-ish/h) - svi->max_speed = grf_load_byte(&buf); + svi->max_speed = buf->ReadByte(); break; case 0x0C: { // Cargo type - uint8 cargo = grf_load_byte(&buf); + uint8 cargo = buf->ReadByte(); if (cargo < NUM_CARGO && HasBit(_cargo_mask, cargo)) { ei->cargo_type = cargo; @@ -939,66 +931,66 @@ static ChangeInfoResult ShipVehicleChangeInfo(uint engine, int numinfo, int prop } break; case PROP_SHIP_CARGO_CAPACITY: // 0x0D Cargo capacity - svi->capacity = grf_load_word(&buf); + svi->capacity = buf->ReadWord(); break; case PROP_SHIP_RUNNING_COST_FACTOR: // 0x0F Running cost factor - svi->running_cost = grf_load_byte(&buf); + svi->running_cost = buf->ReadByte(); break; case 0x10: // SFX - svi->sfx = grf_load_byte(&buf); + svi->sfx = buf->ReadByte(); break; case 0x11: // Cargos available for refitting - ei->refit_mask = grf_load_dword(&buf); + ei->refit_mask = buf->ReadDWord(); _gted[e->index].refitmask_valid = true; break; case 0x12: // Callback mask - ei->callback_mask = grf_load_byte(&buf); + ei->callback_mask = buf->ReadByte(); break; case 0x13: // Refit cost - ei->refit_cost = grf_load_byte(&buf); + ei->refit_cost = buf->ReadByte(); break; case 0x14: // Ocean speed fraction case 0x15: // Canal speed fraction /** @todo Speed fractions for ships on oceans and canals */ - grf_load_byte(&buf); + buf->ReadByte(); ret = CIR_UNHANDLED; break; case 0x16: // Retire vehicle early - ei->retire_early = grf_load_byte(&buf); + ei->retire_early = buf->ReadByte(); break; case 0x17: // Miscellaneous flags - ei->misc_flags = grf_load_byte(&buf); + ei->misc_flags = buf->ReadByte(); _loaded_newgrf_features.has_2CC |= HasBit(ei->misc_flags, EF_USES_2CC); break; case 0x18: // Cargo classes allowed - _gted[e->index].cargo_allowed = grf_load_word(&buf); + _gted[e->index].cargo_allowed = buf->ReadWord(); _gted[e->index].refitmask_valid = true; break; case 0x19: // Cargo classes disallowed - _gted[e->index].cargo_disallowed = grf_load_word(&buf); + _gted[e->index].cargo_disallowed = buf->ReadWord(); _gted[e->index].refitmask_valid = true; break; case 0x1A: // Long format introduction date (days since year 0) - ei->base_intro = grf_load_dword(&buf); + ei->base_intro = buf->ReadDWord(); break; case 0x1B: // Alter purchase list sort order - AlterVehicleListOrder(e->index, grf_load_extended(&buf)); + AlterVehicleListOrder(e->index, buf->ReadExtended()); break; default: - ret = CommonVehicleChangeInfo(ei, prop, &buf); + ret = CommonVehicleChangeInfo(ei, prop, buf); break; } } @@ -1017,7 +1009,7 @@ static ChangeInfoResult AircraftVehicleChangeInfo(uint engine, int numinfo, int switch (prop) { case 0x08: { // Sprite ID - uint8 spriteid = grf_load_byte(&buf); + uint8 spriteid = buf->ReadByte(); /* aircraft have different custom id in the GRF file */ if (spriteid == 0xFF) spriteid = 0xFD; @@ -1028,7 +1020,7 @@ static ChangeInfoResult AircraftVehicleChangeInfo(uint engine, int numinfo, int } break; case 0x09: // Helicopter - if (grf_load_byte(&buf) == 0) { + if (buf->ReadByte() == 0) { avi->subtype = AIR_HELI; } else { SB(avi->subtype, 0, 1, 1); // AIR_CTOL @@ -1036,79 +1028,79 @@ static ChangeInfoResult AircraftVehicleChangeInfo(uint engine, int numinfo, int break; case 0x0A: // Large - SB(avi->subtype, 1, 1, (grf_load_byte(&buf) != 0 ? 1 : 0)); // AIR_FAST + SB(avi->subtype, 1, 1, (buf->ReadByte() != 0 ? 1 : 0)); // AIR_FAST break; case PROP_AIRCRAFT_COST_FACTOR: // 0x0B Cost factor - avi->cost_factor = grf_load_byte(&buf); + avi->cost_factor = buf->ReadByte(); break; case PROP_AIRCRAFT_SPEED: // 0x0C Speed (1 unit is 8 mph, we translate to 1 unit is 1 km/h) - avi->max_speed = (grf_load_byte(&buf) * 129) / 10; + avi->max_speed = (buf->ReadByte() * 129) / 10; break; case 0x0D: // Acceleration - avi->acceleration = (grf_load_byte(&buf) * 129) / 10; + avi->acceleration = (buf->ReadByte() * 129) / 10; break; case PROP_AIRCRAFT_RUNNING_COST_FACTOR: // 0x0E Running cost factor - avi->running_cost = grf_load_byte(&buf); + avi->running_cost = buf->ReadByte(); break; case 0x0F: // Passenger capacity - avi->passenger_capacity = grf_load_word(&buf); + avi->passenger_capacity = buf->ReadWord(); break; case 0x11: // Mail capacity - avi->mail_capacity = grf_load_byte(&buf); + avi->mail_capacity = buf->ReadByte(); break; case 0x12: // SFX - avi->sfx = grf_load_byte(&buf); + avi->sfx = buf->ReadByte(); break; case 0x13: // Cargos available for refitting - ei->refit_mask = grf_load_dword(&buf); + ei->refit_mask = buf->ReadDWord(); _gted[e->index].refitmask_valid = true; break; case 0x14: // Callback mask - ei->callback_mask = grf_load_byte(&buf); + ei->callback_mask = buf->ReadByte(); break; case 0x15: // Refit cost - ei->refit_cost = grf_load_byte(&buf); + ei->refit_cost = buf->ReadByte(); break; case 0x16: // Retire vehicle early - ei->retire_early = grf_load_byte(&buf); + ei->retire_early = buf->ReadByte(); break; case 0x17: // Miscellaneous flags - ei->misc_flags = grf_load_byte(&buf); + ei->misc_flags = buf->ReadByte(); _loaded_newgrf_features.has_2CC |= HasBit(ei->misc_flags, EF_USES_2CC); break; case 0x18: // Cargo classes allowed - _gted[e->index].cargo_allowed = grf_load_word(&buf); + _gted[e->index].cargo_allowed = buf->ReadWord(); _gted[e->index].refitmask_valid = true; break; case 0x19: // Cargo classes disallowed - _gted[e->index].cargo_disallowed = grf_load_word(&buf); + _gted[e->index].cargo_disallowed = buf->ReadWord(); _gted[e->index].refitmask_valid = true; break; case 0x1A: // Long format introduction date (days since year 0) - ei->base_intro = grf_load_dword(&buf); + ei->base_intro = buf->ReadDWord(); break; case 0x1B: // Alter purchase list sort order - AlterVehicleListOrder(e->index, grf_load_extended(&buf)); + AlterVehicleListOrder(e->index, buf->ReadExtended()); break; default: - ret = CommonVehicleChangeInfo(ei, prop, &buf); + ret = CommonVehicleChangeInfo(ei, prop, buf); break; } } @@ -1145,12 +1137,12 @@ static ChangeInfoResult StationChangeInfo(uint stid, int numinfo, int prop, Byte if (*spec == NULL) *spec = CallocT<StationSpec>(1); /* Swap classid because we read it in BE meaning WAYP or DFLT */ - uint32 classid = grf_load_dword(&buf); + uint32 classid = buf->ReadDWord(); (*spec)->sclass = AllocateStationClass(BSWAP32(classid)); } break; case 0x09: // Define sprite layout - statspec->tiles = grf_load_extended(&buf); + statspec->tiles = buf->ReadExtended(); statspec->renderdata = CallocT<DrawTileSprites>(statspec->tiles); statspec->copied_renderdata = false; @@ -1159,8 +1151,8 @@ static ChangeInfoResult StationChangeInfo(uint stid, int numinfo, int prop, Byte uint seq_count = 0; dts->seq = NULL; - dts->ground.sprite = grf_load_word(&buf); - dts->ground.pal = grf_load_word(&buf); + dts->ground.sprite = buf->ReadWord(); + dts->ground.pal = buf->ReadWord(); if (dts->ground.sprite == 0) continue; if (HasBit(dts->ground.pal, 15)) { /* Use sprite from Action 1 */ @@ -1175,15 +1167,15 @@ static ChangeInfoResult StationChangeInfo(uint stid, int numinfo, int prop, Byte dts->seq = ReallocT(const_cast<DrawTileSeqStruct *>(dts->seq), ++seq_count); DrawTileSeqStruct *dtss = const_cast<DrawTileSeqStruct *>(&dts->seq[seq_count - 1]); - dtss->delta_x = grf_load_byte(&buf); + dtss->delta_x = buf->ReadByte(); if ((byte) dtss->delta_x == 0x80) break; - dtss->delta_y = grf_load_byte(&buf); - dtss->delta_z = grf_load_byte(&buf); - dtss->size_x = grf_load_byte(&buf); - dtss->size_y = grf_load_byte(&buf); - dtss->size_z = grf_load_byte(&buf); - dtss->image.sprite = grf_load_word(&buf); - dtss->image.pal = grf_load_word(&buf); + dtss->delta_y = buf->ReadByte(); + dtss->delta_z = buf->ReadByte(); + dtss->size_x = buf->ReadByte(); + dtss->size_y = buf->ReadByte(); + dtss->size_z = buf->ReadByte(); + dtss->image.sprite = buf->ReadWord(); + dtss->image.pal = buf->ReadWord(); if (HasBit(dtss->image.pal, 15)) { ClrBit(dtss->image.pal, 15); @@ -1198,7 +1190,7 @@ static ChangeInfoResult StationChangeInfo(uint stid, int numinfo, int prop, Byte break; case 0x0A: { // Copy sprite layout - byte srcid = grf_load_byte(&buf); + byte srcid = buf->ReadByte(); const StationSpec *srcstatspec = _cur_grffile->stations[srcid]; statspec->tiles = srcstatspec->tiles; @@ -1207,23 +1199,23 @@ static ChangeInfoResult StationChangeInfo(uint stid, int numinfo, int prop, Byte } break; case 0x0B: // Callback mask - statspec->callback_mask = grf_load_byte(&buf); + statspec->callback_mask = buf->ReadByte(); break; case 0x0C: // Disallowed number of platforms - statspec->disallowed_platforms = grf_load_byte(&buf); + statspec->disallowed_platforms = buf->ReadByte(); break; case 0x0D: // Disallowed platform lengths - statspec->disallowed_lengths = grf_load_byte(&buf); + statspec->disallowed_lengths = buf->ReadByte(); break; case 0x0E: // Define custom layout statspec->copied_layouts = false; while (buf->HasData()) { - byte length = grf_load_byte(&buf); - byte number = grf_load_byte(&buf); + byte length = buf->ReadByte(); + byte number = buf->ReadByte(); StationLayout layout; uint l, p; @@ -1255,7 +1247,7 @@ static ChangeInfoResult StationChangeInfo(uint stid, int numinfo, int prop, Byte try { for (l = 0; l < length; l++) { for (p = 0; p < number; p++) { - layout[l * number + p] = grf_load_byte(&buf); + layout[l * number + p] = buf->ReadByte(); } } } catch (...) { @@ -1271,7 +1263,7 @@ static ChangeInfoResult StationChangeInfo(uint stid, int numinfo, int prop, Byte break; case 0x0F: { // Copy custom layout - byte srcid = grf_load_byte(&buf); + byte srcid = buf->ReadByte(); const StationSpec *srcstatspec = _cur_grffile->stations[srcid]; statspec->lengths = srcstatspec->lengths; @@ -1281,40 +1273,40 @@ static ChangeInfoResult StationChangeInfo(uint stid, int numinfo, int prop, Byte } break; case 0x10: // Little/lots cargo threshold - statspec->cargo_threshold = grf_load_word(&buf); + statspec->cargo_threshold = buf->ReadWord(); break; case 0x11: // Pylon placement - statspec->pylons = grf_load_byte(&buf); + statspec->pylons = buf->ReadByte(); break; case 0x12: // Cargo types for random triggers - statspec->cargo_triggers = grf_load_dword(&buf); + statspec->cargo_triggers = buf->ReadDWord(); break; case 0x13: // General flags - statspec->flags = grf_load_byte(&buf); + statspec->flags = buf->ReadByte(); break; case 0x14: // Overhead wire placement - statspec->wires = grf_load_byte(&buf); + statspec->wires = buf->ReadByte(); break; case 0x15: // Blocked tiles - statspec->blocked = grf_load_byte(&buf); + statspec->blocked = buf->ReadByte(); break; case 0x16: // Animation info - statspec->anim_frames = grf_load_byte(&buf); - statspec->anim_status = grf_load_byte(&buf); + statspec->anim_frames = buf->ReadByte(); + statspec->anim_status = buf->ReadByte(); break; case 0x17: // Animation speed - statspec->anim_speed = grf_load_byte(&buf); + statspec->anim_speed = buf->ReadByte(); break; case 0x18: // Animation triggers - statspec->anim_triggers = grf_load_word(&buf); + statspec->anim_triggers = buf->ReadWord(); break; default: @@ -1340,11 +1332,11 @@ static ChangeInfoResult CanalChangeInfo(uint id, int numinfo, int prop, ByteRead switch (prop) { case 0x08: - wf->callback_mask = grf_load_byte(&buf); + wf->callback_mask = buf->ReadByte(); break; case 0x09: - wf->flags = grf_load_byte(&buf); + wf->flags = buf->ReadByte(); break; default: @@ -1371,30 +1363,30 @@ static ChangeInfoResult BridgeChangeInfo(uint brid, int numinfo, int prop, ByteR switch (prop) { case 0x08: { // Year of availability /* We treat '0' as always available */ - byte year = grf_load_byte(&buf); + byte year = buf->ReadByte(); bridge->avail_year = (year > 0 ? ORIGINAL_BASE_YEAR + year : 0); break; } case 0x09: // Minimum length - bridge->min_length = grf_load_byte(&buf); + bridge->min_length = buf->ReadByte(); break; case 0x0A: // Maximum length - bridge->max_length = grf_load_byte(&buf); + bridge->max_length = buf->ReadByte(); break; case 0x0B: // Cost factor - bridge->price = grf_load_byte(&buf); + bridge->price = buf->ReadByte(); break; case 0x0C: // Maximum speed - bridge->speed = grf_load_word(&buf); + bridge->speed = buf->ReadWord(); break; case 0x0D: { // Bridge sprite tables - byte tableid = grf_load_byte(&buf); - byte numtables = grf_load_byte(&buf); + byte tableid = buf->ReadByte(); + byte numtables = buf->ReadByte(); if (bridge->sprite_table == NULL) { /* Allocate memory for sprite table pointers and zero out */ @@ -1404,7 +1396,7 @@ static ChangeInfoResult BridgeChangeInfo(uint brid, int numinfo, int prop, ByteR for (; numtables-- != 0; tableid++) { if (tableid >= 7) { // skip invalid data grfmsg(1, "BridgeChangeInfo: Table %d >= 7, skipping", tableid); - for (byte sprite = 0; sprite < 32; sprite++) grf_load_dword(&buf); + for (byte sprite = 0; sprite < 32; sprite++) buf->ReadDWord(); continue; } @@ -1413,8 +1405,8 @@ static ChangeInfoResult BridgeChangeInfo(uint brid, int numinfo, int prop, ByteR } for (byte sprite = 0; sprite < 32; sprite++) { - SpriteID image = grf_load_word(&buf); - PaletteID pal = grf_load_word(&buf); + SpriteID image = buf->ReadWord(); + PaletteID pal = buf->ReadWord(); bridge->sprite_table[tableid][sprite].sprite = image; bridge->sprite_table[tableid][sprite].pal = pal; @@ -1425,26 +1417,26 @@ static ChangeInfoResult BridgeChangeInfo(uint brid, int numinfo, int prop, ByteR } break; case 0x0E: // Flags; bit 0 - disable far pillars - bridge->flags = grf_load_byte(&buf); + bridge->flags = buf->ReadByte(); break; case 0x0F: // Long format year of availability (year since year 0) - bridge->avail_year = Clamp(grf_load_dword(&buf), MIN_YEAR, MAX_YEAR); + bridge->avail_year = Clamp(buf->ReadDWord(), MIN_YEAR, MAX_YEAR); break; case 0x10: { // purchase string - StringID newone = GetGRFStringID(_cur_grffile->grfid, grf_load_word(&buf)); + StringID newone = GetGRFStringID(_cur_grffile->grfid, buf->ReadWord()); if (newone != STR_UNDEFINED) bridge->material = newone; } break; case 0x11: // description of bridge with rails or roads case 0x12: { - StringID newone = GetGRFStringID(_cur_grffile->grfid, grf_load_word(&buf)); + StringID newone = GetGRFStringID(_cur_grffile->grfid, buf->ReadWord()); if (newone != STR_UNDEFINED) bridge->transport_name[prop - 0x11] = newone; } break; case 0x13: // 16 bits cost multiplier - bridge->price = grf_load_word(&buf); + bridge->price = buf->ReadWord(); break; default: @@ -1481,7 +1473,7 @@ static ChangeInfoResult TownHouseChangeInfo(uint hid, int numinfo, int prop, Byt switch (prop) { case 0x08: { // Substitute building type, and definition of a new house HouseSpec **house = &_cur_grffile->housespec[hid + i]; - byte subs_id = grf_load_byte(&buf); + byte subs_id = buf->ReadByte(); if (subs_id == 0xFF) { /* Instead of defining a new house, a substitute house id @@ -1529,30 +1521,30 @@ static ChangeInfoResult TownHouseChangeInfo(uint hid, int numinfo, int prop, Byt } break; case 0x09: // Building flags - housespec->building_flags = (BuildingFlags)grf_load_byte(&buf); + housespec->building_flags = (BuildingFlags)buf->ReadByte(); break; case 0x0A: { // Availability years - uint16 years = grf_load_word(&buf); + uint16 years = buf->ReadWord(); housespec->min_year = GB(years, 0, 8) > 150 ? MAX_YEAR : ORIGINAL_BASE_YEAR + GB(years, 0, 8); housespec->max_year = GB(years, 8, 8) > 150 ? MAX_YEAR : ORIGINAL_BASE_YEAR + GB(years, 8, 8); } break; case 0x0B: // Population - housespec->population = grf_load_byte(&buf); + housespec->population = buf->ReadByte(); break; case 0x0C: // Mail generation multiplier - housespec->mail_generation = grf_load_byte(&buf); + housespec->mail_generation = buf->ReadByte(); break; case 0x0D: // Passenger acceptance case 0x0E: // Mail acceptance - housespec->cargo_acceptance[prop - 0x0D] = grf_load_byte(&buf); + housespec->cargo_acceptance[prop - 0x0D] = buf->ReadByte(); break; case 0x0F: { // Goods/candy, food/fizzy drinks acceptance - int8 goods = grf_load_byte(&buf); + int8 goods = buf->ReadByte(); /* If value of goods is negative, it means in fact food or, if in toyland, fizzy_drink acceptance. * Else, we have "standard" 3rd cargo type, goods or candy, for toyland once more */ @@ -1567,28 +1559,28 @@ static ChangeInfoResult TownHouseChangeInfo(uint hid, int numinfo, int prop, Byt } break; case 0x10: // Local authority rating decrease on removal - housespec->remove_rating_decrease = grf_load_word(&buf); + housespec->remove_rating_decrease = buf->ReadWord(); break; case 0x11: // Removal cost multiplier - housespec->removal_cost = grf_load_byte(&buf); + housespec->removal_cost = buf->ReadByte(); break; case 0x12: // Building name ID - housespec->building_name = grf_load_word(&buf); + housespec->building_name = buf->ReadWord(); _string_to_grf_mapping[&housespec->building_name] = _cur_grffile->grfid; break; case 0x13: // Building availability mask - housespec->building_availability = (HouseZones)grf_load_word(&buf); + housespec->building_availability = (HouseZones)buf->ReadWord(); break; case 0x14: // House callback mask - housespec->callback_mask |= grf_load_byte(&buf); + housespec->callback_mask |= buf->ReadByte(); break; case 0x15: { // House override byte - byte override = grf_load_byte(&buf); + byte override = buf->ReadByte(); /* The house being overridden must be an original house. */ if (override >= NEW_HOUSE_OFFSET) { @@ -1600,39 +1592,39 @@ static ChangeInfoResult TownHouseChangeInfo(uint hid, int numinfo, int prop, Byt } break; case 0x16: // Periodic refresh multiplier - housespec->processing_time = grf_load_byte(&buf); + housespec->processing_time = buf->ReadByte(); break; case 0x17: // Four random colours to use - for (uint j = 0; j < 4; j++) housespec->random_colour[j] = grf_load_byte(&buf); + for (uint j = 0; j < 4; j++) housespec->random_colour[j] = buf->ReadByte(); break; case 0x18: // Relative probability of appearing - housespec->probability = grf_load_byte(&buf); + housespec->probability = buf->ReadByte(); break; case 0x19: // Extra flags - housespec->extra_flags = (HouseExtraFlags)grf_load_byte(&buf); + housespec->extra_flags = (HouseExtraFlags)buf->ReadByte(); break; case 0x1A: // Animation frames - housespec->animation_frames = grf_load_byte(&buf); + housespec->animation_frames = buf->ReadByte(); break; case 0x1B: // Animation speed - housespec->animation_speed = Clamp(grf_load_byte(&buf), 2, 16); + housespec->animation_speed = Clamp(buf->ReadByte(), 2, 16); break; case 0x1C: // Class of the building type - housespec->class_id = AllocateHouseClassID(grf_load_byte(&buf), _cur_grffile->grfid); + housespec->class_id = AllocateHouseClassID(buf->ReadByte(), _cur_grffile->grfid); break; case 0x1D: // Callback mask part 2 - housespec->callback_mask |= (grf_load_byte(&buf) << 8); + housespec->callback_mask |= (buf->ReadByte() << 8); break; case 0x1E: { // Accepted cargo types - uint32 cargotypes = grf_load_dword(&buf); + uint32 cargotypes = buf->ReadDWord(); /* Check if the cargo types should not be changed */ if (cargotypes == 0xFFFFFFFF) break; @@ -1652,21 +1644,21 @@ static ChangeInfoResult TownHouseChangeInfo(uint hid, int numinfo, int prop, Byt } break; case 0x1F: // Minimum life span - housespec->minimum_life = grf_load_byte(&buf); + housespec->minimum_life = buf->ReadByte(); break; case 0x20: { // @todo Cargo acceptance watch list - byte count = grf_load_byte(&buf); - for (byte j = 0; j < count; j++) grf_load_byte(&buf); + byte count = buf->ReadByte(); + for (byte j = 0; j < count; j++) buf->ReadByte(); ret = CIR_UNHANDLED; } break; case 0x21: // long introduction year - housespec->min_year = grf_load_word(&buf); + housespec->min_year = buf->ReadWord(); break; case 0x22: // long maximum year - housespec->max_year = grf_load_word(&buf); + housespec->max_year = buf->ReadWord(); break; default: @@ -1685,7 +1677,7 @@ static ChangeInfoResult GlobalVarChangeInfo(uint gvid, int numinfo, int prop, By for (int i = 0; i < numinfo; i++) { switch (prop) { case 0x08: { // Cost base factor - int factor = grf_load_byte(&buf); + int factor = buf->ReadByte(); uint price = gvid + i; if (price < PR_END) { @@ -1703,7 +1695,7 @@ static ChangeInfoResult GlobalVarChangeInfo(uint gvid, int numinfo, int prop, By case 0x0A: { // Currency display names uint curidx = GetNewgrfCurrencyIdConverted(gvid + i); - StringID newone = GetGRFStringID(_cur_grffile->grfid, grf_load_word(&buf)); + StringID newone = GetGRFStringID(_cur_grffile->grfid, buf->ReadWord()); if ((newone != STR_UNDEFINED) && (curidx < NUM_CURRENCY)) { _currency_specs[curidx].name = newone; @@ -1712,7 +1704,7 @@ static ChangeInfoResult GlobalVarChangeInfo(uint gvid, int numinfo, int prop, By case 0x0B: { // Currency multipliers uint curidx = GetNewgrfCurrencyIdConverted(gvid + i); - uint32 rate = grf_load_dword(&buf); + uint32 rate = buf->ReadDWord(); if (curidx < NUM_CURRENCY) { /* TTDPatch uses a multiple of 1000 for its conversion calculations, @@ -1726,7 +1718,7 @@ static ChangeInfoResult GlobalVarChangeInfo(uint gvid, int numinfo, int prop, By case 0x0C: { // Currency options uint curidx = GetNewgrfCurrencyIdConverted(gvid + i); - uint16 options = grf_load_word(&buf); + uint16 options = buf->ReadWord(); if (curidx < NUM_CURRENCY) { _currency_specs[curidx].separator[0] = GB(options, 0, 8); @@ -1741,7 +1733,7 @@ static ChangeInfoResult GlobalVarChangeInfo(uint gvid, int numinfo, int prop, By case 0x0D: { // Currency prefix symbol uint curidx = GetNewgrfCurrencyIdConverted(gvid + i); - uint32 tempfix = grf_load_dword(&buf); + uint32 tempfix = buf->ReadDWord(); if (curidx < NUM_CURRENCY) { memcpy(_currency_specs[curidx].prefix, &tempfix, 4); @@ -1753,7 +1745,7 @@ static ChangeInfoResult GlobalVarChangeInfo(uint gvid, int numinfo, int prop, By case 0x0E: { // Currency suffix symbol uint curidx = GetNewgrfCurrencyIdConverted(gvid + i); - uint32 tempfix = grf_load_dword(&buf); + uint32 tempfix = buf->ReadDWord(); if (curidx < NUM_CURRENCY) { memcpy(&_currency_specs[curidx].suffix, &tempfix, 4); @@ -1765,7 +1757,7 @@ static ChangeInfoResult GlobalVarChangeInfo(uint gvid, int numinfo, int prop, By case 0x0F: { // Euro introduction dates uint curidx = GetNewgrfCurrencyIdConverted(gvid + i); - Year year_euro = grf_load_word(&buf); + Year year_euro = buf->ReadWord(); if (curidx < NUM_CURRENCY) { _currency_specs[curidx].to_euro = year_euro; @@ -1784,7 +1776,7 @@ static ChangeInfoResult GlobalVarChangeInfo(uint gvid, int numinfo, int prop, By for (uint i = 0; i < SNOW_LINE_MONTHS; i++) { for (uint j = 0; j < SNOW_LINE_DAYS; j++) { - table[i][j] = grf_load_byte(&buf); + table[i][j] = buf->ReadByte(); } } SetSnowLine(table); @@ -1819,7 +1811,7 @@ static ChangeInfoResult GlobalVarReserveInfo(uint gvid, int numinfo, int prop, B for (int i = 0; i < numinfo; i++) { switch (prop) { case 0x08: // Cost base factor - grf_load_byte(&buf); + buf->ReadByte(); break; case 0x09: { // Cargo Translation Table @@ -1834,7 +1826,7 @@ static ChangeInfoResult GlobalVarReserveInfo(uint gvid, int numinfo, int prop, B _cur_grffile->cargo_list = MallocT<CargoLabel>(numinfo); } - CargoLabel cl = grf_load_dword(&buf); + CargoLabel cl = buf->ReadDWord(); _cur_grffile->cargo_list[i] = BSWAP32(cl); break; } @@ -1842,13 +1834,13 @@ static ChangeInfoResult GlobalVarReserveInfo(uint gvid, int numinfo, int prop, B case 0x0A: // Currency display names case 0x0C: // Currency options case 0x0F: // Euro introduction dates - grf_load_word(&buf); + buf->ReadWord(); break; case 0x0B: // Currency multipliers case 0x0D: // Currency prefix symbol case 0x0E: // Currency suffix symbol - grf_load_dword(&buf); + buf->ReadDWord(); break; case 0x10: // Snow line height table @@ -1856,8 +1848,8 @@ static ChangeInfoResult GlobalVarReserveInfo(uint gvid, int numinfo, int prop, B break; case 0x11: { // GRF match for engine allocation - uint32 s = grf_load_dword(&buf); - uint32 t = grf_load_dword(&buf); + uint32 s = buf->ReadDWord(); + uint32 t = buf->ReadDWord(); SetNewGRFOverride(s, t); break; } @@ -1874,7 +1866,7 @@ static ChangeInfoResult GlobalVarReserveInfo(uint gvid, int numinfo, int prop, B _cur_grffile->railtype_list = MallocT<RailTypeLabel>(numinfo); } - RailTypeLabel rtl = grf_load_dword(&buf); + RailTypeLabel rtl = buf->ReadDWord(); _cur_grffile->railtype_list[i] = BSWAP32(rtl); break; } @@ -1903,7 +1895,7 @@ static ChangeInfoResult CargoChangeInfo(uint cid, int numinfo, int prop, ByteRea switch (prop) { case 0x08: // Bit number of cargo - cs->bitnum = grf_load_byte(&buf); + cs->bitnum = buf->ReadByte(); if (cs->IsValid()) { cs->grffile = _cur_grffile; SetBit(_cargo_mask, cid + i); @@ -1913,75 +1905,75 @@ static ChangeInfoResult CargoChangeInfo(uint cid, int numinfo, int prop, ByteRea break; case 0x09: // String ID for cargo type name - cs->name = grf_load_word(&buf); + cs->name = buf->ReadWord(); _string_to_grf_mapping[&cs->name] = _cur_grffile->grfid; break; case 0x0A: // String for 1 unit of cargo - cs->name_single = grf_load_word(&buf); + cs->name_single = buf->ReadWord(); _string_to_grf_mapping[&cs->name_single] = _cur_grffile->grfid; break; case 0x0B: /* String for units of cargo. This is different in OpenTTD to TTDPatch * (e.g. 10 tonnes of coal) */ - cs->units_volume = grf_load_word(&buf); + cs->units_volume = buf->ReadWord(); _string_to_grf_mapping[&cs->units_volume] = _cur_grffile->grfid; break; case 0x0C: // String for quantity of cargo (e.g. 10 tonnes of coal) - cs->quantifier = grf_load_word(&buf); + cs->quantifier = buf->ReadWord(); _string_to_grf_mapping[&cs->quantifier] = _cur_grffile->grfid; break; case 0x0D: // String for two letter cargo abbreviation - cs->abbrev = grf_load_word(&buf); + cs->abbrev = buf->ReadWord(); _string_to_grf_mapping[&cs->abbrev] = _cur_grffile->grfid; break; case 0x0E: // Sprite ID for cargo icon - cs->sprite = grf_load_word(&buf); + cs->sprite = buf->ReadWord(); break; case 0x0F: // Weight of one unit of cargo - cs->weight = grf_load_byte(&buf); + cs->weight = buf->ReadByte(); break; case 0x10: // Used for payment calculation - cs->transit_days[0] = grf_load_byte(&buf); + cs->transit_days[0] = buf->ReadByte(); break; case 0x11: // Used for payment calculation - cs->transit_days[1] = grf_load_byte(&buf); + cs->transit_days[1] = buf->ReadByte(); break; case 0x12: // Base cargo price - cs->initial_payment = grf_load_dword(&buf); + cs->initial_payment = buf->ReadDWord(); break; case 0x13: // Colour for station rating bars - cs->rating_colour = MapDOSColour(grf_load_byte(&buf)); + cs->rating_colour = MapDOSColour(buf->ReadByte()); break; case 0x14: // Colour for cargo graph - cs->legend_colour = MapDOSColour(grf_load_byte(&buf)); + cs->legend_colour = MapDOSColour(buf->ReadByte()); break; case 0x15: // Freight status - cs->is_freight = (grf_load_byte(&buf) != 0); + cs->is_freight = (buf->ReadByte() != 0); break; case 0x16: // Cargo classes - cs->classes = grf_load_word(&buf); + cs->classes = buf->ReadWord(); break; case 0x17: // Cargo label - cs->label = grf_load_dword(&buf); + cs->label = buf->ReadDWord(); cs->label = BSWAP32(cs->label); break; case 0x18: { // Town growth substitute type - uint8 substitute_type = grf_load_byte(&buf); + uint8 substitute_type = buf->ReadByte(); switch (substitute_type) { case 0x00: cs->town_effect = TE_PASSENGERS; break; @@ -1996,11 +1988,11 @@ static ChangeInfoResult CargoChangeInfo(uint cid, int numinfo, int prop, ByteRea } break; case 0x19: // Town growth coefficient - cs->multipliertowngrowth = grf_load_word(&buf); + cs->multipliertowngrowth = buf->ReadWord(); break; case 0x1A: // Bitmask of callbacks to use - cs->callback_mask = grf_load_byte(&buf); + cs->callback_mask = buf->ReadByte(); break; default: @@ -2032,15 +2024,15 @@ static ChangeInfoResult SoundEffectChangeInfo(uint sid, int numinfo, int prop, B switch (prop) { case 0x08: // Relative volume - GetSound(sound)->volume = grf_load_byte(&buf); + GetSound(sound)->volume = buf->ReadByte(); break; case 0x09: // Priority - GetSound(sound)->priority = grf_load_byte(&buf); + GetSound(sound)->priority = buf->ReadByte(); break; case 0x0A: { // Override old sound - SoundID orig_sound = grf_load_byte(&buf); + SoundID orig_sound = buf->ReadByte(); if (orig_sound >= ORIGINAL_SAMPLE_COUNT) { grfmsg(1, "SoundEffectChangeInfo: Original sound %d not defined (max %d)", orig_sound, ORIGINAL_SAMPLE_COUNT); @@ -2087,7 +2079,7 @@ static ChangeInfoResult IndustrytilesChangeInfo(uint indtid, int numinfo, int pr switch (prop) { case 0x08: { // Substitute industry tile type IndustryTileSpec **tilespec = &_cur_grffile->indtspec[indtid + i]; - byte subs_id = grf_load_byte(&buf); + byte subs_id = buf->ReadByte(); if (subs_id >= NEW_INDUSTRYTILEOFFSET) { /* The substitute id must be one of the original industry tile. */ @@ -2118,7 +2110,7 @@ static ChangeInfoResult IndustrytilesChangeInfo(uint indtid, int numinfo, int pr } break; case 0x09: { // Industry tile override - byte ovrid = grf_load_byte(&buf); + byte ovrid = buf->ReadByte(); /* The industry being overridden must be an original industry. */ if (ovrid >= NEW_INDUSTRYTILEOFFSET) { @@ -2132,33 +2124,33 @@ static ChangeInfoResult IndustrytilesChangeInfo(uint indtid, int numinfo, int pr case 0x0A: // Tile acceptance case 0x0B: case 0x0C: { - uint16 acctp = grf_load_word(&buf); + uint16 acctp = buf->ReadWord(); tsp->accepts_cargo[prop - 0x0A] = GetCargoTranslation(GB(acctp, 0, 8), _cur_grffile); tsp->acceptance[prop - 0x0A] = GB(acctp, 8, 8); } break; case 0x0D: // Land shape flags - tsp->slopes_refused = (Slope)grf_load_byte(&buf); + tsp->slopes_refused = (Slope)buf->ReadByte(); break; case 0x0E: // Callback mask - tsp->callback_mask = grf_load_byte(&buf); + tsp->callback_mask = buf->ReadByte(); break; case 0x0F: // Animation information - tsp->animation_info = grf_load_word(&buf); + tsp->animation_info = buf->ReadWord(); break; case 0x10: // Animation speed - tsp->animation_speed = grf_load_byte(&buf); + tsp->animation_speed = buf->ReadByte(); break; case 0x11: // Triggers for callback 25 - tsp->animation_triggers = grf_load_byte(&buf); + tsp->animation_triggers = buf->ReadByte(); break; case 0x12: // Special flags - tsp->animation_special_flags = grf_load_byte(&buf); + tsp->animation_special_flags = buf->ReadByte(); break; default: @@ -2216,7 +2208,7 @@ static ChangeInfoResult IndustriesChangeInfo(uint indid, int numinfo, int prop, switch (prop) { case 0x08: { // Substitute industry type IndustrySpec **indspec = &_cur_grffile->industryspec[indid + i]; - byte subs_id = grf_load_byte(&buf); + byte subs_id = buf->ReadByte(); if (subs_id == 0xFF) { /* Instead of defining a new industry, a substitute industry id @@ -2248,7 +2240,7 @@ static ChangeInfoResult IndustriesChangeInfo(uint indid, int numinfo, int prop, } break; case 0x09: { // Industry type override - byte ovrid = grf_load_byte(&buf); + byte ovrid = buf->ReadByte(); /* The industry being overridden must be an original industry. */ if (ovrid >= NEW_INDUSTRYOFFSET) { @@ -2260,13 +2252,13 @@ static ChangeInfoResult IndustriesChangeInfo(uint indid, int numinfo, int prop, } break; case 0x0A: { // Set industry layout(s) - indsp->num_table = grf_load_byte(&buf); // Number of layaouts + indsp->num_table = buf->ReadByte(); // Number of layaouts /* We read the total size in bytes, but we can't rely on the * newgrf to provide a sane value. First assume the value is * sane but later on we make sure we enlarge the array if the * newgrf contains more data. Each tile uses either 3 or 5 * bytes, so to play it safe we assume 3. */ - uint32 def_num_tiles = grf_load_dword(&buf) / 3 + 1; + uint32 def_num_tiles = buf->ReadDWord() / 3 + 1; IndustryTileTable **tile_table = CallocT<IndustryTileTable*>(indsp->num_table); // Table with tiles to compose an industry IndustryTileTable *itt = CallocT<IndustryTileTable>(def_num_tiles); // Temporary array to read the tile layouts from the GRF uint size; @@ -2282,12 +2274,12 @@ static ChangeInfoResult IndustriesChangeInfo(uint indid, int numinfo, int prop, itt = ReallocT<IndustryTileTable>(itt, def_num_tiles); } - itt[k].ti.x = grf_load_byte(&buf); // Offsets from northermost tile + itt[k].ti.x = buf->ReadByte(); // Offsets from northermost tile if (itt[k].ti.x == 0xFE && k == 0) { /* This means we have to borrow the layout from an old industry */ - IndustryType type = grf_load_byte(&buf); // industry holding required layout - byte laynbr = grf_load_byte(&buf); // layout number to borrow + IndustryType type = buf->ReadByte(); // industry holding required layout + byte laynbr = buf->ReadByte(); // layout number to borrow copy_from = _origin_industry_specs[type].table[laynbr]; for (size = 1;; size++) { @@ -2296,7 +2288,7 @@ static ChangeInfoResult IndustriesChangeInfo(uint indid, int numinfo, int prop, break; } - itt[k].ti.y = grf_load_byte(&buf); // Or table definition finalisation + itt[k].ti.y = buf->ReadByte(); // Or table definition finalisation if (itt[k].ti.x == 0 && itt[k].ti.y == 0x80) { /* Not the same terminator. The one we are using is rather @@ -2310,11 +2302,11 @@ static ChangeInfoResult IndustriesChangeInfo(uint indid, int numinfo, int prop, break; } - itt[k].gfx = grf_load_byte(&buf); + itt[k].gfx = buf->ReadByte(); if (itt[k].gfx == 0xFE) { /* Use a new tile from this GRF */ - int local_tile_id = grf_load_word(&buf); + int local_tile_id = buf->ReadWord(); /* Read the ID from the _industile_mngr. */ int tempid = _industile_mngr.GetID(local_tile_id, _cur_grffile->grfid); @@ -2359,57 +2351,57 @@ static ChangeInfoResult IndustriesChangeInfo(uint indid, int numinfo, int prop, } break; case 0x0B: // Industry production flags - indsp->life_type = (IndustryLifeType)grf_load_byte(&buf); + indsp->life_type = (IndustryLifeType)buf->ReadByte(); break; case 0x0C: // Industry closure message - indsp->closure_text = grf_load_word(&buf); + indsp->closure_text = buf->ReadWord(); _string_to_grf_mapping[&indsp->closure_text] = _cur_grffile->grfid; break; case 0x0D: // Production increase message - indsp->production_up_text = grf_load_word(&buf); + indsp->production_up_text = buf->ReadWord(); _string_to_grf_mapping[&indsp->production_up_text] = _cur_grffile->grfid; break; case 0x0E: // Production decrease message - indsp->production_down_text = grf_load_word(&buf); + indsp->production_down_text = buf->ReadWord(); _string_to_grf_mapping[&indsp->production_down_text] = _cur_grffile->grfid; break; case 0x0F: // Fund cost multiplier - indsp->cost_multiplier = grf_load_byte(&buf); + indsp->cost_multiplier = buf->ReadByte(); break; case 0x10: // Production cargo types for (byte j = 0; j < 2; j++) { - indsp->produced_cargo[j] = GetCargoTranslation(grf_load_byte(&buf), _cur_grffile); + indsp->produced_cargo[j] = GetCargoTranslation(buf->ReadByte(), _cur_grffile); } break; case 0x11: // Acceptance cargo types for (byte j = 0; j < 3; j++) { - indsp->accepts_cargo[j] = GetCargoTranslation(grf_load_byte(&buf), _cur_grffile); + indsp->accepts_cargo[j] = GetCargoTranslation(buf->ReadByte(), _cur_grffile); } - grf_load_byte(&buf); // Unnused, eat it up + buf->ReadByte(); // Unnused, eat it up break; case 0x12: // Production multipliers case 0x13: - indsp->production_rate[prop - 0x12] = grf_load_byte(&buf); + indsp->production_rate[prop - 0x12] = buf->ReadByte(); break; case 0x14: // Minimal amount of cargo distributed - indsp->minimal_cargo = grf_load_byte(&buf); + indsp->minimal_cargo = buf->ReadByte(); break; case 0x15: { // Random sound effects - indsp->number_of_sounds = grf_load_byte(&buf); + indsp->number_of_sounds = buf->ReadByte(); uint8 *sounds = MallocT<uint8>(indsp->number_of_sounds); try { for (uint8 j = 0; j < indsp->number_of_sounds; j++) { - sounds[j] = grf_load_byte(&buf); + sounds[j] = buf->ReadByte(); } } catch (...) { free(sounds); @@ -2421,59 +2413,59 @@ static ChangeInfoResult IndustriesChangeInfo(uint indid, int numinfo, int prop, } break; case 0x16: // Conflicting industry types - for (byte j = 0; j < 3; j++) indsp->conflicting[j] = grf_load_byte(&buf); + for (byte j = 0; j < 3; j++) indsp->conflicting[j] = buf->ReadByte(); break; case 0x17: // Probability in random game - indsp->appear_creation[_settings_game.game_creation.landscape] = grf_load_byte(&buf); + indsp->appear_creation[_settings_game.game_creation.landscape] = buf->ReadByte(); break; case 0x18: // Probability during gameplay - indsp->appear_ingame[_settings_game.game_creation.landscape] = grf_load_byte(&buf); + indsp->appear_ingame[_settings_game.game_creation.landscape] = buf->ReadByte(); break; case 0x19: // Map colour - indsp->map_colour = MapDOSColour(grf_load_byte(&buf)); + indsp->map_colour = MapDOSColour(buf->ReadByte()); break; case 0x1A: // Special industry flags to define special behavior - indsp->behaviour = (IndustryBehaviour)grf_load_dword(&buf); + indsp->behaviour = (IndustryBehaviour)buf->ReadDWord(); break; case 0x1B: // New industry text ID - indsp->new_industry_text = grf_load_word(&buf); + indsp->new_industry_text = buf->ReadWord(); _string_to_grf_mapping[&indsp->new_industry_text] = _cur_grffile->grfid; break; case 0x1C: // Input cargo multipliers for the three input cargo types case 0x1D: case 0x1E: { - uint32 multiples = grf_load_dword(&buf); + uint32 multiples = buf->ReadDWord(); indsp->input_cargo_multiplier[prop - 0x1C][0] = GB(multiples, 0, 16); indsp->input_cargo_multiplier[prop - 0x1C][1] = GB(multiples, 16, 16); } break; case 0x1F: // Industry name - indsp->name = grf_load_word(&buf); + indsp->name = buf->ReadWord(); _string_to_grf_mapping[&indsp->name] = _cur_grffile->grfid; break; case 0x20: // Prospecting success chance - indsp->prospecting_chance = grf_load_dword(&buf); + indsp->prospecting_chance = buf->ReadDWord(); break; case 0x21: // Callback mask case 0x22: { // Callback additional mask - byte aflag = grf_load_byte(&buf); + byte aflag = buf->ReadByte(); SB(indsp->callback_mask, (prop - 0x21) * 8, 8, aflag); } break; case 0x23: // removal cost multiplier - indsp->removal_cost_multiplier = grf_load_dword(&buf); + indsp->removal_cost_multiplier = buf->ReadDWord(); break; case 0x24: // name for nearby station - indsp->station_name = grf_load_word(&buf); + indsp->station_name = buf->ReadWord(); _string_to_grf_mapping[&indsp->station_name] = _cur_grffile->grfid; break; @@ -2543,10 +2535,10 @@ static void FeatureChangeInfo(ByteReader *buf) /* GSF_SOUNDFX */ SoundEffectChangeInfo, }; - uint8 feature = grf_load_byte(&buf); - uint8 numprops = grf_load_byte(&buf); - uint numinfo = grf_load_byte(&buf); - uint engine = grf_load_extended(&buf); + uint8 feature = buf->ReadByte(); + uint8 numprops = buf->ReadByte(); + uint numinfo = buf->ReadByte(); + uint engine = buf->ReadExtended(); grfmsg(6, "FeatureChangeInfo: feature %d, %d properties, to apply to %d+%d", feature, numprops, engine, numinfo); @@ -2560,7 +2552,7 @@ static void FeatureChangeInfo(ByteReader *buf) SetBit(_cur_grffile->grf_features, feature); while (numprops-- && buf->HasData()) { - uint8 prop = grf_load_byte(&buf); + uint8 prop = buf->ReadByte(); ChangeInfoResult cir = handler[feature](engine, numinfo, prop, buf); if (HandleChangeInfoResult("FeatureChangeInfo", cir, feature, prop)) return; @@ -2570,24 +2562,24 @@ static void FeatureChangeInfo(ByteReader *buf) /* Action 0x00 (GLS_SAFETYSCAN) */ static void SafeChangeInfo(ByteReader *buf) { - uint8 feature = grf_load_byte(&buf); - uint8 numprops = grf_load_byte(&buf); - uint numinfo = grf_load_byte(&buf); - grf_load_extended(&buf); // id + uint8 feature = buf->ReadByte(); + uint8 numprops = buf->ReadByte(); + uint numinfo = buf->ReadByte(); + buf->ReadExtended(); // id if (feature == GSF_BRIDGE && numprops == 1) { - uint8 prop = grf_load_byte(&buf); + uint8 prop = buf->ReadByte(); /* Bridge property 0x0D is redefinition of sprite layout tables, which * is considered safe. */ if (prop == 0x0D) return; } else if (feature == GSF_GLOBALVAR && numprops == 1) { - uint8 prop = grf_load_byte(&buf); + uint8 prop = buf->ReadByte(); /* Engine ID Mappings are safe, if the source is static */ if (prop == 0x11) { bool is_safe = true; for (uint i = 0; i < numinfo; i++) { - uint32 s = grf_load_dword(&buf); - grf_load_dword(&buf); // dest + uint32 s = buf->ReadDWord(); + buf->ReadDWord(); // dest const GRFConfig *grfconfig = GetGRFConfig(s); if (grfconfig != NULL && !HasBit(grfconfig->flags, GCF_STATIC)) { is_safe = false; @@ -2607,16 +2599,16 @@ static void SafeChangeInfo(ByteReader *buf) /* Action 0x00 (GLS_RESERVE) */ static void ReserveChangeInfo(ByteReader *buf) { - uint8 feature = grf_load_byte(&buf); + uint8 feature = buf->ReadByte(); if (feature != GSF_CARGOS && feature != GSF_GLOBALVAR) return; - uint8 numprops = grf_load_byte(&buf); - uint8 numinfo = grf_load_byte(&buf); - uint8 index = grf_load_extended(&buf); + uint8 numprops = buf->ReadByte(); + uint8 numinfo = buf->ReadByte(); + uint8 index = buf->ReadExtended(); while (numprops-- && buf->HasData()) { - uint8 prop = grf_load_byte(&buf); + uint8 prop = buf->ReadByte(); ChangeInfoResult cir = CIR_SUCCESS; switch (feature) { @@ -2649,9 +2641,9 @@ static void NewSpriteSet(ByteReader *buf) * In that case, use num-dirs=4. */ - uint8 feature = grf_load_byte(&buf); - uint8 num_sets = grf_load_byte(&buf); - uint16 num_ents = grf_load_extended(&buf); + uint8 feature = buf->ReadByte(); + uint8 num_sets = buf->ReadByte(); + uint16 num_ents = buf->ReadExtended(); _cur_grffile->spriteset_start = _cur_spriteid; _cur_grffile->spriteset_feature = feature; @@ -2671,9 +2663,9 @@ static void NewSpriteSet(ByteReader *buf) /* Action 0x01 (SKIP) */ static void SkipAct1(ByteReader *buf) { - grf_load_byte(&buf); - uint8 num_sets = grf_load_byte(&buf); - uint16 num_ents = grf_load_extended(&buf); + buf->ReadByte(); + uint8 num_sets = buf->ReadByte(); + uint16 num_ents = buf->ReadExtended(); _skip_sprites = num_sets * num_ents; @@ -2740,9 +2732,9 @@ static void NewSpriteGroup(ByteReader *buf) * V feature-specific-data (huge mess, don't even look it up --pasky) */ SpriteGroup *act_group = NULL; - uint8 feature = grf_load_byte(&buf); - uint8 setid = grf_load_byte(&buf); - uint8 type = grf_load_byte(&buf); + uint8 feature = buf->ReadByte(); + uint8 setid = buf->ReadByte(); + uint8 type = buf->ReadByte(); if (setid >= _cur_grffile->spritegroups_count) { /* Allocate memory for new sprite group references. */ @@ -2791,23 +2783,23 @@ static void NewSpriteGroup(ByteReader *buf) adjust = &group->adjusts[group->num_adjusts - 1]; /* The first var adjust doesn't have an operation specified, so we set it to add. */ - adjust->operation = group->num_adjusts == 1 ? DSGA_OP_ADD : (DeterministicSpriteGroupAdjustOperation)grf_load_byte(&buf); - adjust->variable = grf_load_byte(&buf); + adjust->operation = group->num_adjusts == 1 ? DSGA_OP_ADD : (DeterministicSpriteGroupAdjustOperation)buf->ReadByte(); + adjust->variable = buf->ReadByte(); if (adjust->variable == 0x7E) { /* Link subroutine group */ - adjust->subroutine = GetGroupFromGroupID(setid, type, grf_load_byte(&buf)); + adjust->subroutine = GetGroupFromGroupID(setid, type, buf->ReadByte()); } else { - adjust->parameter = IsInsideMM(adjust->variable, 0x60, 0x80) ? grf_load_byte(&buf) : 0; + adjust->parameter = IsInsideMM(adjust->variable, 0x60, 0x80) ? buf->ReadByte() : 0; } - varadjust = grf_load_byte(&buf); + varadjust = buf->ReadByte(); adjust->shift_num = GB(varadjust, 0, 5); adjust->type = (DeterministicSpriteGroupAdjustType)GB(varadjust, 6, 2); - adjust->and_mask = grf_load_var(varsize, &buf); + adjust->and_mask = buf->ReadVarSize(varsize); if (adjust->type != DSGA_TYPE_NONE) { - adjust->add_val = grf_load_var(varsize, &buf); - adjust->divmod_val = grf_load_var(varsize, &buf); + adjust->add_val = buf->ReadVarSize(varsize); + adjust->divmod_val = buf->ReadVarSize(varsize); } else { adjust->add_val = 0; adjust->divmod_val = 0; @@ -2816,16 +2808,16 @@ static void NewSpriteGroup(ByteReader *buf) /* Continue reading var adjusts while bit 5 is set. */ } while (HasBit(varadjust, 5)); - group->num_ranges = grf_load_byte(&buf); + group->num_ranges = buf->ReadByte(); if (group->num_ranges > 0) group->ranges = CallocT<DeterministicSpriteGroupRange>(group->num_ranges); for (uint i = 0; i < group->num_ranges; i++) { - group->ranges[i].group = GetGroupFromGroupID(setid, type, grf_load_word(&buf)); - group->ranges[i].low = grf_load_var(varsize, &buf); - group->ranges[i].high = grf_load_var(varsize, &buf); + group->ranges[i].group = GetGroupFromGroupID(setid, type, buf->ReadWord()); + group->ranges[i].low = buf->ReadVarSize(varsize); + group->ranges[i].high = buf->ReadVarSize(varsize); } - group->default_group = GetGroupFromGroupID(setid, type, grf_load_word(&buf)); + group->default_group = GetGroupFromGroupID(setid, type, buf->ReadWord()); break; } @@ -2840,18 +2832,18 @@ static void NewSpriteGroup(ByteReader *buf) if (HasBit(type, 2)) { if (feature <= GSF_AIRCRAFT) group->var_scope = VSG_SCOPE_RELATIVE; - group->count = grf_load_byte(&buf); + group->count = buf->ReadByte(); } - uint8 triggers = grf_load_byte(&buf); + uint8 triggers = buf->ReadByte(); group->triggers = GB(triggers, 0, 7); group->cmp_mode = HasBit(triggers, 7) ? RSG_CMP_ALL : RSG_CMP_ANY; - group->lowest_randbit = grf_load_byte(&buf); - group->num_groups = grf_load_byte(&buf); + group->lowest_randbit = buf->ReadByte(); + group->num_groups = buf->ReadByte(); group->groups = CallocT<const SpriteGroup*>(group->num_groups); for (uint i = 0; i < group->num_groups; i++) { - group->groups[i] = GetGroupFromGroupID(setid, type, grf_load_word(&buf)); + group->groups[i] = GetGroupFromGroupID(setid, type, buf->ReadWord()); } break; @@ -2871,7 +2863,7 @@ static void NewSpriteGroup(ByteReader *buf) { byte sprites = _cur_grffile->spriteset_numents; byte num_loaded = type; - byte num_loading = grf_load_byte(&buf); + byte num_loading = buf->ReadByte(); if (_cur_grffile->spriteset_start == 0) { grfmsg(0, "NewSpriteGroup: No sprite set to work on! Skipping"); @@ -2890,13 +2882,13 @@ static void NewSpriteGroup(ByteReader *buf) setid, sprites, num_loaded, num_loading); for (uint i = 0; i < num_loaded; i++) { - uint16 spriteid = grf_load_word(&buf); + uint16 spriteid = buf->ReadWord(); group->loaded[i] = CreateGroupFromGroupID(feature, setid, type, spriteid, sprites); grfmsg(8, "NewSpriteGroup: + rg->loaded[%i] = subset %u", i, spriteid); } for (uint i = 0; i < num_loading; i++) { - uint16 spriteid = grf_load_word(&buf); + uint16 spriteid = buf->ReadWord(); group->loading[i] = CreateGroupFromGroupID(feature, setid, type, spriteid, sprites); grfmsg(8, "NewSpriteGroup: + rg->loading[%i] = subset %u", i, spriteid); } @@ -2918,8 +2910,8 @@ static void NewSpriteGroup(ByteReader *buf) group->dts = CallocT<DrawTileSprites>(1); /* Groundsprite */ - group->dts->ground.sprite = grf_load_word(&buf); - group->dts->ground.pal = grf_load_word(&buf); + group->dts->ground.sprite = buf->ReadWord(); + group->dts->ground.pal = buf->ReadWord(); /* Remap transparent/colour modifier bits */ MapSpriteMappingRecolour(&group->dts->ground); @@ -2945,10 +2937,10 @@ static void NewSpriteGroup(ByteReader *buf) for (i = 0; i < num_building_sprites; i++) { DrawTileSeqStruct *seq = const_cast<DrawTileSeqStruct*>(&group->dts->seq[i]); - seq->image.sprite = grf_load_word(&buf); - seq->image.pal = grf_load_word(&buf); - seq->delta_x = grf_load_byte(&buf); - seq->delta_y = grf_load_byte(&buf); + seq->image.sprite = buf->ReadWord(); + seq->image.pal = buf->ReadWord(); + seq->delta_x = buf->ReadByte(); + seq->delta_y = buf->ReadByte(); MapSpriteMappingRecolour(&seq->image); @@ -2969,13 +2961,13 @@ static void NewSpriteGroup(ByteReader *buf) } if (type > 0) { - seq->delta_z = grf_load_byte(&buf); + seq->delta_z = buf->ReadByte(); if ((byte)seq->delta_z == 0x80) continue; } - seq->size_x = grf_load_byte(&buf); - seq->size_y = grf_load_byte(&buf); - seq->size_z = grf_load_byte(&buf); + seq->size_x = buf->ReadByte(); + seq->size_y = buf->ReadByte(); + seq->size_z = buf->ReadByte(); } /* Set the terminator value. */ @@ -2995,20 +2987,20 @@ static void NewSpriteGroup(ByteReader *buf) group->version = type; if (type == 0) { for (uint i = 0; i < 3; i++) { - group->subtract_input[i] = (int16)grf_load_word(&buf); // signed + group->subtract_input[i] = (int16)buf->ReadWord(); // signed } for (uint i = 0; i < 2; i++) { - group->add_output[i] = grf_load_word(&buf); // unsigned + group->add_output[i] = buf->ReadWord(); // unsigned } - group->again = grf_load_byte(&buf); + group->again = buf->ReadByte(); } else { for (uint i = 0; i < 3; i++) { - group->subtract_input[i] = grf_load_byte(&buf); + group->subtract_input[i] = buf->ReadByte(); } for (uint i = 0; i < 2; i++) { - group->add_output[i] = grf_load_byte(&buf); + group->add_output[i] = buf->ReadByte(); } - group->again = grf_load_byte(&buf); + group->again = buf->ReadByte(); } break; } @@ -3109,14 +3101,14 @@ static void VehicleMapSpriteGroup(ByteReader *buf, byte feature, uint8 idcount) EngineID *engines = AllocaM(EngineID, idcount); for (uint i = 0; i < idcount; i++) { - engines[i] = GetNewEngine(_cur_grffile, (VehicleType)feature, grf_load_extended(&buf))->index; + engines[i] = GetNewEngine(_cur_grffile, (VehicleType)feature, buf->ReadExtended())->index; if (!wagover) last_engines[i] = engines[i]; } - uint8 cidcount = grf_load_byte(&buf); + uint8 cidcount = buf->ReadByte(); for (uint c = 0; c < cidcount; c++) { - uint8 ctype = grf_load_byte(&buf); - uint16 groupid = grf_load_word(&buf); + uint8 ctype = buf->ReadByte(); + uint16 groupid = buf->ReadWord(); if (!IsValidGroupID(groupid, "VehicleMapSpriteGroup")) continue; grfmsg(8, "VehicleMapSpriteGroup: * [%d] Cargo type 0x%X, group id 0x%02X", c, ctype, groupid); @@ -3137,7 +3129,7 @@ static void VehicleMapSpriteGroup(ByteReader *buf, byte feature, uint8 idcount) } } - uint16 groupid = grf_load_word(&buf); + uint16 groupid = buf->ReadWord(); if (!IsValidGroupID(groupid, "VehicleMapSpriteGroup")) return; grfmsg(8, "-- Default group id 0x%04X", groupid); @@ -3159,13 +3151,13 @@ static void CanalMapSpriteGroup(ByteReader *buf, uint8 idcount) { CanalFeature *cfs = AllocaM(CanalFeature, idcount); for (uint i = 0; i < idcount; i++) { - cfs[i] = (CanalFeature)grf_load_byte(&buf); + cfs[i] = (CanalFeature)buf->ReadByte(); } - uint8 cidcount = grf_load_byte(&buf); + uint8 cidcount = buf->ReadByte(); buf->Skip(cidcount * 3); - uint16 groupid = grf_load_word(&buf); + uint16 groupid = buf->ReadWord(); if (!IsValidGroupID(groupid, "CanalMapSpriteGroup")) return; for (uint i = 0; i < idcount; i++) { @@ -3186,13 +3178,13 @@ static void StationMapSpriteGroup(ByteReader *buf, uint8 idcount) { uint8 *stations = AllocaM(uint8, idcount); for (uint i = 0; i < idcount; i++) { - stations[i] = grf_load_byte(&buf); + stations[i] = buf->ReadByte(); } - uint8 cidcount = grf_load_byte(&buf); + uint8 cidcount = buf->ReadByte(); for (uint c = 0; c < cidcount; c++) { - uint8 ctype = grf_load_byte(&buf); - uint16 groupid = grf_load_word(&buf); + uint8 ctype = buf->ReadByte(); + uint16 groupid = buf->ReadWord(); if (!IsValidGroupID(groupid, "StationMapSpriteGroup")) continue; ctype = TranslateCargo(GSF_STATION, ctype); @@ -3210,7 +3202,7 @@ static void StationMapSpriteGroup(ByteReader *buf, uint8 idcount) } } - uint16 groupid = grf_load_word(&buf); + uint16 groupid = buf->ReadWord(); if (!IsValidGroupID(groupid, "StationMapSpriteGroup")) return; for (uint i = 0; i < idcount; i++) { @@ -3233,14 +3225,14 @@ static void TownHouseMapSpriteGroup(ByteReader *buf, uint8 idcount) { uint8 *houses = AllocaM(uint8, idcount); for (uint i = 0; i < idcount; i++) { - houses[i] = grf_load_byte(&buf); + houses[i] = buf->ReadByte(); } /* Skip the cargo type section, we only care about the default group */ - uint8 cidcount = grf_load_byte(&buf); + uint8 cidcount = buf->ReadByte(); buf->Skip(cidcount * 3); - uint16 groupid = grf_load_word(&buf); + uint16 groupid = buf->ReadWord(); if (!IsValidGroupID(groupid, "TownHouseMapSpriteGroup")) return; if (_cur_grffile->housespec == NULL) { @@ -3264,14 +3256,14 @@ static void IndustryMapSpriteGroup(ByteReader *buf, uint8 idcount) { uint8 *industries = AllocaM(uint8, idcount); for (uint i = 0; i < idcount; i++) { - industries[i] = grf_load_byte(&buf); + industries[i] = buf->ReadByte(); } /* Skip the cargo type section, we only care about the default group */ - uint8 cidcount = grf_load_byte(&buf); + uint8 cidcount = buf->ReadByte(); buf->Skip(cidcount * 3); - uint16 groupid = grf_load_word(&buf); + uint16 groupid = buf->ReadWord(); if (!IsValidGroupID(groupid, "IndustryMapSpriteGroup")) return; if (_cur_grffile->industryspec == NULL) { @@ -3295,14 +3287,14 @@ static void IndustrytileMapSpriteGroup(ByteReader *buf, uint8 idcount) { uint8 *indtiles = AllocaM(uint8, idcount); for (uint i = 0; i < idcount; i++) { - indtiles[i] = grf_load_byte(&buf); + indtiles[i] = buf->ReadByte(); } /* Skip the cargo type section, we only care about the default group */ - uint8 cidcount = grf_load_byte(&buf); + uint8 cidcount = buf->ReadByte(); buf->Skip(cidcount * 3); - uint16 groupid = grf_load_word(&buf); + uint16 groupid = buf->ReadWord(); if (!IsValidGroupID(groupid, "IndustrytileMapSpriteGroup")) return; if (_cur_grffile->indtspec == NULL) { @@ -3326,14 +3318,14 @@ static void CargoMapSpriteGroup(ByteReader *buf, uint8 idcount) { CargoID *cargos = AllocaM(CargoID, idcount); for (uint i = 0; i < idcount; i++) { - cargos[i] = grf_load_byte(&buf); + cargos[i] = buf->ReadByte(); } /* Skip the cargo type section, we only care about the default group */ - uint8 cidcount = grf_load_byte(&buf); + uint8 cidcount = buf->ReadByte(); buf->Skip(cidcount * 3); - uint16 groupid = grf_load_word(&buf); + uint16 groupid = buf->ReadWord(); if (!IsValidGroupID(groupid, "CargoMapSpriteGroup")) return; for (uint i = 0; i < idcount; i++) { @@ -3373,14 +3365,14 @@ static void FeatureMapSpriteGroup(ByteReader *buf) return; } - uint8 feature = grf_load_byte(&buf); - uint8 idcount = grf_load_byte(&buf); + uint8 feature = buf->ReadByte(); + uint8 idcount = buf->ReadByte(); /* If idcount is zero, this is a feature callback */ if (idcount == 0) { /* Skip number of cargo ids? */ - grf_load_byte(&buf); - uint16 groupid = grf_load_word(&buf); + buf->ReadByte(); + uint16 groupid = buf->ReadWord(); grfmsg(6, "FeatureMapSpriteGroup: Adding generic feature callback for feature %d", feature); @@ -3452,17 +3444,17 @@ static void FeatureNewName(ByteReader *buf) bool new_scheme = _cur_grffile->grf_version >= 7; - uint8 feature = grf_load_byte(&buf); - uint8 lang = grf_load_byte(&buf); - uint8 num = grf_load_byte(&buf); + uint8 feature = buf->ReadByte(); + uint8 lang = buf->ReadByte(); + uint8 num = buf->ReadByte(); bool generic = HasBit(lang, 7); uint16 id; if (generic) { - id = grf_load_word(&buf); + id = buf->ReadWord(); } else if (feature <= GSF_AIRCRAFT) { - id = grf_load_extended(&buf); + id = buf->ReadExtended(); } else { - id = grf_load_byte(&buf); + id = buf->ReadByte(); } ClrBit(lang, 7); @@ -3473,7 +3465,7 @@ static void FeatureNewName(ByteReader *buf) id, endid, feature, lang); for (; id < endid && buf->HasData(); id++) { - const char *name = grf_load_string(&buf); + const char *name = buf->ReadString(); grfmsg(8, "FeatureNewName: 0x%04X <- %s", id, name); switch (feature) { @@ -3634,9 +3626,9 @@ static void GraphicsNew(ByteReader *buf) /* 0x15 */ { A5BLOCK_ALLOW_OFFSET, SPR_OPENTTD_BASE, 1, OPENTTD_SPRITE_COUNT, "OpenTTD GUI graphics" }, }; - uint8 type = grf_load_byte(&buf); - uint16 num = grf_load_extended(&buf); - uint16 offset = HasBit(type, 7) ? grf_load_extended(&buf) : 0; + uint8 type = buf->ReadByte(); + uint16 num = buf->ReadExtended(); + uint16 offset = HasBit(type, 7) ? buf->ReadExtended() : 0; ClrBit(type, 7); // Clear the high bit as that only indicates whether there is an offset. if ((type == 0x0D) && (num == 10) && _cur_grffile->is_ottdfile) { @@ -3701,10 +3693,10 @@ static void GraphicsNew(ByteReader *buf) static void SkipAct5(ByteReader *buf) { /* Ignore type byte */ - grf_load_byte(&buf); + buf->ReadByte(); /* Skip the sprites of this action */ - _skip_sprites = grf_load_extended(&buf); + _skip_sprites = buf->ReadExtended(); grfmsg(3, "SkipAct5: Skipping %d sprites", _skip_sprites); } @@ -3940,12 +3932,12 @@ static void CfgApply(ByteReader *buf) bool add_value; /* Read the parameter to apply. 0xFF indicates no more data to change. */ - param_num = grf_load_byte(&buf); + param_num = buf->ReadByte(); if (param_num == 0xFF) break; /* Get the size of the parameter to use. If the size covers multiple * double words, sequential parameter values are used. */ - param_size = grf_load_byte(&buf); + param_size = buf->ReadByte(); /* Bit 7 of param_size indicates we should add to the original value * instead of replacing it. */ @@ -3953,7 +3945,7 @@ static void CfgApply(ByteReader *buf) param_size = GB(param_size, 0, 7); /* Where to apply the data to within the pseudo sprite data. */ - offset = grf_load_extended(&buf); + offset = buf->ReadExtended(); /* If the parameter is a GRF parameter (not an internal variable) check * if it (and all further sequential parameters) has been defined. */ @@ -4024,9 +4016,9 @@ static void SkipIf(ByteReader *buf) uint32 mask = 0; bool result; - uint8 param = grf_load_byte(&buf); - uint8 paramsize = grf_load_byte(&buf); - uint8 condtype = grf_load_byte(&buf); + uint8 param = buf->ReadByte(); + uint8 paramsize = buf->ReadByte(); + uint8 condtype = buf->ReadByte(); if (condtype < 2) { /* Always 1 for bit tests, the given value should be ignored. */ @@ -4034,10 +4026,10 @@ static void SkipIf(ByteReader *buf) } switch (paramsize) { - case 8: cond_val = grf_load_dword(&buf); mask = grf_load_dword(&buf); break; - case 4: cond_val = grf_load_dword(&buf); mask = 0xFFFFFFFF; break; - case 2: cond_val = grf_load_word(&buf); mask = 0x0000FFFF; break; - case 1: cond_val = grf_load_byte(&buf); mask = 0x000000FF; break; + case 8: cond_val = buf->ReadDWord(); mask = buf->ReadDWord(); break; + case 4: cond_val = buf->ReadDWord(); mask = 0xFFFFFFFF; break; + case 2: cond_val = buf->ReadWord(); mask = 0x0000FFFF; break; + case 1: cond_val = buf->ReadByte(); mask = 0x000000FF; break; default: break; } @@ -4130,7 +4122,7 @@ static void SkipIf(ByteReader *buf) return; } - uint8 numsprites = grf_load_byte(&buf); + uint8 numsprites = buf->ReadByte(); /* numsprites can be a GOTO label if it has been defined in the GRF * file. The jump will always be the first matching label that follows @@ -4176,19 +4168,19 @@ static void SkipIf(ByteReader *buf) /* Action 0x08 (GLS_FILESCAN) */ static void ScanInfo(ByteReader *buf) { - grf_load_byte(&buf); - uint32 grfid = grf_load_dword(&buf); + buf->ReadByte(); + uint32 grfid = buf->ReadDWord(); _cur_grfconfig->grfid = grfid; /* GRF IDs starting with 0xFF are reserved for internal TTDPatch use */ if (GB(grfid, 24, 8) == 0xFF) SetBit(_cur_grfconfig->flags, GCF_SYSTEM); - const char *name = grf_load_string(&buf); + const char *name = buf->ReadString(); _cur_grfconfig->name = TranslateTTDPatchCodes(grfid, name); if (buf->HasData()) { - const char *info = grf_load_string(&buf); + const char *info = buf->ReadString(); _cur_grfconfig->info = TranslateTTDPatchCodes(grfid, info); } @@ -4206,9 +4198,9 @@ static void GRFInfo(ByteReader *buf) * S name name of this .grf set * S info string describing the set, and e.g. author and copyright */ - uint8 version = grf_load_byte(&buf); - uint32 grfid = grf_load_dword(&buf); - const char *name = grf_load_string(&buf); + uint8 version = buf->ReadByte(); + uint32 grfid = buf->ReadDWord(); + const char *name = buf->ReadString(); if (_cur_stage < GLS_RESERVE && _cur_grfconfig->status != GCS_UNKNOWN) { _cur_grfconfig->status = GCS_DISABLED; @@ -4239,11 +4231,11 @@ static void SpriteReplace(ByteReader *buf) * B num-sprites How many sprites are in this set * W first-sprite First sprite number to replace */ - uint8 num_sets = grf_load_byte(&buf); + uint8 num_sets = buf->ReadByte(); for (uint i = 0; i < num_sets; i++) { - uint8 num_sprites = grf_load_byte(&buf); - uint16 first_sprite = grf_load_word(&buf); + uint8 num_sprites = buf->ReadByte(); + uint16 first_sprite = buf->ReadWord(); grfmsg(2, "SpriteReplace: [Set %d] Changing %d sprites, beginning with %d", i, num_sprites, first_sprite @@ -4266,13 +4258,13 @@ static void SpriteReplace(ByteReader *buf) /* Action 0x0A (SKIP) */ static void SkipActA(ByteReader *buf) { - uint8 num_sets = grf_load_byte(&buf); + uint8 num_sets = buf->ReadByte(); for (uint i = 0; i < num_sets; i++) { /* Skip the sprites this replaces */ - _skip_sprites += grf_load_byte(&buf); + _skip_sprites += buf->ReadByte(); /* But ignore where they go */ - grf_load_word(&buf); + buf->ReadWord(); } grfmsg(3, "SkipActA: Skipping %d sprites", _skip_sprites); @@ -4316,9 +4308,9 @@ static void GRFLoadError(ByteReader *buf) /* For now we can only show one message per newgrf file. */ if (_cur_grfconfig->error != NULL) return; - byte severity = grf_load_byte(&buf); - byte lang = grf_load_byte(&buf); - byte message_id = grf_load_byte(&buf); + byte severity = buf->ReadByte(); + byte lang = buf->ReadByte(); + byte message_id = buf->ReadByte(); /* Skip the error if it isn't valid for the current language. */ if (!CheckGrfLangID(lang, _cur_grffile->grf_version)) return; @@ -4359,7 +4351,7 @@ static void GRFLoadError(ByteReader *buf) if (message_id == 0xFF) { /* This is a custom error message. */ if (buf->HasData()) { - const char *message = grf_load_string(&buf); + const char *message = buf->ReadString(); error->custom_message = TranslateTTDPatchCodes(_cur_grffile->grfid, message); } else { @@ -4371,7 +4363,7 @@ static void GRFLoadError(ByteReader *buf) } if (buf->HasData()) { - const char *data = grf_load_string(&buf); + const char *data = buf->ReadString(); error->data = TranslateTTDPatchCodes(_cur_grffile->grfid, data); } else { @@ -4382,7 +4374,7 @@ static void GRFLoadError(ByteReader *buf) /* Only two parameter numbers can be used in the string. */ uint i = 0; for (; i < 2 && buf->HasData(); i++) { - uint param_number = grf_load_byte(&buf); + uint param_number = buf->ReadByte(); error->param_value[i] = _cur_grffile->GetParam(param_number); } error->num_params = i; @@ -4399,14 +4391,14 @@ static void GRFComment(ByteReader *buf) if (!buf->HasData()) return; - const char *text = grf_load_string(&buf); + const char *text = buf->ReadString(); grfmsg(2, "GRFComment: %s", text); } /* Action 0x0D (GLS_SAFETYSCAN) */ static void SafeParamSet(ByteReader *buf) { - uint8 target = grf_load_byte(&buf); + uint8 target = buf->ReadByte(); /* Only writing GRF parameters is considered safe */ if (target < 0x80) return; @@ -4559,13 +4551,13 @@ static void ParamSet(ByteReader *buf) * (source2 like in 05, and source1 as well) */ - uint8 target = grf_load_byte(&buf); - uint8 oper = grf_load_byte(&buf); - uint32 src1 = grf_load_byte(&buf); - uint32 src2 = grf_load_byte(&buf); + uint8 target = buf->ReadByte(); + uint8 oper = buf->ReadByte(); + uint32 src1 = buf->ReadByte(); + uint32 src2 = buf->ReadByte(); uint32 data = 0; - if (buf->Remaining() >= 4) data = grf_load_dword(&buf); + if (buf->Remaining() >= 4) data = buf->ReadDWord(); /* You can add 80 to the operation to make it apply only if the target * is not defined yet. In this respect, a parameter is taken to be @@ -4843,10 +4835,10 @@ static void SafeGRFInhibit(ByteReader *buf) * B num Number of GRFIDs that follow * D grfids GRFIDs of the files to deactivate */ - uint8 num = grf_load_byte(&buf); + uint8 num = buf->ReadByte(); for (uint i = 0; i < num; i++) { - uint32 grfid = grf_load_dword(&buf); + uint32 grfid = buf->ReadDWord(); /* GRF is unsafe it if tries to deactivate other GRFs */ if (grfid != _cur_grfconfig->grfid) { @@ -4868,10 +4860,10 @@ static void GRFInhibit(ByteReader *buf) * B num Number of GRFIDs that follow * D grfids GRFIDs of the files to deactivate */ - uint8 num = grf_load_byte(&buf); + uint8 num = buf->ReadByte(); for (uint i = 0; i < num; i++) { - uint32 grfid = grf_load_dword(&buf); + uint32 grfid = buf->ReadDWord(); GRFConfig *file = GetGRFConfig(grfid); /* Unset activation flag */ @@ -4896,7 +4888,7 @@ static void FeatureTownName(ByteReader *buf) GRFTownName *townname = AddGRFTownName(grfid); - byte id = grf_load_byte(&buf); + byte id = buf->ReadByte(); grfmsg(6, "FeatureTownName: definition 0x%02X", id & 0x7F); if (HasBit(id, 7)) { @@ -4904,13 +4896,13 @@ static void FeatureTownName(ByteReader *buf) ClrBit(id, 7); bool new_scheme = _cur_grffile->grf_version >= 7; - byte lang = grf_load_byte(&buf); + byte lang = buf->ReadByte(); byte nb_gen = townname->nb_gen; do { ClrBit(lang, 7); - const char *name = grf_load_string(&buf); + const char *name = buf->ReadString(); char *lang_name = TranslateTTDPatchCodes(grfid, name); grfmsg(6, "FeatureTownName: lang 0x%X -> '%s'", lang, lang_name); @@ -4918,32 +4910,32 @@ static void FeatureTownName(ByteReader *buf) townname->name[nb_gen] = AddGRFString(grfid, id, lang, new_scheme, name, STR_UNDEFINED); - lang = grf_load_byte(&buf); + lang = buf->ReadByte(); } while (lang != 0); townname->id[nb_gen] = id; townname->nb_gen++; } - byte nb = grf_load_byte(&buf); + byte nb = buf->ReadByte(); grfmsg(6, "FeatureTownName: %u parts", nb); townname->nbparts[id] = nb; townname->partlist[id] = CallocT<NamePartList>(nb); for (int i = 0; i < nb; i++) { - byte nbtext = grf_load_byte(&buf); - townname->partlist[id][i].bitstart = grf_load_byte(&buf); - townname->partlist[id][i].bitcount = grf_load_byte(&buf); + byte nbtext = buf->ReadByte(); + townname->partlist[id][i].bitstart = buf->ReadByte(); + townname->partlist[id][i].bitcount = buf->ReadByte(); townname->partlist[id][i].maxprob = 0; townname->partlist[id][i].partcount = nbtext; townname->partlist[id][i].parts = CallocT<NamePart>(nbtext); grfmsg(6, "FeatureTownName: part %d contains %d texts and will use GB(seed, %d, %d)", i, nbtext, townname->partlist[id][i].bitstart, townname->partlist[id][i].bitcount); for (int j = 0; j < nbtext; j++) { - byte prob = grf_load_byte(&buf); + byte prob = buf->ReadByte(); if (HasBit(prob, 7)) { - byte ref_id = grf_load_byte(&buf); + byte ref_id = buf->ReadByte(); if (townname->nbparts[ref_id] == 0) { grfmsg(0, "FeatureTownName: definition 0x%02X doesn't exist, deactivating", ref_id); @@ -4957,7 +4949,7 @@ static void FeatureTownName(ByteReader *buf) grfmsg(6, "FeatureTownName: part %d, text %d, uses intermediate definition 0x%02X (with probability %d)", i, j, ref_id, prob & 0x7F); townname->partlist[id][i].parts[j].data.id = ref_id; } else { - const char *text = grf_load_string(&buf); + const char *text = buf->ReadString(); townname->partlist[id][i].parts[j].data.text = TranslateTTDPatchCodes(grfid, text); grfmsg(6, "FeatureTownName: part %d, text %d, '%s' (with probability %d)", i, j, townname->partlist[id][i].parts[j].data.text, prob); } @@ -4976,7 +4968,7 @@ static void DefineGotoLabel(ByteReader *buf) * B label The label to define * V comment Optional comment - ignored */ - byte nfo_label = grf_load_byte(&buf); + byte nfo_label = buf->ReadByte(); GRFLabel *label = MallocT<GRFLabel>(1); label->label = nfo_label; @@ -5004,7 +4996,7 @@ static void GRFSound(ByteReader *buf) * * W num Number of sound files that follow */ - uint16 num = grf_load_word(&buf); + uint16 num = buf->ReadWord(); _grf_data_blocks = num; _grf_data_type = GDT_SOUND; @@ -5019,7 +5011,7 @@ static void SkipAct11(ByteReader *buf) * * W num Number of sound files that follow */ - _skip_sprites = grf_load_word(&buf); + _skip_sprites = buf->ReadWord(); grfmsg(3, "SkipAct11: Skipping %d sprites", _skip_sprites); } @@ -5028,8 +5020,8 @@ static void ImportGRFSound(ByteReader *buf) { const GRFFile *file; SoundEntry *sound = AllocateSound(); - uint32 grfid = grf_load_dword(&buf); - SoundID sound_id = grf_load_word(&buf); + uint32 grfid = buf->ReadDWord(); + SoundID sound_id = buf->ReadWord(); file = GetFileByGRFID(grfid); if (file == NULL || file->sound_offset == 0) { @@ -5063,7 +5055,7 @@ static void GRFImportBlock(ByteReader *buf) /* XXX 'Action 0xFE' isn't really specified. It is only mentioned for * importing sounds, so this is probably all wrong... */ - if (grf_load_byte(&buf) != _grf_data_type) { + if (buf->ReadByte() != _grf_data_type) { grfmsg(1, "GRFImportBlock: Import type mismatch"); } @@ -5079,25 +5071,25 @@ static void LoadGRFSound(ByteReader *buf) * so that the indices used elsewhere are still correct. */ SoundEntry *sound = AllocateSound(); - if (grf_load_dword(&buf) != BSWAP32('RIFF')) { + if (buf->ReadDWord() != BSWAP32('RIFF')) { grfmsg(1, "LoadGRFSound: Missing RIFF header"); return; } - uint32 total_size = grf_load_dword(&buf); + uint32 total_size = buf->ReadDWord(); if (total_size > buf->Remaining()) { grfmsg(1, "LoadGRFSound: RIFF was truncated"); return; } - if (grf_load_dword(&buf) != BSWAP32('WAVE')) { + if (buf->ReadDWord() != BSWAP32('WAVE')) { grfmsg(1, "LoadGRFSound: Invalid RIFF type"); return; } while (total_size >= 8) { - uint32 tag = grf_load_dword(&buf); - uint32 size = grf_load_dword(&buf); + uint32 tag = buf->ReadDWord(); + uint32 size = buf->ReadDWord(); total_size -= 8; if (total_size < size) { grfmsg(1, "LoadGRFSound: Invalid RIFF"); @@ -5108,15 +5100,15 @@ static void LoadGRFSound(ByteReader *buf) switch (tag) { case ' tmf': // 'fmt ' /* Audio format, must be 1 (PCM) */ - if (size < 16 || grf_load_word(&buf) != 1) { + if (size < 16 || buf->ReadWord() != 1) { grfmsg(1, "LoadGRFSound: Invalid audio format"); return; } - sound->channels = grf_load_word(&buf); - sound->rate = grf_load_dword(&buf); - grf_load_dword(&buf); - grf_load_word(&buf); - sound->bits_per_sample = grf_load_word(&buf); + sound->channels = buf->ReadWord(); + sound->rate = buf->ReadDWord(); + buf->ReadDWord(); + buf->ReadWord(); + sound->bits_per_sample = buf->ReadWord(); /* The rest will be skipped */ size -= 16; @@ -5140,7 +5132,7 @@ static void LoadGRFSound(ByteReader *buf) } /* Skip rest of chunk */ - for (; size > 0; size--) grf_load_byte(&buf); + for (; size > 0; size--) buf->ReadByte(); } grfmsg(1, "LoadGRFSound: RIFF does not contain any sound data"); @@ -5159,12 +5151,12 @@ static void LoadFontGlyph(ByteReader *buf) * B num_char Number of consecutive glyphs * W base_char First character index */ - uint8 num_def = grf_load_byte(&buf); + uint8 num_def = buf->ReadByte(); for (uint i = 0; i < num_def; i++) { - FontSize size = (FontSize)grf_load_byte(&buf); - uint8 num_char = grf_load_byte(&buf); - uint16 base_char = grf_load_word(&buf); + FontSize size = (FontSize)buf->ReadByte(); + uint8 num_char = buf->ReadByte(); + uint16 base_char = buf->ReadWord(); grfmsg(7, "LoadFontGlyph: Loading %u glyph(s) at 0x%04X for size %u", num_char, base_char, size); @@ -5186,17 +5178,17 @@ static void SkipAct12(ByteReader *buf) * B num_char Number of consecutive glyphs * W base_char First character index */ - uint8 num_def = grf_load_byte(&buf); + uint8 num_def = buf->ReadByte(); for (uint i = 0; i < num_def; i++) { /* Ignore 'size' byte */ - grf_load_byte(&buf); + buf->ReadByte(); /* Sum up number of characters */ - _skip_sprites += grf_load_byte(&buf); + _skip_sprites += buf->ReadByte(); /* Ignore 'base_char' word */ - grf_load_word(&buf); + buf->ReadWord(); } grfmsg(3, "SkipAct12: Skipping %d sprites", _skip_sprites); @@ -5212,7 +5204,7 @@ static void TranslateGRFStrings(ByteReader *buf) * W offset First text ID * S text... Zero-terminated strings */ - uint32 grfid = grf_load_dword(&buf); + uint32 grfid = buf->ReadDWord(); const GRFConfig *c = GetGRFConfig(grfid); if (c == NULL || (c->status != GCS_INITIALISED && c->status != GCS_ACTIVATED)) { grfmsg(7, "TranslateGRFStrings: GRFID 0x%08x unknown, skipping action 13", BSWAP32(grfid)); @@ -5240,8 +5232,8 @@ static void TranslateGRFStrings(ByteReader *buf) return; } - byte num_strings = grf_load_byte(&buf); - uint16 first_id = grf_load_word(&buf); + byte num_strings = buf->ReadByte(); + uint16 first_id = buf->ReadWord(); if (!((first_id >= 0xD000 && first_id + num_strings <= 0xD3FF) || (first_id >= 0xDC00 && first_id + num_strings <= 0xDCFF))) { grfmsg(7, "TranslateGRFStrings: Attempting to set out-of-range string IDs in action 13 (first: 0x%4X, number: 0x%2X)", first_id, num_strings); @@ -5249,7 +5241,7 @@ static void TranslateGRFStrings(ByteReader *buf) } for (uint i = 0; i < num_strings && buf->HasData(); i++) { - const char *string = grf_load_string(&buf); + const char *string = buf->ReadString(); if (StrEmpty(string)) { grfmsg(7, "TranslateGRFString: Ignoring empty string."); @@ -5275,12 +5267,12 @@ static void GRFDataBlock(ByteReader *buf) return; } - uint8 name_len = grf_load_byte(&buf); + uint8 name_len = buf->ReadByte(); const char *name = reinterpret_cast<const char *>(buf->Data()); buf->Skip(name_len); /* Test string termination */ - if (grf_load_byte(&buf) != 0) { + if (buf->ReadByte() != 0) { grfmsg(2, "GRFDataBlock: Name not properly terminated"); return; } @@ -5957,7 +5949,7 @@ static void DecodeSpecialSprite(byte *buf, uint num, GrfLoadingStage stage) ByteReader *bufp = &br; try { - byte action = grf_load_byte(&bufp); + byte action = bufp->ReadByte(); if (action == 0xFF) { grfmsg(7, "DecodeSpecialSprite: Handling data block in stage %d", stage); |