summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorfrosch <frosch@openttd.org>2013-10-12 16:31:31 +0000
committerfrosch <frosch@openttd.org>2013-10-12 16:31:31 +0000
commit60f483822f07e6b3e0b680ebe9353ccefa9c2c52 (patch)
treea7828e0cc7f9defde4c0557e02ca0169461fe44b /src
parent35d7e8bca4e24bc211ed24d07fba62193d5f5f31 (diff)
downloadopenttd-60f483822f07e6b3e0b680ebe9353ccefa9c2c52.tar.xz
(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.
Diffstat (limited to 'src')
-rw-r--r--src/newgrf.cpp10
-rw-r--r--src/object_type.h4
2 files changed, 8 insertions, 6 deletions
diff --git a/src/newgrf.cpp b/src/newgrf.cpp
index e32ba1a15..6a5e41330 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<ObjectSpec*>(NUM_OBJECTS);
+ _cur.grffile->objectspec = CallocT<ObjectSpec*>(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 7987c6481..9716b360e 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. */