From 60f483822f07e6b3e0b680ebe9353ccefa9c2c52 Mon Sep 17 00:00:00 2001 From: frosch Date: Sat, 12 Oct 2013 16:31:31 +0000 Subject: [PATCH] (svn r25834) -Codechange: Use NUM_OBJECTS_PER_GRF instead of NUM_OBJECTS to properly distinguish limits per NewGRF and limits of the pool. -Change: [NewGRF] Lower the limit of object types per NewGRF from 256 to 255 to prevent usage of ID 0xFF in Action3, and thus allowing it to become an extended byte somewhen. --- src/newgrf.cpp | 10 +++++----- src/object_type.h | 4 +++- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/newgrf.cpp b/src/newgrf.cpp index e32ba1a15f..6a5e413306 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -3773,14 +3773,14 @@ static ChangeInfoResult ObjectChangeInfo(uint id, int numinfo, int prop, ByteRea { ChangeInfoResult ret = CIR_SUCCESS; - if (id + numinfo > NUM_OBJECTS) { - grfmsg(1, "ObjectChangeInfo: Too many objects loaded (%u), max (%u). Ignoring.", id + numinfo, NUM_OBJECTS); + if (id + numinfo > NUM_OBJECTS_PER_GRF) { + grfmsg(1, "ObjectChangeInfo: Too many objects loaded (%u), max (%u). Ignoring.", id + numinfo, NUM_OBJECTS_PER_GRF); return CIR_INVALID_ID; } /* Allocate object specs if they haven't been allocated already. */ if (_cur.grffile->objectspec == NULL) { - _cur.grffile->objectspec = CallocT(NUM_OBJECTS); + _cur.grffile->objectspec = CallocT(NUM_OBJECTS_PER_GRF); } for (int i = 0; i < numinfo; i++) { @@ -7882,7 +7882,7 @@ static void ResetCustomObjects() for (GRFFile **file = _grf_files.Begin(); file != end; file++) { ObjectSpec **&objectspec = (*file)->objectspec; if (objectspec == NULL) continue; - for (uint i = 0; i < NUM_OBJECTS; i++) { + for (uint i = 0; i < NUM_OBJECTS_PER_GRF; i++) { free(objectspec[i]); } @@ -8552,7 +8552,7 @@ static void FinaliseObjectsArray() for (GRFFile **file = _grf_files.Begin(); file != end; file++) { ObjectSpec **&objectspec = (*file)->objectspec; if (objectspec != NULL) { - for (int i = 0; i < NUM_OBJECTS; i++) { + for (int i = 0; i < NUM_OBJECTS_PER_GRF; i++) { if (objectspec[i] != NULL && objectspec[i]->grf_prop.grffile != NULL && objectspec[i]->enabled) { _object_mngr.SetEntitySpec(objectspec[i]); } diff --git a/src/object_type.h b/src/object_type.h index 7987c6481e..9716b360ec 100644 --- a/src/object_type.h +++ b/src/object_type.h @@ -21,8 +21,10 @@ static const ObjectType OBJECT_STATUE = 2; ///< Statue in towns static const ObjectType OBJECT_OWNED_LAND = 3; ///< Owned land 'flag' static const ObjectType OBJECT_HQ = 4; ///< HeadQuarter of a player +static const ObjectType NUM_OBJECTS_PER_GRF = 255; ///< Number of supported objects per NewGRF; limited to 255 to allow extending Action3 with an extended byte later on. + static const ObjectType NEW_OBJECT_OFFSET = 5; ///< Offset for new objects -static const ObjectType NUM_OBJECTS = 256; ///< Number of supported objects +static const ObjectType NUM_OBJECTS = 256; ///< Number of supported objects overall static const ObjectType INVALID_OBJECT_TYPE = 0xFFFF; ///< An invalid object /** Unique identifier for an object. */