OpenTTD: src/disaster_vehicle.cpp File Reference

OpenTTD

- Main Page
- Related Pages
- Modules
- Namespaces
- Data Structures
- Files

- File List
- Globals

Data Structures | Typedefs | Functions | Variables
disaster_vehicle.cpp File Reference

All disaster/easter egg vehicles are handled here. More...

`#include "stdafx.h"`
`#include "aircraft.h"`
`#include "disaster_vehicle.h"`
`#include "industry.h"`
`#include "station_base.h"`
`#include "command_func.h"`
`#include "news_func.h"`
`#include "town.h"`
`#include "company_func.h"`
`#include "strings_func.h"`
`#include "date_func.h"`
`#include "viewport_func.h"`
`#include "vehicle_func.h"`
`#include "sound_func.h"`
`#include "effectvehicle_func.h"`
`#include "roadveh.h"`
`#include "ai/ai.hpp"`
`#include "game/game.hpp"`
`#include "company_base.h"`
`#include "core/random_func.hpp"`
`#include "core/backup_type.hpp"`
`#include "table/strings.h"`
`#include "safeguards.h"`

Go to the source code of this file.

## Data Structures
struct | Disaster

## Typedefs
typedef bool | DisasterVehicleTickProc (DisasterVehicle *v)
typedef void | DisasterInitProc ()

## Functions
static void | DisasterClearSquare (TileIndex tile)
static bool | DisasterTick_Zeppeliner (DisasterVehicle *v)
| Zeppeliner handling, v->current_order.dest states: 0: Zeppeliner initialization has found a small airport, go there and crash 1: Create crash and animate falling down for extra dramatic effect 2: Create more smoke and leave debris on ground 2: Clear the runway after some time and remove crashed zeppeliner If not airport was found, only state 0 is reached until zeppeliner leaves map.
static bool | DisasterTick_Ufo (DisasterVehicle *v)
| (Small) Ufo handling, v->current_order.dest states: 0: Fly around to the middle of the map, then randomly, after a while target a road vehicle 1: Home in on a road vehicle and crash it >:) If not road vehicle was found, only state 0 is used and Ufo disappears after a while
static void | DestructIndustry (Industry *i)
static bool | DisasterTick_Aircraft (DisasterVehicle *v, uint16 image_override, bool leave_at_top, StringID news_message, IndustryBehaviour industry_flag)
| Aircraft handling, v->current_order.dest states: 0: Fly towards the targeted industry 1: If within 15 tiles, fire away rockets and destroy industry 2: Industry explosions 3: Fly out of the map If the industry was removed in the meantime just fly to the end of the map.
static bool | DisasterTick_Airplane (DisasterVehicle *v)
| Airplane handling.
static bool | DisasterTick_Helicopter (DisasterVehicle *v)
| Helicopter handling.
static bool | DisasterTick_Helicopter_Rotors (DisasterVehicle *v)
| Helicopter rotor blades; keep these spinning.
static bool | DisasterTick_Big_Ufo (DisasterVehicle *v)
| (Big) Ufo handling, v->current_order.dest states: 0: Fly around to the middle of the map, then randomly for a while and home in on a piece of rail 1: Land there and breakdown all trains in a radius of 12 tiles; and now we wait...
static bool | DisasterTick_Big_Ufo_Destroyer (DisasterVehicle *v)
| Skyranger destroying (Big) Ufo handling, v->current_order.dest states: 0: Home in on landed Ufo and shoot it down.
static bool | DisasterTick_Submarine (DisasterVehicle *v)
| Submarine, v->current_order.dest states: Unused, just float around aimlessly and pop up at different places, turning around.
static bool | DisasterTick_NULL (DisasterVehicle *v)
static void | Disaster_Zeppeliner_Init ()
| Zeppeliner which crashes on a small airport if one found, otherwise crashes on a random tile.
static void | Disaster_Small_Ufo_Init ()
| Ufo which flies around aimlessly from the middle of the map a bit until it locates a road vehicle which it targets and then destroys.
static void | Disaster_Airplane_Init ()
static void | Disaster_Helicopter_Init ()
| Combat helicopter that destroys a factory.
static void | Disaster_Big_Ufo_Init ()
static void | Disaster_Submarine_Init (DisasterSubType subtype)
static void | Disaster_Small_Submarine_Init ()
static void | Disaster_Big_Submarine_Init ()
static void | Disaster_CoalMine_Init ()
| Coal mine catastrophe, destroys a stretch of 30 tiles of land in a certain direction.
static void | DoDisaster ()
static void | ResetDisasterDelay ()
void | DisasterDailyLoop ()
void | StartupDisasters ()
void | ReleaseDisastersTargetingIndustry (IndustryID i)
| Marks all disasters targeting this industry in such a way they won't call Industry::Get(v->dest_tile) on invalid industry anymore.
void | ReleaseDisastersTargetingVehicle (VehicleID vehicle)
| Notify disasters that we are about to delete a vehicle.

## Variables
uint16 | _disaster_delay
| Delay counter for considering the next disaster.
static const SpriteID | _disaster_images_1 [] = {SPR_BLIMP, SPR_BLIMP, SPR_BLIMP, SPR_BLIMP, SPR_BLIMP, SPR_BLIMP, SPR_BLIMP, SPR_BLIMP}
static const SpriteID | _disaster_images_2 [] = {SPR_UFO_SMALL_SCOUT, SPR_UFO_SMALL_SCOUT, SPR_UFO_SMALL_SCOUT, SPR_UFO_SMALL_SCOUT, SPR_UFO_SMALL_SCOUT, SPR_UFO_SMALL_SCOUT, SPR_UFO_SMALL_SCOUT, SPR_UFO_SMALL_SCOUT}
static const SpriteID | _disaster_images_3 [] = {SPR_F_15, SPR_F_15, SPR_F_15, SPR_F_15, SPR_F_15, SPR_F_15, SPR_F_15, SPR_F_15}
static const SpriteID | _disaster_images_4 [] = {SPR_SUB_SMALL_NE, SPR_SUB_SMALL_NE, SPR_SUB_SMALL_SE, SPR_SUB_SMALL_SE, SPR_SUB_SMALL_SW, SPR_SUB_SMALL_SW, SPR_SUB_SMALL_NW, SPR_SUB_SMALL_NW}
static const SpriteID | _disaster_images_5 [] = {SPR_SUB_LARGE_NE, SPR_SUB_LARGE_NE, SPR_SUB_LARGE_SE, SPR_SUB_LARGE_SE, SPR_SUB_LARGE_SW, SPR_SUB_LARGE_SW, SPR_SUB_LARGE_NW, SPR_SUB_LARGE_NW}
static const SpriteID | _disaster_images_6 [] = {SPR_UFO_HARVESTER, SPR_UFO_HARVESTER, SPR_UFO_HARVESTER, SPR_UFO_HARVESTER, SPR_UFO_HARVESTER, SPR_UFO_HARVESTER, SPR_UFO_HARVESTER, SPR_UFO_HARVESTER}
static const SpriteID | _disaster_images_7 [] = {SPR_XCOM_SKYRANGER, SPR_XCOM_SKYRANGER, SPR_XCOM_SKYRANGER, SPR_XCOM_SKYRANGER, SPR_XCOM_SKYRANGER, SPR_XCOM_SKYRANGER, SPR_XCOM_SKYRANGER, SPR_XCOM_SKYRANGER}
static const SpriteID | _disaster_images_8 [] = {SPR_AH_64A, SPR_AH_64A, SPR_AH_64A, SPR_AH_64A, SPR_AH_64A, SPR_AH_64A, SPR_AH_64A, SPR_AH_64A}
static const SpriteID | _disaster_images_9 [] = {SPR_ROTOR_MOVING_1, SPR_ROTOR_MOVING_1, SPR_ROTOR_MOVING_1, SPR_ROTOR_MOVING_1, SPR_ROTOR_MOVING_1, SPR_ROTOR_MOVING_1, SPR_ROTOR_MOVING_1, SPR_ROTOR_MOVING_1}
static const SpriteID *const | _disaster_images []
static DisasterVehicleTickProc *const | _disastervehicle_tick_procs []
static const Disaster | _disasters []

## Detailed Description

All disaster/easter egg vehicles are handled here.

The general flow of control for the disaster vehicles is as follows:

1. Initialize the disaster in a disaster specific way (eg start position, possible target, etc.) Disaster_XXX_Init() function
2. Add a subtype to a disaster, which is an index into the function array that handles the vehicle's ticks.
3. Run the disaster vehicles each tick until their target has been reached, this happens in the DisasterTick_XXX() functions. In here, a vehicle's state is kept by v->current_order.dest variable. Each achieved sub-target will increase this value, and the last one will remove the disaster itself

Definition in file disaster_vehicle.cpp.

## Function Documentation

static bool DisasterTick_Aircraft | ( | DisasterVehicle * | v,
|  | uint16 | image_override,
|  | bool | leave_at_top,
|  | StringID | news_message,
|  | IndustryBehaviour | industry_flag
| ) |  |
| static

Aircraft handling, v->current_order.dest states: 0: Fly towards the targeted industry 1: If within 15 tiles, fire away rockets and destroy industry 2: Industry explosions 3: Fly out of the map If the industry was removed in the meantime just fly to the end of the map.

Parameters

  v | The disaster vehicle.
  image_override | The image at the time the aircraft is firing.
  leave_at_top | True iff the vehicle leaves the map at the north side.
  news_message | The string that's used as news message.
  industry_flag | Only attack industries that have this flag set.

Definition at line 423 of file disaster_vehicle.cpp.

References _settings_client, Vehicle::age, CreateEffectVehicleAbove(), Vehicle::current_order, Vehicle::dest_tile, SoundSettings::disaster, EV_EXPLOSION_SMALL, GB(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_industry_pool >::Get(), Order::GetDestination(), GetIndustryIndex(), GetIndustrySpec(), GetNewVehiclePos(), HasBit(), DisasterVehicle::image_override, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, IsTileType(), Industry::location, MapMaxX(), MapSizeX(), MP_INDUSTRY, NT_ACCIDENT, Order::SetDestination(), SetDParam(), ClientSettings::sound, Vehicle::tick_counter, OrthogonalTileArea::tile, TILE_SIZE, TileVirtXY(), TileX(), TileY(), Industry::town, DisasterVehicle::UpdatePosition(), Vehicle::x_pos, GetNewVehiclePosResult::y, and Vehicle::y_pos.

Referenced by DisasterTick_Airplane(), and DisasterTick_Helicopter().

static bool DisasterTick_Airplane | ( | DisasterVehicle * | v | ) |
| static

Airplane handling.

Definition at line 485 of file disaster_vehicle.cpp.

References DisasterTick_Aircraft(), and INDUSTRYBEH_AIRPLANE_ATTACKS.

static bool DisasterTick_Big_Ufo | ( | DisasterVehicle * | v | ) |
| static

(Big) Ufo handling, v->current_order.dest states: 0: Fly around to the middle of the map, then randomly for a while and home in on a piece of rail 1: Land there and breakdown all trains in a radius of 12 tiles; and now we wait...

because as soon as the Ufo lands, a fighter jet, a Skyranger, is called to clear up the mess

Definition at line 516 of file disaster_vehicle.cpp.

References Vehicle::age, Vehicle::breakdown_ctr, Vehicle::breakdown_delay, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_vehicle_pool >::CanAllocateItem(), ClosestTownFromTile(), Vehicle::current_order, Delta(), Vehicle::dest_tile, DIR_SW, Vehicle::direction, FOR_ALL_VEHICLES, Order::GetDestination(), GetNewVehiclePos(), GetTileOwner(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, Vehicle::IsGroundVehicle(), Company::IsHumanID(), IsPlainRailTile(), IsValidTile(), NT_ACCIDENT, RandomTile, Order::SetDestination(), SetDParam(), Vehicle::SetNext(), ST_BIG_UFO_DESTROYER, ST_BIG_UFO_DESTROYER_SHADOW, Vehicle::tick_counter, Vehicle::tile, TILE_MASK, TILE_SIZE, TileX(), TileY(), DisasterVehicle::UpdatePosition(), Vehicle::x_pos, GetNewVehiclePosResult::y, Vehicle::y_pos, and Vehicle::z_pos.

static bool DisasterTick_Helicopter | ( | DisasterVehicle * | v | ) |
| static

Helicopter handling.

Definition at line 491 of file disaster_vehicle.cpp.

References DisasterTick_Aircraft(), and INDUSTRYBEH_CHOPPER_ATTACKS.

void ReleaseDisastersTargetingIndustry | ( | IndustryID | i | ) |

Marks all disasters targeting this industry in such a way they won't call Industry::Get(v->dest_tile) on invalid industry anymore.

Parameters

  i | deleted industry

Definition at line 943 of file disaster_vehicle.cpp.

References Vehicle::current_order, Vehicle::dest_tile, FOR_ALL_DISASTERVEHICLES, Order::GetDestination(), Order::SetDestination(), ST_AIRPLANE, ST_HELICOPTER, and Vehicle::subtype.

void ReleaseDisastersTargetingVehicle | ( | VehicleID | vehicle | ) |

Notify disasters that we are about to delete a vehicle.

So make them head elsewhere.

Parameters

  vehicle | deleted vehicle

Definition at line 959 of file disaster_vehicle.cpp.

References Vehicle::age, Vehicle::current_order, Vehicle::dest_tile, FOR_ALL_DISASTERVEHICLES, GetAircraftFlightLevelBounds(), Order::GetDestination(), RandomTile, Order::SetDestination(), ST_SMALL_UFO, Vehicle::subtype, and Vehicle::z_pos.

Referenced by Vehicle::PreDestructor().

## Variable Documentation

uint16 _disaster_delay

Delay counter for considering the next disaster.

Definition at line 56 of file disaster_vehicle.cpp.

const SpriteID* const _disaster_images[]
| static

Initial value:
{
_disaster_images_1, _disaster_images_1,
_disaster_images_2, _disaster_images_2,
_disaster_images_3, _disaster_images_3,
_disaster_images_8, _disaster_images_8, _disaster_images_9,
_disaster_images_6, _disaster_images_6,
_disaster_images_7, _disaster_images_7,
_disaster_images_4, _disaster_images_5,
}

Definition at line 101 of file disaster_vehicle.cpp.

const Disaster _disasters[]
| static

Initial value:
{
{Disaster_Zeppeliner_Init, 1930, 1955},
{Disaster_Small_Ufo_Init, 1940, 1970},
{Disaster_Airplane_Init, 1960, 1990},
{Disaster_Helicopter_Init, 1970, 2000},
{Disaster_Big_Ufo_Init, 2000, 2100},
{Disaster_Small_Submarine_Init, 1940, 1965},
{Disaster_Big_Submarine_Init, 1975, 2010},
{Disaster_CoalMine_Init, 1950, 1985},
}

Definition at line 893 of file disaster_vehicle.cpp.

DisasterVehicleTickProc* const _disastervehicle_tick_procs[]
| static

Initial value:
{
DisasterTick_Zeppeliner, DisasterTick_NULL,
DisasterTick_Ufo, DisasterTick_NULL,
DisasterTick_Airplane, DisasterTick_NULL,
DisasterTick_Helicopter, DisasterTick_NULL, DisasterTick_Helicopter_Rotors,
DisasterTick_Big_Ufo, DisasterTick_NULL, DisasterTick_Big_Ufo_Destroyer,
DisasterTick_NULL,
DisasterTick_Submarine,
DisasterTick_Submarine,
}

Definition at line 682 of file disaster_vehicle.cpp.