(svn r15749) -Codechange: apply coding style to disaster_cmd.cpp

replace/41b28d7194a279bdc17475d4fbe2ea6ec885a466
yexo 16 years ago
parent f044ef6564
commit 72dc128915

@ -141,8 +141,6 @@ static void InitializeDisasterVehicle(Vehicle *v, int x, int y, byte z, Directio
static void SetDisasterVehiclePos(Vehicle *v, int x, int y, byte z) static void SetDisasterVehiclePos(Vehicle *v, int x, int y, byte z)
{ {
Vehicle *u;
v->x_pos = x; v->x_pos = x;
v->y_pos = y; v->y_pos = y;
v->z_pos = z; v->z_pos = z;
@ -151,7 +149,8 @@ static void SetDisasterVehiclePos(Vehicle *v, int x, int y, byte z)
DisasterVehicleUpdateImage(v); DisasterVehicleUpdateImage(v);
VehicleMove(v, true); VehicleMove(v, true);
if ((u = v->Next()) != NULL) { Vehicle *u = v->Next();
if (u != NULL) {
int safe_x = Clamp(x, 0, MapMaxX() * TILE_SIZE); int safe_x = Clamp(x, 0, MapMaxX() * TILE_SIZE);
int safe_y = Clamp(y - 1, 0, MapMaxY() * TILE_SIZE); int safe_y = Clamp(y - 1, 0, MapMaxY() * TILE_SIZE);
@ -183,11 +182,6 @@ static void SetDisasterVehiclePos(Vehicle *v, int x, int y, byte z)
*/ */
static void DisasterTick_Zeppeliner(Vehicle *v) static void DisasterTick_Zeppeliner(Vehicle *v)
{ {
Station *st;
int x, y;
byte z;
TileIndex tile;
v->tick_counter++; v->tick_counter++;
if (v->current_order.GetDestination() < 2) { if (v->current_order.GetDestination() < 2) {
@ -206,20 +200,18 @@ static void DisasterTick_Zeppeliner(Vehicle *v)
if (GB(v->tick_counter, 0, 3) == 0) CreateEffectVehicleRel(v, 0, -17, 2, EV_SMOKE); if (GB(v->tick_counter, 0, 3) == 0) CreateEffectVehicleRel(v, 0, -17, 2, EV_SMOKE);
} else if (v->current_order.GetDestination() == 0) { } else if (v->current_order.GetDestination() == 0) {
tile = v->tile; if (IsValidTile(v->tile) &&
IsTileType(v->tile, MP_STATION) &&
if (IsValidTile(tile) && IsAirport(v->tile)) {
IsTileType(tile, MP_STATION) &&
IsAirport(tile)) {
v->current_order.SetDestination(1); v->current_order.SetDestination(1);
v->age = 0; v->age = 0;
SetDParam(0, GetStationIndex(tile)); SetDParam(0, GetStationIndex(v->tile));
AddNewsItem(STR_B000_ZEPPELIN_DISASTER_AT, AddNewsItem(STR_B000_ZEPPELIN_DISASTER_AT,
NS_ACCIDENT_VEHICLE, NS_ACCIDENT_VEHICLE,
v->index, v->index,
0); 0);
AI::NewEvent(GetTileOwner(tile), new AIEventDisasterZeppelinerCrashed(GetStationIndex(tile))); AI::NewEvent(GetTileOwner(v->tile), new AIEventDisasterZeppelinerCrashed(GetStationIndex(v->tile)));
} }
} }
@ -230,14 +222,12 @@ static void DisasterTick_Zeppeliner(Vehicle *v)
if (v->current_order.GetDestination() > 2) { if (v->current_order.GetDestination() > 2) {
if (++v->age <= 13320) return; if (++v->age <= 13320) return;
tile = v->tile; if (IsValidTile(v->tile) &&
IsTileType(v->tile, MP_STATION) &&
if (IsValidTile(tile) && IsAirport(v->tile)) {
IsTileType(tile, MP_STATION) && Station *st = GetStationByTile(v->tile);
IsAirport(tile)) {
st = GetStationByTile(tile);
CLRBITS(st->airport_flags, RUNWAY_IN_block); CLRBITS(st->airport_flags, RUNWAY_IN_block);
AI::NewEvent(GetTileOwner(tile), new AIEventDisasterZeppelinerCleared(st->index)); AI::NewEvent(GetTileOwner(v->tile), new AIEventDisasterZeppelinerCleared(st->index));
} }
SetDisasterVehiclePos(v, v->x_pos, v->y_pos, v->z_pos); SetDisasterVehiclePos(v, v->x_pos, v->y_pos, v->z_pos);
@ -245,9 +235,9 @@ static void DisasterTick_Zeppeliner(Vehicle *v)
return; return;
} }
x = v->x_pos; int x = v->x_pos;
y = v->y_pos; int y = v->y_pos;
z = GetSlopeZ(x, y); byte z = GetSlopeZ(x, y);
if (z < v->z_pos) z = v->z_pos - 1; if (z < v->z_pos) z = v->z_pos - 1;
SetDisasterVehiclePos(v, x, y, z); SetDisasterVehiclePos(v, x, y, z);
@ -272,12 +262,10 @@ static void DisasterTick_Zeppeliner(Vehicle *v)
v->age = 0; v->age = 0;
} }
tile = v->tile; if (IsValidTile(v->tile) &&
if (IsValidTile(tile) && IsTileType(v->tile, MP_STATION) &&
IsTileType(tile, MP_STATION) && IsAirport(v->tile)) {
IsAirport(tile)) { SETBITS(GetStationByTile(v->tile)->airport_flags, RUNWAY_IN_block);
st = GetStationByTile(tile);
SETBITS(st->airport_flags, RUNWAY_IN_block);
} }
} }
@ -289,10 +277,6 @@ static void DisasterTick_Zeppeliner(Vehicle *v)
*/ */
static void DisasterTick_Ufo(Vehicle *v) static void DisasterTick_Ufo(Vehicle *v)
{ {
Vehicle *u;
uint dist;
byte z;
v->u.disaster.image_override = (HasBit(++v->tick_counter, 3)) ? SPR_UFO_SMALL_SCOUT_DARKER : SPR_UFO_SMALL_SCOUT; v->u.disaster.image_override = (HasBit(++v->tick_counter, 3)) ? SPR_UFO_SMALL_SCOUT_DARKER : SPR_UFO_SMALL_SCOUT;
if (v->current_order.GetDestination() == 0) { if (v->current_order.GetDestination() == 0) {
@ -311,6 +295,7 @@ static void DisasterTick_Ufo(Vehicle *v)
} }
v->current_order.SetDestination(1); v->current_order.SetDestination(1);
Vehicle *u;
FOR_ALL_VEHICLES(u) { FOR_ALL_VEHICLES(u) {
if (u->type == VEH_ROAD && IsRoadVehFront(u)) { if (u->type == VEH_ROAD && IsRoadVehFront(u)) {
v->dest_tile = u->index; v->dest_tile = u->index;
@ -322,13 +307,13 @@ static void DisasterTick_Ufo(Vehicle *v)
delete v; delete v;
} else { } else {
/* Target a vehicle */ /* Target a vehicle */
u = GetVehicle(v->dest_tile); Vehicle *u = GetVehicle(v->dest_tile);
if (u->type != VEH_ROAD || !IsRoadVehFront(u)) { if (u->type != VEH_ROAD || !IsRoadVehFront(u)) {
delete v; delete v;
return; return;
} }
dist = Delta(v->x_pos, u->x_pos) + Delta(v->y_pos, u->y_pos); uint dist = Delta(v->x_pos, u->x_pos) + Delta(v->y_pos, u->y_pos);
if (dist < TILE_SIZE && !(u->vehstatus & VS_HIDDEN) && u->breakdown_ctr == 0) { if (dist < TILE_SIZE && !(u->vehstatus & VS_HIDDEN) && u->breakdown_ctr == 0) {
u->breakdown_ctr = 3; u->breakdown_ctr = 3;
@ -338,7 +323,7 @@ static void DisasterTick_Ufo(Vehicle *v)
v->direction = GetDirectionTowards(v, u->x_pos, u->y_pos); v->direction = GetDirectionTowards(v, u->x_pos, u->y_pos);
GetNewVehiclePosResult gp = GetNewVehiclePos(v); GetNewVehiclePosResult gp = GetNewVehiclePos(v);
z = v->z_pos; byte z = v->z_pos;
if (dist <= TILE_SIZE && z > u->z_pos) z--; if (dist <= TILE_SIZE && z > u->z_pos) z--;
SetDisasterVehiclePos(v, gp.x, gp.y, z); SetDisasterVehiclePos(v, gp.x, gp.y, z);
@ -372,9 +357,7 @@ static void DisasterTick_Ufo(Vehicle *v)
static void DestructIndustry(Industry *i) static void DestructIndustry(Industry *i)
{ {
TileIndex tile; for (TileIndex tile = 0; tile != MapSize(); tile++) {
for (tile = 0; tile != MapSize(); tile++) {
if (IsTileType(tile, MP_INDUSTRY) && GetIndustryIndex(tile) == i->index) { if (IsTileType(tile, MP_INDUSTRY) && GetIndustryIndex(tile) == i->index) {
ResetIndustryConstructionStage(tile); ResetIndustryConstructionStage(tile);
MarkTileDirtyByTile(tile); MarkTileDirtyByTile(tile);
@ -383,23 +366,27 @@ static void DestructIndustry(Industry *i)
} }
/** /**
* Airplane handling, v->current_order.dest states: * Aircraft handling, v->current_order.dest states:
* 0: Fly towards the targetted oil refinery * 0: Fly towards the targetted industry
* 1: If within 15 tiles, fire away rockets and destroy industry * 1: If within 15 tiles, fire away rockets and destroy industry
* 2: Refinery explosions * 2: Industry explosions
* 3: Fly out of the map * 3: Fly out of the map
* If the industry was removed in the meantime just fly to the end of the map * If the industry was removed in the meantime just fly to the end of the map.
* @param v The disaster vehicle.
* @param image_override The image at the time the aircraft is firing.
* @param leave_at_top True iff the vehicle leaves the map at the north side.
* @param news_message The string that's used as news message.
* @param industry_flag Only attack industries that have this flag set.
*/ */
static void DisasterTick_Airplane(Vehicle *v) static void DisasterTick_Aircraft(Vehicle *v, uint16 image_override, bool leave_at_top, StringID news_message, IndustryBehaviour industry_flag)
{ {
v->tick_counter++; v->tick_counter++;
v->u.disaster.image_override = v->u.disaster.image_override = (v->current_order.GetDestination() == 1 && HasBit(v->tick_counter, 2)) ? image_override : 0;
(v->current_order.GetDestination() == 1 && HasBit(v->tick_counter, 2)) ? SPR_F_15_FIRING : 0;
GetNewVehiclePosResult gp = GetNewVehiclePos(v); GetNewVehiclePosResult gp = GetNewVehiclePos(v);
SetDisasterVehiclePos(v, gp.x, gp.y, v->z_pos); SetDisasterVehiclePos(v, gp.x, gp.y, v->z_pos);
if (gp.x < (-10 * TILE_SIZE)) { if ((leave_at_top && gp.x < (-10 * TILE_SIZE)) || (!leave_at_top && gp.x > (int)MapSizeX() * TILE_SIZE + 9 * TILE_SIZE - 1)) {
delete v; delete v;
return; return;
} }
@ -421,112 +408,45 @@ static void DisasterTick_Airplane(Vehicle *v)
} }
} else if (v->current_order.GetDestination() == 1) { } else if (v->current_order.GetDestination() == 1) {
if (++v->age == 112) { if (++v->age == 112) {
Industry *i;
v->current_order.SetDestination(2); v->current_order.SetDestination(2);
v->age = 0; v->age = 0;
i = GetIndustry(v->dest_tile); Industry *i = GetIndustry(v->dest_tile);
DestructIndustry(i); DestructIndustry(i);
SetDParam(0, i->town->index); SetDParam(0, i->town->index);
AddNewsItem(STR_B002_OIL_REFINERY_EXPLOSION, NS_ACCIDENT_TILE, i->xy, 0); AddNewsItem(news_message, NS_ACCIDENT_TILE, i->xy, 0);
SndPlayTileFx(SND_12_EXPLOSION, i->xy); SndPlayTileFx(SND_12_EXPLOSION, i->xy);
} }
} else if (v->current_order.GetDestination() == 0) { } else if (v->current_order.GetDestination() == 0) {
int x, y; int x = v->x_pos - (15 * TILE_SIZE);
TileIndex tile; int y = v->y_pos;
uint ind;
x = v->x_pos - (15 * TILE_SIZE);
y = v->y_pos;
if ( (uint)x > MapMaxX() * TILE_SIZE - 1) return; if ((uint)x > MapMaxX() * TILE_SIZE - 1) return;
tile = TileVirtXY(x, y); TileIndex tile = TileVirtXY(x, y);
if (!IsTileType(tile, MP_INDUSTRY)) return; if (!IsTileType(tile, MP_INDUSTRY)) return;
ind = GetIndustryIndex(tile); IndustryID ind = GetIndustryIndex(tile);
v->dest_tile = ind; v->dest_tile = ind;
if (GetIndustrySpec(GetIndustry(ind)->type)->behaviour & INDUSTRYBEH_AIRPLANE_ATTACKS) { if (GetIndustrySpec(GetIndustry(ind)->type)->behaviour & industry_flag) {
v->current_order.SetDestination(1); v->current_order.SetDestination(1);
v->age = 0; v->age = 0;
} }
} }
} }
/** /** Airplane handling. */
* Helicopter handling, v->current_order.dest states: static void DisasterTick_Airplane(Vehicle *v)
* 0: Fly towards the targetted factory
* 1: If within 15 tiles, fire away rockets and destroy industry
* 2: Factory explosions
* 3: Fly out of the map
*/
static void DisasterTick_Helicopter(Vehicle *v)
{ {
v->tick_counter++; DisasterTick_Aircraft(v, SPR_F_15_FIRING, true, STR_B002_OIL_REFINERY_EXPLOSION, INDUSTRYBEH_AIRPLANE_ATTACKS);
v->u.disaster.image_override = }
(v->current_order.GetDestination() == 1 && HasBit(v->tick_counter, 2)) ? SPR_AH_64A_FIRING : 0;
GetNewVehiclePosResult gp = GetNewVehiclePos(v);
SetDisasterVehiclePos(v, gp.x, gp.y, v->z_pos);
if (gp.x > (int)MapSizeX() * TILE_SIZE + 9 * TILE_SIZE - 1) {
delete v;
return;
}
if (v->current_order.GetDestination() == 2) {
if (GB(v->tick_counter, 0, 2) == 0) {
Industry *i = GetIndustry(v->dest_tile);
int x = TileX(i->xy) * TILE_SIZE;
int y = TileY(i->xy) * TILE_SIZE;
uint32 r = Random();
CreateEffectVehicleAbove(
GB(r, 0, 6) + x,
GB(r, 6, 6) + y,
GB(r, 12, 4),
EV_EXPLOSION_SMALL);
if (++v->age >= 55) v->current_order.SetDestination(3);
}
} else if (v->current_order.GetDestination() == 1) {
if (++v->age == 112) {
Industry *i;
v->current_order.SetDestination(2);
v->age = 0;
i = GetIndustry(v->dest_tile);
DestructIndustry(i);
SetDParam(0, i->town->index);
AddNewsItem(STR_B003_FACTORY_DESTROYED_IN_SUSPICIOUS, NS_ACCIDENT_TILE, i->xy, 0);
SndPlayTileFx(SND_12_EXPLOSION, i->xy);
}
} else if (v->current_order.GetDestination() == 0) {
int x, y;
TileIndex tile;
uint ind;
x = v->x_pos + (15 * TILE_SIZE);
y = v->y_pos;
if ( (uint)x > MapMaxX() * TILE_SIZE - 1) return;
tile = TileVirtXY(x, y);
if (!IsTileType(tile, MP_INDUSTRY)) return;
ind = GetIndustryIndex(tile);
v->dest_tile = ind;
if (GetIndustrySpec(GetIndustry(ind)->type)->behaviour & INDUSTRYBEH_CHOPPER_ATTACKS) { /** Helicopter handling. */
v->current_order.SetDestination(1); static void DisasterTick_Helicopter(Vehicle *v)
v->age = 0; {
} DisasterTick_Aircraft(v, SPR_AH_64A_FIRING, false, STR_B003_FACTORY_DESTROYED_IN_SUSPICIOUS, INDUSTRYBEH_CHOPPER_ATTACKS);
}
} }
/** Helicopter rotor blades; keep these spinning */ /** Helicopter rotor blades; keep these spinning */
@ -548,11 +468,6 @@ static void DisasterTick_Helicopter_Rotors(Vehicle *v)
*/ */
static void DisasterTick_Big_Ufo(Vehicle *v) static void DisasterTick_Big_Ufo(Vehicle *v)
{ {
byte z;
Town *t;
TileIndex tile;
TileIndex tile_org;
v->tick_counter++; v->tick_counter++;
if (v->current_order.GetDestination() == 1) { if (v->current_order.GetDestination() == 1) {
@ -566,7 +481,7 @@ static void DisasterTick_Big_Ufo(Vehicle *v)
return; return;
} }
z = GetSlopeZ(v->x_pos, v->y_pos); byte z = GetSlopeZ(v->x_pos, v->y_pos);
if (z < v->z_pos) { if (z < v->z_pos) {
SetDisasterVehiclePos(v, v->x_pos, v->y_pos, v->z_pos - 1); SetDisasterVehiclePos(v, v->x_pos, v->y_pos, v->z_pos - 1);
return; return;
@ -584,7 +499,7 @@ static void DisasterTick_Big_Ufo(Vehicle *v)
} }
} }
t = ClosestTownFromTile(v->dest_tile, UINT_MAX); Town *t = ClosestTownFromTile(v->dest_tile, UINT_MAX);
SetDParam(0, t->index); SetDParam(0, t->index);
AddNewsItem(STR_B004_UFO_LANDS_NEAR, AddNewsItem(STR_B004_UFO_LANDS_NEAR,
NS_ACCIDENT_TILE, NS_ACCIDENT_TILE,
@ -621,7 +536,8 @@ static void DisasterTick_Big_Ufo(Vehicle *v)
} }
v->current_order.SetDestination(1); v->current_order.SetDestination(1);
tile_org = tile = RandomTile(); TileIndex tile_org = RandomTile();
TileIndex tile = tile_org;
do { do {
if (IsTileType(tile, MP_RAILWAY) && if (IsTileType(tile, MP_RAILWAY) &&
IsPlainRailTile(tile) && IsPlainRailTile(tile) &&
@ -632,8 +548,6 @@ static void DisasterTick_Big_Ufo(Vehicle *v)
} while (tile != tile_org); } while (tile != tile_org);
v->dest_tile = tile; v->dest_tile = tile;
v->age = 0; v->age = 0;
} else {
return;
} }
} }
@ -643,9 +557,6 @@ static void DisasterTick_Big_Ufo(Vehicle *v)
*/ */
static void DisasterTick_Big_Ufo_Destroyer(Vehicle *v) static void DisasterTick_Big_Ufo_Destroyer(Vehicle *v)
{ {
Vehicle *u;
int i;
v->tick_counter++; v->tick_counter++;
GetNewVehiclePosResult gp = GetNewVehiclePos(v); GetNewVehiclePosResult gp = GetNewVehiclePos(v);
@ -657,7 +568,7 @@ static void DisasterTick_Big_Ufo_Destroyer(Vehicle *v)
} }
if (v->current_order.GetDestination() == 0) { if (v->current_order.GetDestination() == 0) {
u = GetVehicle(v->u.disaster.big_ufo_destroyer_target); Vehicle *u = GetVehicle(v->u.disaster.big_ufo_destroyer_target);
if (Delta(v->x_pos, u->x_pos) > TILE_SIZE) return; if (Delta(v->x_pos, u->x_pos) > TILE_SIZE) return;
v->current_order.SetDestination(1); v->current_order.SetDestination(1);
@ -666,7 +577,7 @@ static void DisasterTick_Big_Ufo_Destroyer(Vehicle *v)
delete u; delete u;
for (i = 0; i != 80; i++) { for (int i = 0; i != 80; i++) {
uint32 r = Random(); uint32 r = Random();
CreateEffectVehicleAbove( CreateEffectVehicleAbove(
GB(r, 0, 6) + v->x_pos - 32, GB(r, 0, 6) + v->x_pos - 32,
@ -690,8 +601,6 @@ static void DisasterTick_Big_Ufo_Destroyer(Vehicle *v)
*/ */
static void DisasterTick_Submarine(Vehicle *v) static void DisasterTick_Submarine(Vehicle *v)
{ {
TileIndex tile;
v->tick_counter++; v->tick_counter++;
if (++v->age > 8880) { if (++v->age > 8880) {
@ -701,7 +610,7 @@ static void DisasterTick_Submarine(Vehicle *v)
if (!HasBit(v->tick_counter, 0)) return; if (!HasBit(v->tick_counter, 0)) return;
tile = v->tile + TileOffsByDiagDir(DirToDiagDir(v->direction)); TileIndex tile = v->tile + TileOffsByDiagDir(DirToDiagDir(v->direction));
if (IsValidTile(tile)) { if (IsValidTile(tile)) {
TrackBits trackbits = TrackStatusToTrackBits(GetTileTrackStatus(tile, TRANSPORT_WATER, 0)); TrackBits trackbits = TrackStatusToTrackBits(GetTileTrackStatus(tile, TRANSPORT_WATER, 0));
if (trackbits == TRACK_BIT_ALL && !Chance16(1, 90)) { if (trackbits == TRACK_BIT_ALL && !Chance16(1, 90)) {
@ -744,12 +653,10 @@ static void Disaster_Zeppeliner_Init()
{ {
if (!Vehicle::CanAllocateItem(2)) return; if (!Vehicle::CanAllocateItem(2)) return;
Vehicle *v = new DisasterVehicle();
Station *st;
/* Pick a random place, unless we find a small airport */ /* Pick a random place, unless we find a small airport */
int x = TileX(Random()) * TILE_SIZE + TILE_SIZE / 2; int x = TileX(Random()) * TILE_SIZE + TILE_SIZE / 2;
Station *st;
FOR_ALL_STATIONS(st) { FOR_ALL_STATIONS(st) {
if (st->airport_tile != INVALID_TILE && (st->airport_type == AT_SMALL || st->airport_type == AT_LARGE)) { if (st->airport_tile != INVALID_TILE && (st->airport_type == AT_SMALL || st->airport_type == AT_LARGE)) {
x = (TileX(st->airport_tile) + 2) * TILE_SIZE; x = (TileX(st->airport_tile) + 2) * TILE_SIZE;
@ -757,6 +664,7 @@ static void Disaster_Zeppeliner_Init()
} }
} }
Vehicle *v = new DisasterVehicle();
InitializeDisasterVehicle(v, x, 0, 135, DIR_SE, ST_ZEPPELINER); InitializeDisasterVehicle(v, x, 0, 135, DIR_SE, ST_ZEPPELINER);
/* Allocate shadow */ /* Allocate shadow */
@ -945,46 +853,35 @@ static void Disaster_CoalMine_Init()
} }
} }
static DisasterInitProc * const _disaster_initprocs[] = { struct Disaster {
Disaster_Zeppeliner_Init, DisasterInitProc *init_proc; ///< The init function for this disaster.
Disaster_Small_Ufo_Init, Year min_year; ///< The first year this disaster will occur.
Disaster_Airplane_Init, Year max_year; ///< The last year this disaster will occur.
Disaster_Helicopter_Init,
Disaster_Big_Ufo_Init,
Disaster_Small_Submarine_Init,
Disaster_Big_Submarine_Init,
Disaster_CoalMine_Init,
}; };
static const struct { static const Disaster _disasters[] = {
Year min; {Disaster_Zeppeliner_Init, 1930, 1955}, // zeppeliner
Year max; {Disaster_Small_Ufo_Init, 1940, 1970}, // ufo (small)
} _dis_years[] = { {Disaster_Airplane_Init, 1960, 1990}, // airplane
{ 1930, 1955 }, ///< zeppeliner {Disaster_Helicopter_Init, 1970, 2000}, // helicopter
{ 1940, 1970 }, ///< ufo (small) {Disaster_Big_Ufo_Init, 2000, 2100}, // ufo (big)
{ 1960, 1990 }, ///< airplane {Disaster_Small_Submarine_Init, 1940, 1965}, // submarine (small)
{ 1970, 2000 }, ///< helicopter {Disaster_Big_Submarine_Init, 1975, 2010}, // submarine (big)
{ 2000, 2100 }, ///< ufo (big) {Disaster_CoalMine_Init, 1950, 1985}, // coalmine
{ 1940, 1965 }, ///< submarine (small)
{ 1975, 2010 }, ///< submarine (big)
{ 1950, 1985 } ///< coalmine
}; };
static void DoDisaster() static void DoDisaster()
{ {
byte buf[lengthof(_dis_years)]; byte buf[lengthof(_disasters)];
uint i;
uint j;
j = 0; size_t j = 0;
for (i = 0; i != lengthof(_dis_years); i++) { for (size_t i = 0; i != lengthof(_disasters); i++) {
if (_cur_year >= _dis_years[i].min && _cur_year < _dis_years[i].max) buf[j++] = i; if (_cur_year >= _disasters[i].min_year && _cur_year < _disasters[i].max_year) buf[j++] = i;
} }
if (j == 0) return; if (j == 0) return;
_disaster_initprocs[buf[RandomRange(j)]](); _disasters[buf[RandomRange(j)]].init_proc();
} }

Loading…
Cancel
Save