diff --git a/src/industry_cmd.cpp b/src/industry_cmd.cpp --- a/src/industry_cmd.cpp +++ b/src/industry_cmd.cpp @@ -554,6 +554,145 @@ static bool TransportIndustryGoods(TileI return moved_cargo; } +static void AnimateSugarSieve(TileIndex tile) +{ + byte m = GetAnimationFrame(tile) + 1; + + if (_settings_client.sound.ambient) { + switch (m & 7) { + case 2: SndPlayTileFx(SND_2D_SUGAR_MINE_1, tile); break; + case 6: SndPlayTileFx(SND_29_SUGAR_MINE_2, tile); break; + } + } + + if (m >= 96) { + m = 0; + DeleteAnimatedTile(tile); + } + SetAnimationFrame(tile, m); + + MarkTileDirtyByTile(tile); +} + +static void AnimateToffeeQuarry(TileIndex tile) +{ + byte m = GetAnimationFrame(tile); + + if (_industry_anim_offs_toffee[m] == 0xFF && _settings_client.sound.ambient) { + SndPlayTileFx(SND_30_TOFFEE_QUARRY, tile); + } + + if (++m >= 70) { + m = 0; + DeleteAnimatedTile(tile); + } + SetAnimationFrame(tile, m); + + MarkTileDirtyByTile(tile); +} + +static void AnimateBubbleCatcher(TileIndex tile) +{ + byte m = GetAnimationFrame(tile); + + if (++m >= 40) { + m = 0; + DeleteAnimatedTile(tile); + } + SetAnimationFrame(tile, m); + + MarkTileDirtyByTile(tile); +} + +static void AnimatePowerPlantSparks(TileIndex tile) +{ + byte m = GetAnimationFrame(tile); + if (m == 6) { + SetAnimationFrame(tile, 0); + DeleteAnimatedTile(tile); + } else { + SetAnimationFrame(tile, m + 1); + MarkTileDirtyByTile(tile); + } +} + +static void AnimateToyFactory(TileIndex tile) +{ + byte m = GetAnimationFrame(tile) + 1; + + switch (m) { + case 1: if (_settings_client.sound.ambient) SndPlayTileFx(SND_2C_TOY_FACTORY_1, tile); break; + case 23: if (_settings_client.sound.ambient) SndPlayTileFx(SND_2B_TOY_FACTORY_2, tile); break; + case 28: if (_settings_client.sound.ambient) SndPlayTileFx(SND_2A_TOY_FACTORY_3, tile); break; + default: + if (m >= 50) { + int n = GetIndustryAnimationLoop(tile) + 1; + m = 0; + if (n >= 8) { + n = 0; + DeleteAnimatedTile(tile); + } + SetIndustryAnimationLoop(tile, n); + } + } + + SetAnimationFrame(tile, m); + MarkTileDirtyByTile(tile); +} + +static void AnimatePlasticFountain(TileIndex tile, IndustryGfx gfx) +{ + gfx = (gfx < GFX_PLASTIC_FOUNTAIN_ANIMATED_8) ? gfx + 1 : GFX_PLASTIC_FOUNTAIN_ANIMATED_1; + SetIndustryGfx(tile, gfx); + MarkTileDirtyByTile(tile); +} + +static void AnimateOilWell(TileIndex tile, IndustryGfx gfx) +{ + bool b = Chance16(1, 7); + byte m = GetAnimationFrame(tile) + 1; + if (m == 4 && (m = 0, ++gfx) == GFX_OILWELL_ANIMATED_3 + 1 && (gfx = GFX_OILWELL_ANIMATED_1, b)) { + SetIndustryGfx(tile, GFX_OILWELL_NOT_ANIMATED); + SetIndustryConstructionStage(tile, 3); + DeleteAnimatedTile(tile); + } else { + SetAnimationFrame(tile, m); + SetIndustryGfx(tile, gfx); + MarkTileDirtyByTile(tile); + } +} + +static void AnimateMineTower(TileIndex tile) +{ + int state = _tick_counter & 0x7FF; + + if ((state -= 0x400) < 0) return; + + if (state < 0x1A0) { + if (state < 0x20 || state >= 0x180) { + byte m = GetAnimationFrame(tile); + if (!(m & 0x40)) { + SetAnimationFrame(tile, m | 0x40); + if (_settings_client.sound.ambient) SndPlayTileFx(SND_0B_MINE, tile); + } + if (state & 7) return; + } else { + if (state & 3) return; + } + byte m = (GetAnimationFrame(tile) + 1) | 0x40; + if (m > 0xC2) m = 0xC0; + SetAnimationFrame(tile, m); + MarkTileDirtyByTile(tile); + } else if (state >= 0x200 && state < 0x3A0) { + int i = (state < 0x220 || state >= 0x380) ? 7 : 3; + if (state & i) return; + + byte m = (GetAnimationFrame(tile) & 0xBF) - 1; + if (m < 0x80) m = 0x82; + SetAnimationFrame(tile, m); + MarkTileDirtyByTile(tile); + } +} static void AnimateTile_Industry(TileIndex tile) { @@ -566,159 +705,43 @@ static void AnimateTile_Industry(TileInd switch (gfx) { case GFX_SUGAR_MINE_SIEVE: - if ((_tick_counter & 1) == 0) { - byte m = GetAnimationFrame(tile) + 1; - - if (_settings_client.sound.ambient) { - switch (m & 7) { - case 2: SndPlayTileFx(SND_2D_SUGAR_MINE_1, tile); break; - case 6: SndPlayTileFx(SND_29_SUGAR_MINE_2, tile); break; - } - } - - if (m >= 96) { - m = 0; - DeleteAnimatedTile(tile); - } - SetAnimationFrame(tile, m); - - MarkTileDirtyByTile(tile); - } + if ((_tick_counter & 1) == 0) AnimateSugarSieve(tile); break; case GFX_TOFFEE_QUARY: - if ((_tick_counter & 3) == 0) { - byte m = GetAnimationFrame(tile); - - if (_industry_anim_offs_toffee[m] == 0xFF && _settings_client.sound.ambient) { - SndPlayTileFx(SND_30_TOFFEE_QUARRY, tile); - } - - if (++m >= 70) { - m = 0; - DeleteAnimatedTile(tile); - } - SetAnimationFrame(tile, m); - - MarkTileDirtyByTile(tile); - } + if ((_tick_counter & 3) == 0) AnimateToffeeQuarry(tile); break; case GFX_BUBBLE_CATCHER: - if ((_tick_counter & 1) == 0) { - byte m = GetAnimationFrame(tile); - - if (++m >= 40) { - m = 0; - DeleteAnimatedTile(tile); - } - SetAnimationFrame(tile, m); - - MarkTileDirtyByTile(tile); - } + if ((_tick_counter & 1) == 0) AnimateBubbleCatcher(tile); break; - /* Sparks on a coal plant */ case GFX_POWERPLANT_SPARKS: - if ((_tick_counter & 3) == 0) { - byte m = GetAnimationFrame(tile); - if (m == 6) { - SetAnimationFrame(tile, 0); - DeleteAnimatedTile(tile); - } else { - SetAnimationFrame(tile, m + 1); - MarkTileDirtyByTile(tile); - } - } + if ((_tick_counter & 3) == 0) AnimatePowerPlantSparks(tile); break; case GFX_TOY_FACTORY: - if ((_tick_counter & 1) == 0) { - byte m = GetAnimationFrame(tile) + 1; - - switch (m) { - case 1: if (_settings_client.sound.ambient) SndPlayTileFx(SND_2C_TOY_FACTORY_1, tile); break; - case 23: if (_settings_client.sound.ambient) SndPlayTileFx(SND_2B_TOY_FACTORY_2, tile); break; - case 28: if (_settings_client.sound.ambient) SndPlayTileFx(SND_2A_TOY_FACTORY_3, tile); break; - default: - if (m >= 50) { - int n = GetIndustryAnimationLoop(tile) + 1; - m = 0; - if (n >= 8) { - n = 0; - DeleteAnimatedTile(tile); - } - SetIndustryAnimationLoop(tile, n); - } - } - - SetAnimationFrame(tile, m); - MarkTileDirtyByTile(tile); - } + if ((_tick_counter & 1) == 0) AnimateToyFactory(tile); break; case GFX_PLASTIC_FOUNTAIN_ANIMATED_1: case GFX_PLASTIC_FOUNTAIN_ANIMATED_2: case GFX_PLASTIC_FOUNTAIN_ANIMATED_3: case GFX_PLASTIC_FOUNTAIN_ANIMATED_4: case GFX_PLASTIC_FOUNTAIN_ANIMATED_5: case GFX_PLASTIC_FOUNTAIN_ANIMATED_6: case GFX_PLASTIC_FOUNTAIN_ANIMATED_7: case GFX_PLASTIC_FOUNTAIN_ANIMATED_8: - if ((_tick_counter & 3) == 0) { - gfx = (gfx < 155) ? gfx + 1 : 148; - SetIndustryGfx(tile, gfx); - MarkTileDirtyByTile(tile); - } + if ((_tick_counter & 3) == 0) AnimatePlasticFountain(tile, gfx); break; case GFX_OILWELL_ANIMATED_1: case GFX_OILWELL_ANIMATED_2: case GFX_OILWELL_ANIMATED_3: - if ((_tick_counter & 7) == 0) { - bool b = Chance16(1, 7); - byte m = GetAnimationFrame(tile) + 1; - if (m == 4 && (m = 0, ++gfx) == GFX_OILWELL_ANIMATED_3 + 1 && (gfx = GFX_OILWELL_ANIMATED_1, b)) { - SetIndustryGfx(tile, GFX_OILWELL_NOT_ANIMATED); - SetIndustryConstructionStage(tile, 3); - DeleteAnimatedTile(tile); - } else { - SetAnimationFrame(tile, m); - SetIndustryGfx(tile, gfx); - MarkTileDirtyByTile(tile); - } - } + if ((_tick_counter & 7) == 0) AnimateOilWell(tile, gfx); break; case GFX_COAL_MINE_TOWER_ANIMATED: case GFX_COPPER_MINE_TOWER_ANIMATED: - case GFX_GOLD_MINE_TOWER_ANIMATED: { - int state = _tick_counter & 0x7FF; - - if ((state -= 0x400) < 0) return; - - if (state < 0x1A0) { - if (state < 0x20 || state >= 0x180) { - byte m = GetAnimationFrame(tile); - if (!(m & 0x40)) { - SetAnimationFrame(tile, m | 0x40); - if (_settings_client.sound.ambient) SndPlayTileFx(SND_0B_MINE, tile); - } - if (state & 7) return; - } else { - if (state & 3) return; - } - byte m = (GetAnimationFrame(tile) + 1) | 0x40; - if (m > 0xC2) m = 0xC0; - SetAnimationFrame(tile, m); - MarkTileDirtyByTile(tile); - } else if (state >= 0x200 && state < 0x3A0) { - int i = (state < 0x220 || state >= 0x380) ? 7 : 3; - if (state & i) return; - - byte m = (GetAnimationFrame(tile) & 0xBF) - 1; - if (m < 0x80) m = 0x82; - SetAnimationFrame(tile, m); - MarkTileDirtyByTile(tile); - } - break; - } + case GFX_GOLD_MINE_TOWER_ANIMATED: + AnimateMineTower(tile); + break; } }