equal
deleted
inserted
replaced
1402 } else { |
1402 } else { |
1403 dg->default_group = _cur_grffile->spritegroups[groupid]; |
1403 dg->default_group = _cur_grffile->spritegroups[groupid]; |
1404 } |
1404 } |
1405 dg->default_group->ref_count++; |
1405 dg->default_group->ref_count++; |
1406 |
1406 |
|
1407 if (_cur_grffile->spritegroups[setid] != NULL) |
|
1408 UnloadSpriteGroup(&_cur_grffile->spritegroups[setid]); |
1407 _cur_grffile->spritegroups[setid] = group; |
1409 _cur_grffile->spritegroups[setid] = group; |
1408 group->ref_count++; |
1410 group->ref_count++; |
1409 return; |
1411 return; |
1410 |
1412 |
1411 } else if (numloaded == 0x80 || numloaded == 0x83) { |
1413 } else if (numloaded == 0x80 || numloaded == 0x83) { |
1452 rg->groups[i] = _cur_grffile->spritegroups[groupid]; |
1454 rg->groups[i] = _cur_grffile->spritegroups[groupid]; |
1453 rg->groups[i]->ref_count++; |
1455 rg->groups[i]->ref_count++; |
1454 } |
1456 } |
1455 } |
1457 } |
1456 |
1458 |
|
1459 if (_cur_grffile->spritegroups[setid] != NULL) |
|
1460 UnloadSpriteGroup(&_cur_grffile->spritegroups[setid]); |
1457 _cur_grffile->spritegroups[setid] = group; |
1461 _cur_grffile->spritegroups[setid] = group; |
1458 group->ref_count++; |
1462 group->ref_count++; |
1459 return; |
1463 return; |
1460 } |
1464 } |
1461 |
1465 |
1517 } |
1521 } |
1518 rg->loading[i]->ref_count++; |
1522 rg->loading[i]->ref_count++; |
1519 DEBUG(grf, 8) ("NewSpriteGroup: + rg->loading[%i] = %u (subset %u)", i, rg->loading[i]->g.result.result, spriteset_id); |
1523 DEBUG(grf, 8) ("NewSpriteGroup: + rg->loading[%i] = %u (subset %u)", i, rg->loading[i]->g.result.result, spriteset_id); |
1520 } |
1524 } |
1521 |
1525 |
|
1526 if (_cur_grffile->spritegroups[setid] != NULL) |
|
1527 UnloadSpriteGroup(&_cur_grffile->spritegroups[setid]); |
1522 _cur_grffile->spritegroups[setid] = group; |
1528 _cur_grffile->spritegroups[setid] = group; |
1523 group->ref_count++; |
1529 group->ref_count++; |
1524 } |
1530 } |
1525 |
1531 |
1526 /* Action 0x03 */ |
1532 /* Action 0x03 */ |
2294 | (1 << 0x17) /* newstartyear */ |
2300 | (1 << 0x17) /* newstartyear */ |
2295 | (_patches.wagon_speed_limits ? (1 << 0x1D) : 0); /* wagonspeedlimits */ |
2301 | (_patches.wagon_speed_limits ? (1 << 0x1D) : 0); /* wagonspeedlimits */ |
2296 } |
2302 } |
2297 |
2303 |
2298 /** |
2304 /** |
|
2305 * Unload unused sprite groups from the specified GRF file. |
|
2306 * Called after loading each GRF file. |
|
2307 * @param file GRF file |
|
2308 */ |
|
2309 static void ReleaseSpriteGroups(GRFFile *file) |
|
2310 { |
|
2311 int i; |
|
2312 |
|
2313 // Bail out if no spritegroups were defined. |
|
2314 if (file->spritegroups == NULL) |
|
2315 return; |
|
2316 |
|
2317 DEBUG(grf, 6)("ReleaseSpriteGroups: Releasing for `%s'.", file->filename); |
|
2318 for (i = 0; i < file->spritegroups_count; i++) { |
|
2319 if (file->spritegroups[i] != NULL) |
|
2320 UnloadSpriteGroup(&file->spritegroups[i]); |
|
2321 } |
|
2322 free(file->spritegroups); |
|
2323 file->spritegroups = NULL; |
|
2324 file->spritegroups_count = 0; |
|
2325 } |
|
2326 |
|
2327 /** |
2299 * Reset all NewGRF loaded data |
2328 * Reset all NewGRF loaded data |
2300 * TODO |
2329 * TODO |
2301 */ |
2330 */ |
2302 static void ResetNewGRFData(void) |
2331 static void ResetNewGRFData(void) |
2303 { |
2332 { |
2319 free(_bridge[i].sprite_table[j]); |
2348 free(_bridge[i].sprite_table[j]); |
2320 free(_bridge[i].sprite_table); |
2349 free(_bridge[i].sprite_table); |
2321 } |
2350 } |
2322 } |
2351 } |
2323 memcpy(&_bridge, &orig_bridge, sizeof(_bridge)); |
2352 memcpy(&_bridge, &orig_bridge, sizeof(_bridge)); |
|
2353 |
|
2354 // Unload sprite group data |
|
2355 UnloadWagonOverrides(); |
|
2356 UnloadCustomEngineSprites(); |
2324 } |
2357 } |
2325 |
2358 |
2326 static void InitNewGRFFile(const char* filename, int sprite_offset) |
2359 static void InitNewGRFFile(const char* filename, int sprite_offset) |
2327 { |
2360 { |
2328 GRFFile *newfile; |
2361 GRFFile *newfile; |
2491 } |
2524 } |
2492 } |
2525 } |
2493 |
2526 |
2494 if (_skip_sprites > 0) _skip_sprites--; |
2527 if (_skip_sprites > 0) _skip_sprites--; |
2495 } |
2528 } |
|
2529 |
|
2530 // Release our sprite group references. |
|
2531 // Any groups that are referenced elsewhere will be cleaned up later. |
|
2532 // This removes groups that aren't used. (Perhaps skipped?) |
|
2533 ReleaseSpriteGroups(_cur_grffile); |
2496 } |
2534 } |
2497 |
2535 |
2498 |
2536 |
2499 void LoadNewGRF(uint load_index, uint file_index) |
2537 void LoadNewGRF(uint load_index, uint file_index) |
2500 { |
2538 { |