engine-c: Evolved bld cluster + clash ROCK/crater
This commit is contained in:
parent
e6695f994d
commit
55d7a4b1b9
1 changed files with 64 additions and 0 deletions
|
|
@ -204,6 +204,70 @@ static void place_showcase(Game *g, Faction human, Faction enemy) {
|
|||
t->terrain = T_ROAD;
|
||||
t->scrap = 0;
|
||||
}
|
||||
|
||||
/* Evolved forward outpost NW of clash (visible in combat crop).
|
||||
* Clear pad to wasteland BEFORE buildings; ROCK scars only after
|
||||
* (T_ROCK is non-walkable and bld_can_place rejects it). */
|
||||
{
|
||||
int erx = ctx - 10, ery = cty - 9;
|
||||
for (int dy = -3; dy <= 5; dy++) {
|
||||
for (int dx = -3; dx <= 6; dx++) {
|
||||
int tx = erx + dx, ty = ery + dy;
|
||||
if (!map_in_bounds(&g->map, tx, ty)) continue;
|
||||
Tile *t = map_tile(&g->map, tx, ty);
|
||||
if (!t) continue;
|
||||
if (t->occupied) continue;
|
||||
t->terrain = T_WASTELAND;
|
||||
t->walkable = 1;
|
||||
t->scrap = 0;
|
||||
}
|
||||
}
|
||||
bld_spawn(g, BT_BASE, enemy, erx, ery);
|
||||
bld_spawn(g, BT_BASE, enemy, erx + 3, ery);
|
||||
bld_spawn(g, BT_POWER, enemy, erx - 1, ery + 2);
|
||||
bld_spawn(g, BT_POWER, enemy, erx + 5, ery + 2);
|
||||
bld_spawn(g, BT_WARFACTORY, enemy, erx, ery + 3);
|
||||
bld_spawn(g, BT_WARFACTORY, enemy, erx + 3, ery + 3);
|
||||
bld_spawn(g, BT_RESEARCH, enemy, erx - 2, ery);
|
||||
bld_spawn(g, BT_REFINERY, enemy, erx + 5, ery + 3);
|
||||
bld_spawn(g, BT_TURRET, enemy, erx + 2, ery - 2);
|
||||
bld_spawn(g, BT_TURRET, enemy, erx - 2, ery + 3);
|
||||
bld_spawn(g, BT_TURRET, enemy, erx + 6, ery + 1);
|
||||
bld_spawn(g, BT_WALL, enemy, erx - 2, ery - 1);
|
||||
bld_spawn(g, BT_WALL, enemy, erx - 1, ery - 1);
|
||||
bld_spawn(g, BT_WALL, enemy, erx + 5, ery - 1);
|
||||
bld_spawn(g, BT_WALL, enemy, erx + 6, ery - 1);
|
||||
bld_force_complete(g);
|
||||
|
||||
/* outer ROCK / crater flecks — skip occupied tiles */
|
||||
for (int dy = -5; dy <= 7; dy++) {
|
||||
for (int dx = -5; dx <= 8; dx++) {
|
||||
int tx = erx + dx, ty = ery + dy;
|
||||
if (!map_in_bounds(&g->map, tx, ty)) continue;
|
||||
Tile *t = map_tile(&g->map, tx, ty);
|
||||
if (!t || t->occupied) continue;
|
||||
int d2 = dx * dx + dy * dy;
|
||||
if (d2 < 16 || d2 > 55) continue;
|
||||
if (((dx * 7 + dy * 11) & 5) != 0) continue;
|
||||
t->terrain = T_ROCK;
|
||||
t->walkable = 0;
|
||||
t->scrap = 0;
|
||||
}
|
||||
}
|
||||
/* crater rubble between Evolved pad and clash core */
|
||||
for (int dy = -2; dy <= 4; dy++) {
|
||||
for (int dx = 4; dx <= 11; dx++) {
|
||||
int tx = erx + dx, ty = ery + dy + 4;
|
||||
if (!map_in_bounds(&g->map, tx, ty)) continue;
|
||||
Tile *t = map_tile(&g->map, tx, ty);
|
||||
if (!t || t->occupied || !t->walkable) continue;
|
||||
if (((dx + dy) & 1) == 0) {
|
||||
t->terrain = T_RUBBLE;
|
||||
t->scrap = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int raid[40];
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue