Merge branch 'master' into jgrpp
# Conflicts: # .github/workflows/commit-checker.yml # src/industry_cmd.cpp # src/industry_gui.cpp # src/landscape.cpp # src/linkgraph/linkgraph_gui.cpp # src/order_base.h # src/order_cmd.cpp # src/order_gui.cpp # src/saveload/afterload.cpp # src/saveload/league_sl.cpp # src/saveload/saveload.h # src/script/api/script_object.hpp # src/script/squirrel_helper.hpp # src/settings_table.cpp # src/station_cmd.cpp # src/table/settings.h.preamble # src/tree_cmd.cpp # src/tree_map.h # src/vehicle.cpp # src/waypoint_cmd.cpp
This commit is contained in:
@@ -556,6 +556,145 @@ static bool TransportIndustryGoods(TileIndex tile)
|
||||
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, VMDF_NOT_MAP_MODE);
|
||||
}
|
||||
|
||||
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, VMDF_NOT_MAP_MODE);
|
||||
}
|
||||
|
||||
static void AnimateBubbleCatcher(TileIndex tile)
|
||||
{
|
||||
byte m = GetAnimationFrame(tile);
|
||||
|
||||
if (++m >= 40) {
|
||||
m = 0;
|
||||
DeleteAnimatedTile(tile);
|
||||
}
|
||||
SetAnimationFrame(tile, m);
|
||||
|
||||
MarkTileDirtyByTile(tile, VMDF_NOT_MAP_MODE);
|
||||
}
|
||||
|
||||
static void AnimatePowerPlantSparks(TileIndex tile)
|
||||
{
|
||||
byte m = GetAnimationFrame(tile);
|
||||
if (m == 6) {
|
||||
SetAnimationFrame(tile, 0);
|
||||
DeleteAnimatedTile(tile);
|
||||
} else {
|
||||
SetAnimationFrame(tile, m + 1);
|
||||
MarkTileDirtyByTile(tile, VMDF_NOT_MAP_MODE);
|
||||
}
|
||||
}
|
||||
|
||||
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, VMDF_NOT_MAP_MODE);
|
||||
}
|
||||
|
||||
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, VMDF_NOT_MAP_MODE);
|
||||
}
|
||||
|
||||
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, VMDF_NOT_MAP_MODE);
|
||||
}
|
||||
}
|
||||
|
||||
static void AnimateMineTower(TileIndex tile)
|
||||
{
|
||||
int state = _scaled_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, VMDF_NOT_MAP_MODE);
|
||||
} 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, VMDF_NOT_MAP_MODE);
|
||||
}
|
||||
}
|
||||
|
||||
void AnimateTile_Industry(TileIndex tile)
|
||||
{
|
||||
@@ -568,159 +707,43 @@ void AnimateTile_Industry(TileIndex tile)
|
||||
|
||||
switch (gfx) {
|
||||
case GFX_SUGAR_MINE_SIEVE:
|
||||
if ((_scaled_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, VMDF_NOT_MAP_MODE);
|
||||
}
|
||||
if ((_scaled_tick_counter & 1) == 0) AnimateSugarSieve(tile);
|
||||
break;
|
||||
|
||||
case GFX_TOFFEE_QUARY:
|
||||
if ((_scaled_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, VMDF_NOT_MAP_MODE);
|
||||
}
|
||||
if ((_scaled_tick_counter & 3) == 0) AnimateToffeeQuarry(tile);
|
||||
break;
|
||||
|
||||
case GFX_BUBBLE_CATCHER:
|
||||
if ((_scaled_tick_counter & 1) == 0) {
|
||||
byte m = GetAnimationFrame(tile);
|
||||
|
||||
if (++m >= 40) {
|
||||
m = 0;
|
||||
DeleteAnimatedTile(tile);
|
||||
}
|
||||
SetAnimationFrame(tile, m);
|
||||
|
||||
MarkTileDirtyByTile(tile, VMDF_NOT_MAP_MODE);
|
||||
}
|
||||
if ((_scaled_tick_counter & 1) == 0) AnimateBubbleCatcher(tile);
|
||||
break;
|
||||
|
||||
/* Sparks on a coal plant */
|
||||
case GFX_POWERPLANT_SPARKS:
|
||||
if ((_scaled_tick_counter & 3) == 0) {
|
||||
byte m = GetAnimationFrame(tile);
|
||||
if (m == 6) {
|
||||
SetAnimationFrame(tile, 0);
|
||||
DeleteAnimatedTile(tile);
|
||||
} else {
|
||||
SetAnimationFrame(tile, m + 1);
|
||||
MarkTileDirtyByTile(tile, VMDF_NOT_MAP_MODE);
|
||||
}
|
||||
}
|
||||
if ((_scaled_tick_counter & 3) == 0) AnimatePowerPlantSparks(tile);
|
||||
break;
|
||||
|
||||
case GFX_TOY_FACTORY:
|
||||
if ((_scaled_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, VMDF_NOT_MAP_MODE);
|
||||
}
|
||||
if ((_scaled_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 ((_scaled_tick_counter & 3) == 0) {
|
||||
IndustryGfx new_gfx = (gfx < 155) ? gfx + 1 : 148;
|
||||
SetIndustryGfx(tile, new_gfx);
|
||||
MarkTileDirtyByTile(tile, VMDF_NOT_MAP_MODE);
|
||||
}
|
||||
if ((_scaled_tick_counter & 3) == 0) AnimatePlasticFountain(tile, gfx);
|
||||
break;
|
||||
|
||||
case GFX_OILWELL_ANIMATED_1:
|
||||
case GFX_OILWELL_ANIMATED_2:
|
||||
case GFX_OILWELL_ANIMATED_3:
|
||||
if ((_scaled_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, VMDF_NOT_MAP_MODE);
|
||||
}
|
||||
}
|
||||
if ((_scaled_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 = _scaled_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, VMDF_NOT_MAP_MODE);
|
||||
} 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, VMDF_NOT_MAP_MODE);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case GFX_GOLD_MINE_TOWER_ANIMATED:
|
||||
AnimateMineTower(tile);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user