mirror of
https://github.com/JGRennison/OpenTTD-patches.git
synced 2024-11-16 00:12:51 +00:00
(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.
This commit is contained in:
parent
28dfdd7863
commit
432ef5cad9
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
Block a user