mirror of https://github.com/OpenTTD/OpenTTD
(svn r4352) - NewGRF Codechange: dynamically allocate the memory used to store custom station data. This saves us approximately 40KB per GRF file, if there are no stations defined.
parent
d38964e49a
commit
5e345e0e7f
20
newgrf.c
20
newgrf.c
|
@ -762,10 +762,17 @@ static bool StationChangeInfo(uint stid, int numinfo, int prop, byte **bufp, int
|
||||||
int i;
|
int i;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
/* This is one single huge TODO. It doesn't handle anything more than
|
/* Allocate station specs if necessary */
|
||||||
* just waypoints for now. */
|
if (_cur_grffile->num_stations < stid + numinfo) {
|
||||||
|
_cur_grffile->stations = realloc(_cur_grffile->stations, (stid + numinfo) * sizeof(*_cur_grffile->stations))
|
||||||
|
;
|
||||||
|
|
||||||
|
while (_cur_grffile->num_stations < stid + numinfo) {
|
||||||
|
memset(&_cur_grffile->stations[_cur_grffile->num_stations], 0, sizeof(*_cur_grffile->stations));
|
||||||
|
_cur_grffile->num_stations++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//printf("sci %d %d [0x%02x]\n", stid, numinfo, prop);
|
|
||||||
switch (prop) {
|
switch (prop) {
|
||||||
case 0x08:
|
case 0x08:
|
||||||
{ /* Class ID */
|
{ /* Class ID */
|
||||||
|
@ -2357,7 +2364,7 @@ static void ResetCustomStations(void)
|
||||||
CargoID c;
|
CargoID c;
|
||||||
|
|
||||||
for (file = _first_grffile; file != NULL; file = file->next) {
|
for (file = _first_grffile; file != NULL; file = file->next) {
|
||||||
for (i = 0; i < lengthof(file->stations); i++) {
|
for (i = 0; i < file->num_stations; i++) {
|
||||||
if (file->stations[i].grfid != file->grfid) continue;
|
if (file->stations[i].grfid != file->grfid) continue;
|
||||||
|
|
||||||
// TODO: Release renderdata, platforms and layouts
|
// TODO: Release renderdata, platforms and layouts
|
||||||
|
@ -2368,6 +2375,11 @@ static void ResetCustomStations(void)
|
||||||
UnloadSpriteGroup(&file->stations[i].spritegroup[c]);
|
UnloadSpriteGroup(&file->stations[i].spritegroup[c]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Free and reset the station data */
|
||||||
|
free(file->stations);
|
||||||
|
file->stations = NULL;
|
||||||
|
file->num_stations = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
3
newgrf.h
3
newgrf.h
|
@ -34,7 +34,8 @@ struct GRFFile {
|
||||||
int spritegroups_count;
|
int spritegroups_count;
|
||||||
SpriteGroup **spritegroups;
|
SpriteGroup **spritegroups;
|
||||||
|
|
||||||
StationSpec stations[256];
|
uint num_stations;
|
||||||
|
StationSpec *stations;
|
||||||
|
|
||||||
uint32 param[0x80];
|
uint32 param[0x80];
|
||||||
uint param_end; /// one more than the highest set parameter
|
uint param_end; /// one more than the highest set parameter
|
||||||
|
|
Loading…
Reference in New Issue