disaster_cmd.cpp File Reference

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

#include "stdafx.h"
#include "landscape.h"
#include "industry.h"
#include "station_base.h"
#include "command_func.h"
#include "news_func.h"
#include "town.h"
#include "company_func.h"
#include "variables.h"
#include "strings_func.h"
#include "date_func.h"
#include "functions.h"
#include "vehicle_func.h"
#include "sound_func.h"
#include "effectvehicle_func.h"
#include "roadveh.h"
#include "ai/ai.hpp"
#include "company_base.h"
#include "core/random_func.hpp"
#include "table/strings.h"
#include "table/sprites.h"

Go to the source code of this file.

Data Structures

struct  Disaster

Typedefs

typedef bool DisasterVehicleTickProc (DisasterVehicle *v)
typedef void DisasterInitProc ()

Enumerations

enum  DisasterSubType {
  ST_ZEPPELINER, ST_ZEPPELINER_SHADOW, ST_SMALL_UFO, ST_SMALL_UFO_SHADOW,
  ST_AIRPLANE, ST_AIRPLANE_SHADOW, ST_HELICOPTER, ST_HELICOPTER_SHADOW,
  ST_HELICOPTER_ROTORS, ST_BIG_UFO, ST_BIG_UFO_SHADOW, ST_BIG_UFO_DESTROYER,
  ST_BIG_UFO_DESTROYER_SHADOW, ST_SMALL_SUBMARINE, ST_BIG_SUBMARINE
}

Functions

static void DisasterClearSquare (TileIndex tile)
static void DisasterVehicleUpdateImage (DisasterVehicle *v)
static void InitializeDisasterVehicle (DisasterVehicle *v, int x, int y, byte z, Direction direction, byte subtype)
 Initialize a disaster vehicle.
static void SetDisasterVehiclePos (DisasterVehicle *v, int x, int y, byte z)
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 targetted 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

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_cmd.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 targetted 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 384 of file disaster_cmd.cpp.

References Vehicle::current_order, Vehicle::dest_tile, GB(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tcache, Tzero >::PoolItem<&_industry_pool >::Get(), Order::GetDestination(), GetIndustryIndex(), GetIndustrySpec(), GetNewVehiclePos(), HasBit(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tcache, Tzero >::PoolItem< Tpool >::index, IsTileType(), Industry::location, MapMaxX(), MapSizeX(), MP_INDUSTRY, NS_ACCIDENT, Order::SetDestination(), SetDParam(), Vehicle::tick_counter, TileArea::tile, TILE_SIZE, TileX(), TileY(), Industry::town, and GetNewVehiclePosResult::y.

Referenced by DisasterTick_Airplane(), and DisasterTick_Helicopter().

static bool DisasterTick_Airplane ( DisasterVehicle v  )  [static]

Airplane handling.

Definition at line 446 of file disaster_cmd.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 476 of file disaster_cmd.cpp.

References AddNewsItem(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tcache, Tzero >::PoolItem<&_vehicle_pool >::CanAllocateItem(), Vehicle::current_order, Delta(), Vehicle::dest_tile, DIR_SW, Order::GetDestination(), GetNewVehiclePos(), GetTileOwner(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tcache, Tzero >::PoolItem< Tpool >::index, InitializeDisasterVehicle(), IsPlainRailTile(), IsValidTile(), NR_TILE, NS_ACCIDENT, RandomTile, Order::SetDestination(), SetDParam(), Vehicle::SetNext(), Vehicle::tick_counter, Vehicle::tile, TILE_MASK, TILE_SIZE, TileX(), TileY(), BaseVehicle::type, VEH_ROAD, VEH_TRAIN, Vehicle::vehstatus, and GetNewVehiclePosResult::y.

static bool DisasterTick_Helicopter ( DisasterVehicle v  )  [static]

Helicopter handling.

Definition at line 452 of file disaster_cmd.cpp.

References DisasterTick_Aircraft(), and INDUSTRYBEH_CHOPPER_ATTACKS.

static void InitializeDisasterVehicle ( DisasterVehicle v,
int  x,
int  y,
byte  z,
Direction  direction,
byte  subtype 
) [static]

Initialize a disaster vehicle.

These vehicles are of type VEH_DISASTER, are unclickable and owned by nobody

Definition at line 132 of file disaster_cmd.cpp.

References Vehicle::current_order, Order::Free(), INVALID_DIR, MarkSingleVehicleDirty(), OWNER_NONE, Vehicle::subtype, Vehicle::tile, DisasterVehicle::UpdateDeltaXY(), VehicleMove(), and Vehicle::vehstatus.

Referenced by Disaster_Helicopter_Init(), Disaster_Small_Ufo_Init(), Disaster_Zeppeliner_Init(), and DisasterTick_Big_Ufo().

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 933 of file disaster_cmd.cpp.

References Vehicle::current_order, Vehicle::dest_tile, Order::GetDestination(), Order::SetDestination(), 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 948 of file disaster_cmd.cpp.

References Vehicle::current_order, Vehicle::dest_tile, Order::GetDestination(), RandomTile, Order::SetDestination(), and Vehicle::subtype.

Referenced by Vehicle::PreDestructor().


Variable Documentation

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 113 of file disaster_cmd.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 884 of file disaster_cmd.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 652 of file disaster_cmd.cpp.


Generated on Sat Nov 20 20:59:14 2010 for OpenTTD by  doxygen 1.6.1