src/effectvehicle.cpp
author truebrain
Mon, 30 Jun 2008 13:36:06 +0000
branchnoai
changeset 11100 b960288098b9
parent 10829 8a0ec0f0f928
permissions -rw-r--r--
(svn r13658) [NoAI] -Fix r13656: to maintain savegame compatibility with trunk, don't allow setting max_opcodes, but force it to value 4000.
10294
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
     1
/* $Id$ */
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
     2
10455
22c441f5adf9 (svn r12997) [NoAI] -Sync: with trunk r12895:12996.
rubidium
parents: 10294
diff changeset
     3
/** @file effectvehicle.cpp Implementation of everything generic to vehicles. */
10294
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
     4
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
     5
#include "stdafx.h"
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
     6
#include "openttd.h"
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
     7
#include "road_map.h"
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
     8
#include "roadveh.h"
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
     9
#include "ship.h"
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    10
#include "spritecache.h"
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    11
#include "tile_cmd.h"
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    12
#include "landscape.h"
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    13
#include "timetable.h"
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    14
#include "viewport_func.h"
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    15
#include "gfx_func.h"
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    16
#include "news_func.h"
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    17
#include "command_func.h"
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    18
#include "saveload.h"
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    19
#include "player_func.h"
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    20
#include "debug.h"
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    21
#include "vehicle_gui.h"
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    22
#include "rail_type.h"
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    23
#include "train.h"
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    24
#include "aircraft.h"
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    25
#include "industry_map.h"
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    26
#include "station_map.h"
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    27
#include "water_map.h"
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    28
#include "yapf/yapf.h"
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    29
#include "newgrf_callbacks.h"
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    30
#include "newgrf_engine.h"
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    31
#include "newgrf_sound.h"
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    32
#include "group.h"
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    33
#include "order_func.h"
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    34
#include "strings_func.h"
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    35
#include "zoom_func.h"
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    36
#include "functions.h"
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    37
#include "date_func.h"
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    38
#include "window_func.h"
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    39
#include "vehicle_func.h"
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    40
#include "signal_func.h"
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    41
#include "sound_func.h"
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    42
#include "variables.h"
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    43
#include "autoreplace_func.h"
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    44
#include "autoreplace_gui.h"
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    45
#include "string_func.h"
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    46
#include "settings_type.h"
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    47
#include "oldpool_func.h"
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    48
#include "depot_map.h"
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    49
#include "animated_tile_func.h"
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    50
#include "effectvehicle_base.h"
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    51
#include "effectvehicle_func.h"
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    52
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    53
#include "table/sprites.h"
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    54
#include "table/strings.h"
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    55
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    56
static void ChimneySmokeInit(Vehicle *v)
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    57
{
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    58
	uint32 r = Random();
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    59
	v->cur_image = SPR_CHIMNEY_SMOKE_0 + GB(r, 0, 3);
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    60
	v->progress = GB(r, 16, 3);
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    61
}
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    62
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    63
static void ChimneySmokeTick(Vehicle *v)
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    64
{
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    65
	if (v->progress > 0) {
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    66
		v->progress--;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    67
	} else {
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    68
		BeginVehicleMove(v);
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    69
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    70
		TileIndex tile = TileVirtXY(v->x_pos, v->y_pos);
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    71
		if (!IsTileType(tile, MP_INDUSTRY)) {
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    72
			EndVehicleMove(v);
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    73
			delete v;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    74
			return;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    75
		}
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    76
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    77
		if (v->cur_image != SPR_CHIMNEY_SMOKE_7) {
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    78
			v->cur_image++;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    79
		} else {
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    80
			v->cur_image = SPR_CHIMNEY_SMOKE_0;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    81
		}
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    82
		v->progress = 7;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    83
		VehiclePositionChanged(v);
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    84
		EndVehicleMove(v);
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    85
	}
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    86
}
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    87
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    88
static void SteamSmokeInit(Vehicle *v)
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    89
{
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    90
	v->cur_image = SPR_STEAM_SMOKE_0;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    91
	v->progress = 12;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    92
}
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    93
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    94
static void SteamSmokeTick(Vehicle *v)
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    95
{
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    96
	bool moved = false;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    97
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    98
	BeginVehicleMove(v);
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
    99
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   100
	v->progress++;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   101
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   102
	if ((v->progress & 7) == 0) {
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   103
		v->z_pos++;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   104
		moved = true;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   105
	}
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   106
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   107
	if ((v->progress & 0xF) == 4) {
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   108
		if (v->cur_image != SPR_STEAM_SMOKE_4) {
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   109
			v->cur_image++;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   110
		} else {
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   111
			EndVehicleMove(v);
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   112
			delete v;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   113
			return;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   114
		}
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   115
		moved = true;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   116
	}
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   117
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   118
	if (moved) {
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   119
		VehiclePositionChanged(v);
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   120
		EndVehicleMove(v);
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   121
	}
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   122
}
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   123
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   124
static void DieselSmokeInit(Vehicle *v)
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   125
{
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   126
	v->cur_image = SPR_DIESEL_SMOKE_0;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   127
	v->progress = 0;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   128
}
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   129
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   130
static void DieselSmokeTick(Vehicle *v)
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   131
{
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   132
	v->progress++;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   133
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   134
	if ((v->progress & 3) == 0) {
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   135
		BeginVehicleMove(v);
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   136
		v->z_pos++;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   137
		VehiclePositionChanged(v);
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   138
		EndVehicleMove(v);
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   139
	} else if ((v->progress & 7) == 1) {
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   140
		BeginVehicleMove(v);
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   141
		if (v->cur_image != SPR_DIESEL_SMOKE_5) {
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   142
			v->cur_image++;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   143
			VehiclePositionChanged(v);
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   144
			EndVehicleMove(v);
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   145
		} else {
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   146
			EndVehicleMove(v);
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   147
			delete v;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   148
		}
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   149
	}
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   150
}
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   151
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   152
static void ElectricSparkInit(Vehicle *v)
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   153
{
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   154
	v->cur_image = SPR_ELECTRIC_SPARK_0;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   155
	v->progress = 1;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   156
}
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   157
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   158
static void ElectricSparkTick(Vehicle *v)
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   159
{
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   160
	if (v->progress < 2) {
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   161
		v->progress++;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   162
	} else {
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   163
		v->progress = 0;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   164
		BeginVehicleMove(v);
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   165
		if (v->cur_image != SPR_ELECTRIC_SPARK_5) {
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   166
			v->cur_image++;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   167
			VehiclePositionChanged(v);
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   168
			EndVehicleMove(v);
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   169
		} else {
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   170
			EndVehicleMove(v);
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   171
			delete v;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   172
		}
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   173
	}
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   174
}
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   175
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   176
static void SmokeInit(Vehicle *v)
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   177
{
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   178
	v->cur_image = SPR_SMOKE_0;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   179
	v->progress = 12;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   180
}
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   181
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   182
static void SmokeTick(Vehicle *v)
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   183
{
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   184
	bool moved = false;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   185
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   186
	BeginVehicleMove(v);
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   187
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   188
	v->progress++;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   189
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   190
	if ((v->progress & 3) == 0) {
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   191
		v->z_pos++;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   192
		moved = true;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   193
	}
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   194
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   195
	if ((v->progress & 0xF) == 4) {
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   196
		if (v->cur_image != SPR_SMOKE_4) {
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   197
			v->cur_image++;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   198
		} else {
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   199
			EndVehicleMove(v);
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   200
			delete v;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   201
			return;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   202
		}
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   203
		moved = true;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   204
	}
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   205
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   206
	if (moved) {
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   207
		VehiclePositionChanged(v);
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   208
		EndVehicleMove(v);
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   209
	}
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   210
}
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   211
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   212
static void ExplosionLargeInit(Vehicle *v)
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   213
{
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   214
	v->cur_image = SPR_EXPLOSION_LARGE_0;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   215
	v->progress = 0;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   216
}
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   217
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   218
static void ExplosionLargeTick(Vehicle *v)
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   219
{
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   220
	v->progress++;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   221
	if ((v->progress & 3) == 0) {
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   222
		BeginVehicleMove(v);
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   223
		if (v->cur_image != SPR_EXPLOSION_LARGE_F) {
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   224
			v->cur_image++;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   225
			VehiclePositionChanged(v);
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   226
			EndVehicleMove(v);
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   227
		} else {
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   228
			EndVehicleMove(v);
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   229
			delete v;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   230
		}
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   231
	}
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   232
}
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   233
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   234
static void BreakdownSmokeInit(Vehicle *v)
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   235
{
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   236
	v->cur_image = SPR_BREAKDOWN_SMOKE_0;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   237
	v->progress = 0;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   238
}
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   239
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   240
static void BreakdownSmokeTick(Vehicle *v)
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   241
{
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   242
	v->progress++;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   243
	if ((v->progress & 7) == 0) {
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   244
		BeginVehicleMove(v);
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   245
		if (v->cur_image != SPR_BREAKDOWN_SMOKE_3) {
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   246
			v->cur_image++;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   247
		} else {
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   248
			v->cur_image = SPR_BREAKDOWN_SMOKE_0;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   249
		}
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   250
		VehiclePositionChanged(v);
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   251
		EndVehicleMove(v);
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   252
	}
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   253
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   254
	v->u.effect.animation_state--;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   255
	if (v->u.effect.animation_state == 0) {
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   256
		BeginVehicleMove(v);
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   257
		EndVehicleMove(v);
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   258
		delete v;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   259
	}
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   260
}
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   261
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   262
static void ExplosionSmallInit(Vehicle *v)
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   263
{
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   264
	v->cur_image = SPR_EXPLOSION_SMALL_0;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   265
	v->progress = 0;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   266
}
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   267
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   268
static void ExplosionSmallTick(Vehicle *v)
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   269
{
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   270
	v->progress++;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   271
	if ((v->progress & 3) == 0) {
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   272
		BeginVehicleMove(v);
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   273
		if (v->cur_image != SPR_EXPLOSION_SMALL_B) {
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   274
			v->cur_image++;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   275
			VehiclePositionChanged(v);
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   276
			EndVehicleMove(v);
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   277
		} else {
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   278
			EndVehicleMove(v);
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   279
			delete v;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   280
		}
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   281
	}
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   282
}
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   283
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   284
static void BulldozerInit(Vehicle *v)
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   285
{
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   286
	v->cur_image = SPR_BULLDOZER_NE;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   287
	v->progress = 0;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   288
	v->u.effect.animation_state = 0;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   289
	v->u.effect.animation_substate = 0;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   290
}
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   291
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   292
struct BulldozerMovement {
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   293
	byte direction:2;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   294
	byte image:2;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   295
	byte duration:3;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   296
};
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   297
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   298
static const BulldozerMovement _bulldozer_movement[] = {
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   299
	{ 0, 0, 4 },
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   300
	{ 3, 3, 4 },
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   301
	{ 2, 2, 7 },
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   302
	{ 0, 2, 7 },
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   303
	{ 1, 1, 3 },
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   304
	{ 2, 2, 7 },
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   305
	{ 0, 2, 7 },
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   306
	{ 1, 1, 3 },
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   307
	{ 2, 2, 7 },
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   308
	{ 0, 2, 7 },
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   309
	{ 3, 3, 6 },
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   310
	{ 2, 2, 6 },
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   311
	{ 1, 1, 7 },
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   312
	{ 3, 1, 7 },
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   313
	{ 0, 0, 3 },
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   314
	{ 1, 1, 7 },
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   315
	{ 3, 1, 7 },
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   316
	{ 0, 0, 3 },
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   317
	{ 1, 1, 7 },
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   318
	{ 3, 1, 7 }
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   319
};
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   320
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   321
static const struct {
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   322
	int8 x;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   323
	int8 y;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   324
} _inc_by_dir[] = {
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   325
	{ -1,  0 },
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   326
	{  0,  1 },
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   327
	{  1,  0 },
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   328
	{  0, -1 }
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   329
};
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   330
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   331
static void BulldozerTick(Vehicle *v)
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   332
{
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   333
	v->progress++;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   334
	if ((v->progress & 7) == 0) {
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   335
		const BulldozerMovement* b = &_bulldozer_movement[v->u.effect.animation_state];
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   336
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   337
		BeginVehicleMove(v);
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   338
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   339
		v->cur_image = SPR_BULLDOZER_NE + b->image;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   340
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   341
		v->x_pos += _inc_by_dir[b->direction].x;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   342
		v->y_pos += _inc_by_dir[b->direction].y;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   343
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   344
		v->u.effect.animation_substate++;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   345
		if (v->u.effect.animation_substate >= b->duration) {
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   346
			v->u.effect.animation_substate = 0;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   347
			v->u.effect.animation_state++;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   348
			if (v->u.effect.animation_state == lengthof(_bulldozer_movement)) {
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   349
				EndVehicleMove(v);
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   350
				delete v;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   351
				return;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   352
			}
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   353
		}
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   354
		VehiclePositionChanged(v);
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   355
		EndVehicleMove(v);
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   356
	}
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   357
}
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   358
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   359
static void BubbleInit(Vehicle *v)
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   360
{
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   361
	v->cur_image = SPR_BUBBLE_GENERATE_0;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   362
	v->spritenum = 0;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   363
	v->progress = 0;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   364
}
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   365
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   366
struct BubbleMovement {
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   367
	int8 x:4;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   368
	int8 y:4;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   369
	int8 z:4;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   370
	byte image:4;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   371
};
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   372
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   373
#define MK(x, y, z, i) { x, y, z, i }
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   374
#define ME(i) { i, 4, 0, 0 }
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   375
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   376
static const BubbleMovement _bubble_float_sw[] = {
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   377
	MK(0, 0, 1, 0),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   378
	MK(1, 0, 1, 1),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   379
	MK(0, 0, 1, 0),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   380
	MK(1, 0, 1, 2),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   381
	ME(1)
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   382
};
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   383
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   384
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   385
static const BubbleMovement _bubble_float_ne[] = {
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   386
	MK( 0, 0, 1, 0),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   387
	MK(-1, 0, 1, 1),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   388
	MK( 0, 0, 1, 0),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   389
	MK(-1, 0, 1, 2),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   390
	ME(1)
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   391
};
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   392
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   393
static const BubbleMovement _bubble_float_se[] = {
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   394
	MK(0, 0, 1, 0),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   395
	MK(0, 1, 1, 1),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   396
	MK(0, 0, 1, 0),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   397
	MK(0, 1, 1, 2),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   398
	ME(1)
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   399
};
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   400
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   401
static const BubbleMovement _bubble_float_nw[] = {
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   402
	MK(0,  0, 1, 0),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   403
	MK(0, -1, 1, 1),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   404
	MK(0,  0, 1, 0),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   405
	MK(0, -1, 1, 2),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   406
	ME(1)
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   407
};
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   408
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   409
static const BubbleMovement _bubble_burst[] = {
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   410
	MK(0, 0, 1, 2),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   411
	MK(0, 0, 1, 7),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   412
	MK(0, 0, 1, 8),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   413
	MK(0, 0, 1, 9),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   414
	ME(0)
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   415
};
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   416
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   417
static const BubbleMovement _bubble_absorb[] = {
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   418
	MK(0, 0, 1, 0),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   419
	MK(0, 0, 1, 1),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   420
	MK(0, 0, 1, 0),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   421
	MK(0, 0, 1, 2),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   422
	MK(0, 0, 1, 0),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   423
	MK(0, 0, 1, 1),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   424
	MK(0, 0, 1, 0),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   425
	MK(0, 0, 1, 2),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   426
	MK(0, 0, 1, 0),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   427
	MK(0, 0, 1, 1),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   428
	MK(0, 0, 1, 0),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   429
	MK(0, 0, 1, 2),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   430
	MK(0, 0, 1, 0),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   431
	MK(0, 0, 1, 1),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   432
	MK(0, 0, 1, 0),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   433
	MK(0, 0, 1, 2),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   434
	MK(0, 0, 1, 0),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   435
	MK(0, 0, 1, 1),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   436
	MK(0, 0, 1, 0),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   437
	MK(0, 0, 1, 2),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   438
	MK(0, 0, 1, 0),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   439
	MK(0, 0, 1, 1),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   440
	MK(0, 0, 1, 0),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   441
	MK(0, 0, 1, 2),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   442
	MK(0, 0, 1, 0),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   443
	MK(0, 0, 1, 1),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   444
	MK(0, 0, 1, 0),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   445
	MK(0, 0, 1, 2),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   446
	MK(0, 0, 1, 0),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   447
	MK(0, 0, 1, 1),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   448
	MK(0, 0, 1, 0),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   449
	MK(0, 0, 1, 2),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   450
	MK(0, 0, 1, 0),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   451
	MK(0, 0, 1, 1),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   452
	MK(0, 0, 1, 0),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   453
	MK(0, 0, 1, 2),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   454
	MK(0, 0, 1, 0),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   455
	MK(0, 0, 1, 1),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   456
	MK(0, 0, 1, 0),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   457
	MK(0, 0, 1, 2),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   458
	MK(0, 0, 1, 0),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   459
	MK(0, 0, 1, 1),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   460
	MK(0, 0, 1, 0),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   461
	MK(0, 0, 1, 2),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   462
	MK(0, 0, 1, 0),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   463
	MK(0, 0, 1, 1),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   464
	MK(0, 0, 1, 0),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   465
	MK(0, 0, 1, 2),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   466
	MK(0, 0, 1, 0),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   467
	MK(0, 0, 1, 1),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   468
	MK(0, 0, 1, 0),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   469
	MK(0, 0, 1, 2),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   470
	MK(0, 0, 1, 0),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   471
	MK(0, 0, 1, 1),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   472
	MK(0, 0, 1, 0),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   473
	MK(0, 0, 1, 2),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   474
	MK(0, 0, 1, 0),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   475
	MK(0, 0, 1, 1),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   476
	MK(0, 0, 1, 0),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   477
	MK(0, 0, 1, 2),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   478
	MK(0, 0, 1, 0),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   479
	MK(0, 0, 1, 1),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   480
	MK(2, 1, 3, 0),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   481
	MK(1, 1, 3, 1),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   482
	MK(2, 1, 3, 0),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   483
	MK(1, 1, 3, 2),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   484
	MK(2, 1, 3, 0),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   485
	MK(1, 1, 3, 1),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   486
	MK(2, 1, 3, 0),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   487
	MK(1, 0, 1, 2),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   488
	MK(0, 0, 1, 0),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   489
	MK(1, 0, 1, 1),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   490
	MK(0, 0, 1, 0),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   491
	MK(1, 0, 1, 2),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   492
	MK(0, 0, 1, 0),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   493
	MK(1, 0, 1, 1),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   494
	MK(0, 0, 1, 0),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   495
	MK(1, 0, 1, 2),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   496
	ME(2),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   497
	MK(0, 0, 0, 0xA),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   498
	MK(0, 0, 0, 0xB),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   499
	MK(0, 0, 0, 0xC),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   500
	MK(0, 0, 0, 0xD),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   501
	MK(0, 0, 0, 0xE),
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   502
	ME(0)
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   503
};
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   504
#undef ME
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   505
#undef MK
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   506
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   507
static const BubbleMovement * const _bubble_movement[] = {
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   508
	_bubble_float_sw,
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   509
	_bubble_float_ne,
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   510
	_bubble_float_se,
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   511
	_bubble_float_nw,
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   512
	_bubble_burst,
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   513
	_bubble_absorb,
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   514
};
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   515
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   516
static void BubbleTick(Vehicle *v)
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   517
{
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   518
	/*
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   519
	 * Warning: those effects can NOT use Random(), and have to use
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   520
	 *  InteractiveRandom(), because somehow someone forgot to save
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   521
	 *  spritenum to the savegame, and so it will cause desyncs in
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   522
	 *  multiplayer!! (that is: in ToyLand)
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   523
	 */
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   524
	uint et;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   525
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   526
	v->progress++;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   527
	if ((v->progress & 3) != 0) return;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   528
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   529
	BeginVehicleMove(v);
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   530
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   531
	if (v->spritenum == 0) {
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   532
		v->cur_image++;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   533
		if (v->cur_image < SPR_BUBBLE_GENERATE_3) {
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   534
			VehiclePositionChanged(v);
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   535
			EndVehicleMove(v);
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   536
			return;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   537
		}
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   538
		if (v->u.effect.animation_substate != 0) {
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   539
			v->spritenum = GB(InteractiveRandom(), 0, 2) + 1;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   540
		} else {
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   541
			v->spritenum = 6;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   542
		}
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   543
		et = 0;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   544
	} else {
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   545
		et = v->engine_type + 1;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   546
	}
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   547
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   548
	const BubbleMovement *b = &_bubble_movement[v->spritenum - 1][et];
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   549
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   550
	if (b->y == 4 && b->x == 0) {
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   551
		EndVehicleMove(v);
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   552
		delete v;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   553
		return;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   554
	}
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   555
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   556
	if (b->y == 4 && b->x == 1) {
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   557
		if (v->z_pos > 180 || Chance16I(1, 96, InteractiveRandom())) {
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   558
			v->spritenum = 5;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   559
			SndPlayVehicleFx(SND_2F_POP, v);
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   560
		}
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   561
		et = 0;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   562
	}
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   563
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   564
	if (b->y == 4 && b->x == 2) {
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   565
		TileIndex tile;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   566
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   567
		et++;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   568
		SndPlayVehicleFx(SND_31_EXTRACT, v);
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   569
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   570
		tile = TileVirtXY(v->x_pos, v->y_pos);
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   571
		if (IsTileType(tile, MP_INDUSTRY) && GetIndustryGfx(tile) == GFX_BUBBLE_CATCHER) AddAnimatedTile(tile);
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   572
	}
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   573
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   574
	v->engine_type = et;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   575
	b = &_bubble_movement[v->spritenum - 1][et];
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   576
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   577
	v->x_pos += b->x;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   578
	v->y_pos += b->y;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   579
	v->z_pos += b->z;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   580
	v->cur_image = SPR_BUBBLE_0 + b->image;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   581
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   582
	VehiclePositionChanged(v);
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   583
	EndVehicleMove(v);
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   584
}
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   585
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   586
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   587
typedef void EffectInitProc(Vehicle *v);
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   588
typedef void EffectTickProc(Vehicle *v);
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   589
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   590
static EffectInitProc * const _effect_init_procs[] = {
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   591
	ChimneySmokeInit,
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   592
	SteamSmokeInit,
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   593
	DieselSmokeInit,
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   594
	ElectricSparkInit,
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   595
	SmokeInit,
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   596
	ExplosionLargeInit,
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   597
	BreakdownSmokeInit,
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   598
	ExplosionSmallInit,
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   599
	BulldozerInit,
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   600
	BubbleInit,
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   601
};
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   602
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   603
static EffectTickProc * const _effect_tick_procs[] = {
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   604
	ChimneySmokeTick,
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   605
	SteamSmokeTick,
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   606
	DieselSmokeTick,
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   607
	ElectricSparkTick,
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   608
	SmokeTick,
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   609
	ExplosionLargeTick,
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   610
	BreakdownSmokeTick,
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   611
	ExplosionSmallTick,
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   612
	BulldozerTick,
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   613
	BubbleTick,
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   614
};
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   615
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   616
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   617
Vehicle *CreateEffectVehicle(int x, int y, int z, EffectVehicleType type)
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   618
{
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   619
	Vehicle *v = new EffectVehicle();
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   620
	if (v != NULL) {
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   621
		v->subtype = type;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   622
		v->x_pos = x;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   623
		v->y_pos = y;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   624
		v->z_pos = z;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   625
		v->tile = 0;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   626
		v->UpdateDeltaXY(INVALID_DIR);
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   627
		v->vehstatus = VS_UNCLICKABLE;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   628
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   629
		_effect_init_procs[type](v);
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   630
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   631
		VehiclePositionChanged(v);
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   632
		BeginVehicleMove(v);
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   633
		EndVehicleMove(v);
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   634
	}
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   635
	return v;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   636
}
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   637
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   638
Vehicle *CreateEffectVehicleAbove(int x, int y, int z, EffectVehicleType type)
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   639
{
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   640
	int safe_x = Clamp(x, 0, MapMaxX() * TILE_SIZE);
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   641
	int safe_y = Clamp(y, 0, MapMaxY() * TILE_SIZE);
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   642
	return CreateEffectVehicle(x, y, GetSlopeZ(safe_x, safe_y) + z, type);
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   643
}
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   644
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   645
Vehicle *CreateEffectVehicleRel(const Vehicle *v, int x, int y, int z, EffectVehicleType type)
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   646
{
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   647
	return CreateEffectVehicle(v->x_pos + x, v->y_pos + y, v->z_pos + z, type);
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   648
}
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   649
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   650
void EffectVehicle::Tick()
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   651
{
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   652
	_effect_tick_procs[this->subtype](this);
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   653
}
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   654
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   655
void EffectVehicle::UpdateDeltaXY(Direction direction)
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   656
{
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   657
	this->x_offs        = 0;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   658
	this->y_offs        = 0;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   659
	this->x_extent      = 1;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   660
	this->y_extent      = 1;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   661
	this->z_extent      = 1;
7798ae816af8 (svn r12826) [NoAI] -Sync: with trunk r12780:12824
glx
parents:
diff changeset
   662
}