2020-12-23 23:27:18 +00:00
|
|
|
|
/*
|
2021-07-02 09:24:53 +01:00
|
|
|
|
Terry got tricky by not defining a color
|
2020-02-15 20:01:48 +00:00
|
|
|
|
right away in these $LK,"CSprite",A="MN:CSprite"$s so they can
|
|
|
|
|
work for both players by setting dc->color
|
2021-07-02 09:24:53 +01:00
|
|
|
|
before drawing them. He actually made these
|
2020-02-15 20:01:48 +00:00
|
|
|
|
graphics by defining a color in the <CTRL-r>
|
|
|
|
|
menu, drawing the unit and deleting the color.
|
|
|
|
|
|
2021-07-02 09:24:53 +01:00
|
|
|
|
He had to leave a gap between the tank tread
|
2020-02-15 20:01:48 +00:00
|
|
|
|
and body because of how it is rendered when rotated.
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
$SP,"<1>",BI=1$
|
|
|
|
|
|
|
|
|
|
$SP,"<2>",BI=2$
|
|
|
|
|
|
|
|
|
|
//This is an infantry.
|
|
|
|
|
|
|
|
|
|
$SP,"<3>",BI=3$
|
|
|
|
|
|
|
|
|
|
$SP,"<4>",BI=4$
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
U0 DrawHexes()
|
|
|
|
|
{
|
2020-12-23 23:27:18 +00:00
|
|
|
|
F64 dx = 2 * HEX_SIDE + 2 * DCOS, dy = 2 * DSIN, x, y, x1, y1, x2, y2;
|
|
|
|
|
I64 i, j;
|
|
|
|
|
|
|
|
|
|
map_dc->color = WHITE;
|
|
|
|
|
GrRect(map_dc, 0, 0, map_dc->width, map_dc->height);
|
|
|
|
|
map_dc->color = BLACK;
|
|
|
|
|
y = 0;
|
|
|
|
|
for (j = 0; j < map_rows; j += 2)
|
|
|
|
|
{
|
|
|
|
|
x = DCOS;
|
|
|
|
|
GrLine(map_dc, x, y, x - DCOS, y + DSIN);
|
|
|
|
|
GrLine(map_dc, x - DCOS, y + DSIN, x, y + 2 * DSIN);
|
|
|
|
|
for (i = 0; i < map_cols; i++)
|
|
|
|
|
{
|
|
|
|
|
x1 = x;
|
|
|
|
|
y1 = y;
|
|
|
|
|
x2 = x1 + HEX_SIDE;
|
|
|
|
|
y2 = y1;
|
|
|
|
|
GrLine(map_dc, x1, y1, x2, y2);
|
|
|
|
|
x1 = x2;
|
|
|
|
|
y1 = y2;
|
|
|
|
|
x2 += DCOS;
|
|
|
|
|
y2 += DSIN;
|
|
|
|
|
GrLine(map_dc, x1, y1, x2, y2);
|
|
|
|
|
GrLine(map_dc, x2, y2, x2 - DCOS, y2 + DSIN);
|
|
|
|
|
x1 = x2;
|
|
|
|
|
y1 = y2;
|
|
|
|
|
x2 += HEX_SIDE;
|
|
|
|
|
GrLine(map_dc, x1, y1, x2, y2);
|
|
|
|
|
GrLine(map_dc, x2, y2, x2 + DCOS, y2 + DSIN);
|
|
|
|
|
x1 = x2;
|
|
|
|
|
y1 = y2;
|
|
|
|
|
x2 += DCOS;
|
|
|
|
|
y2 -= DSIN;
|
|
|
|
|
if (j || i < map_cols - 1)
|
|
|
|
|
GrLine(map_dc, x1, y1, x2, y2);
|
|
|
|
|
x += dx;
|
2020-02-20 23:40:10 +00:00
|
|
|
|
}
|
2020-12-23 23:27:18 +00:00
|
|
|
|
y += dy;
|
2020-02-20 23:40:10 +00:00
|
|
|
|
}
|
2020-12-23 23:27:18 +00:00
|
|
|
|
x = DCOS;
|
|
|
|
|
for (i = 0; i < map_cols; i++)
|
|
|
|
|
{
|
|
|
|
|
x1 = x;
|
|
|
|
|
y1 = y;
|
|
|
|
|
x2 = x1 + HEX_SIDE;
|
|
|
|
|
y2 = y1;
|
|
|
|
|
GrLine(map_dc, x1, y1, x2, y2);
|
|
|
|
|
x1 = x2;
|
|
|
|
|
y1 = y2;
|
|
|
|
|
x2 += DCOS;
|
|
|
|
|
y2 += DSIN;
|
|
|
|
|
GrLine(map_dc, x1, y1, x2, y2);
|
|
|
|
|
x1 = x2;
|
|
|
|
|
y1 = y2;
|
|
|
|
|
x2 += HEX_SIDE;
|
|
|
|
|
GrLine(map_dc, x1, y1, x2, y2);
|
|
|
|
|
x1 = x2;
|
|
|
|
|
y1 = y2;
|
|
|
|
|
x2 += DCOS;
|
|
|
|
|
y2 -= DSIN;
|
|
|
|
|
GrLine(map_dc, x1, y1, x2, y2);
|
|
|
|
|
x += dx;
|
2020-02-20 23:40:10 +00:00
|
|
|
|
}
|
2020-02-15 20:01:48 +00:00
|
|
|
|
}
|
|
|
|
|
|
2020-12-23 23:27:18 +00:00
|
|
|
|
U0 MakeTerrain(U8 color, I64 count, I64 clus_lo, I64 clus_hi)
|
2020-02-15 20:01:48 +00:00
|
|
|
|
{
|
2020-12-23 23:27:18 +00:00
|
|
|
|
I64 i, j, l, row, col;
|
|
|
|
|
|
|
|
|
|
for (i = 0; i < count; i++)
|
|
|
|
|
{
|
|
|
|
|
col = RandU32 % map_cols;
|
|
|
|
|
row = RandU32 % map_rows;
|
|
|
|
|
l = clus_lo + RandU16 % (clus_hi - clus_lo + 1);
|
|
|
|
|
for (j = 0; j < l; j++)
|
|
|
|
|
{
|
|
|
|
|
terrain[row][col] = color;
|
|
|
|
|
Toward(&row, &col, RandU16 % 6);
|
|
|
|
|
col = ClampI64(col, 0, map_cols - 1);
|
|
|
|
|
row = ClampI64(row, 0, map_rows - 1);
|
2020-02-20 23:40:10 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
2020-02-15 20:01:48 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
U0 MakeRivers()
|
|
|
|
|
{
|
2020-12-23 23:27:18 +00:00
|
|
|
|
I64 i, row, col, direction;
|
|
|
|
|
|
|
|
|
|
for (i = 0; i < 4; i++)
|
|
|
|
|
{
|
|
|
|
|
row = RandU32 % map_rows;
|
|
|
|
|
col = RandU32 % map_cols;
|
|
|
|
|
direction = RandU16 % 6;
|
|
|
|
|
while (TRUE)
|
|
|
|
|
{
|
|
|
|
|
rivers[row][col] = TRUE;
|
|
|
|
|
Toward(&row, &col, direction);
|
|
|
|
|
if (!(0 <= row < map_rows && 0 <= col < map_cols))
|
2020-02-20 23:40:10 +00:00
|
|
|
|
break;
|
2020-12-23 23:27:18 +00:00
|
|
|
|
if (!(RandU16 & 3))
|
|
|
|
|
direction = (direction + (7 - RandU16 % 3)) % 6;
|
2020-02-20 23:40:10 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
2020-02-15 20:01:48 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
U0 MakeRoads()
|
|
|
|
|
{
|
2020-12-23 23:27:18 +00:00
|
|
|
|
I64 i, row, col, direction;
|
|
|
|
|
|
|
|
|
|
for (i = 0; i < 5; i++)
|
|
|
|
|
{
|
|
|
|
|
row = RandU32 % map_rows;
|
|
|
|
|
col = RandU32 % map_cols;
|
|
|
|
|
direction = RandU16 % 6;
|
|
|
|
|
while (TRUE)
|
|
|
|
|
{
|
|
|
|
|
roads[row][col] = TRUE;
|
|
|
|
|
Toward(&row, &col, direction);
|
|
|
|
|
if (!(0 <= row < map_rows && 0 <= col < map_cols))
|
2020-02-20 23:40:10 +00:00
|
|
|
|
break;
|
2020-12-23 23:27:18 +00:00
|
|
|
|
if (!(RandU16 % 3))
|
|
|
|
|
direction = (direction + (7 - RandU16 % 3)) % 6;
|
2020-02-20 23:40:10 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
2020-02-15 20:01:48 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
U0 DrawTerrain()
|
|
|
|
|
{
|
2020-12-23 23:27:18 +00:00
|
|
|
|
I64 i, j;
|
|
|
|
|
F64 x, y;
|
|
|
|
|
|
|
|
|
|
for (j = 0; j < map_rows; j++)
|
|
|
|
|
for (i = 0; i < map_cols; i++)
|
|
|
|
|
{
|
|
|
|
|
map_dc->color = terrain[j][i];
|
|
|
|
|
RowCol2XY(&x, &y, j, i);
|
|
|
|
|
GrFloodFill(map_dc, x, y);
|
2020-02-20 23:40:10 +00:00
|
|
|
|
}
|
2020-02-15 20:01:48 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
U0 DrawRivers()
|
|
|
|
|
{
|
2020-12-23 23:27:18 +00:00
|
|
|
|
I64 i, j, k, r, c;
|
|
|
|
|
F64 x1, y1, x2, y2;
|
|
|
|
|
|
|
|
|
|
for (j = 0; j < map_rows; j++)
|
|
|
|
|
for (i = 0; i < map_cols; i++)
|
|
|
|
|
{
|
|
|
|
|
if (rivers[j][i])
|
|
|
|
|
{
|
|
|
|
|
RowCol2XY(&x1, &y1, j, i);
|
|
|
|
|
for (k = 0; k < 6; k++)
|
|
|
|
|
{
|
|
|
|
|
r = j;
|
|
|
|
|
c = i;
|
|
|
|
|
Toward(&r, &c, k);
|
|
|
|
|
if (0 <= r < map_rows && 0 <= c < map_cols && rivers[r][c])
|
|
|
|
|
{
|
|
|
|
|
RowCol2XY(&x2, &y2, r, c);
|
|
|
|
|
map_dc->color = LTBLUE;
|
|
|
|
|
map_dc->thick = 4;
|
|
|
|
|
GrLine3(map_dc, x1, y1, 0, x2, y2, 0);
|
|
|
|
|
map_dc->color = BLUE;
|
|
|
|
|
map_dc->thick = 2;
|
|
|
|
|
GrLine3(map_dc, x1, y1, 0, x2, y2, 0);
|
2020-02-20 23:40:10 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2020-02-15 20:01:48 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
U0 DrawRoads()
|
|
|
|
|
{
|
2020-12-23 23:27:18 +00:00
|
|
|
|
I64 i, j, k, r, c;
|
|
|
|
|
F64 x1, y1, x2, y2;
|
|
|
|
|
|
|
|
|
|
map_dc->color = RED;
|
|
|
|
|
map_dc->thick = 3;
|
|
|
|
|
for (j = 0; j < map_rows; j++)
|
|
|
|
|
for (i = 0; i < map_cols; i++)
|
|
|
|
|
{
|
|
|
|
|
if (roads[j][i])
|
|
|
|
|
{
|
|
|
|
|
RowCol2XY(&x1, &y1, j, i);
|
|
|
|
|
for (k = 0; k < 6; k++)
|
|
|
|
|
{
|
|
|
|
|
r = j;
|
|
|
|
|
c = i;
|
|
|
|
|
Toward(&r, &c, k);
|
|
|
|
|
if (0 <= r < map_rows && 0 <= c < map_cols && roads[r][c])
|
|
|
|
|
{
|
|
|
|
|
RowCol2XY(&x2, &y2, r, c);
|
|
|
|
|
GrLine3(map_dc, x1, y1, 0, x2, y2, 0);
|
2020-02-20 23:40:10 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2020-02-15 20:01:48 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
U0 DrawDots()
|
|
|
|
|
{
|
2020-12-23 23:27:18 +00:00
|
|
|
|
I64 i, j;
|
|
|
|
|
F64 x, y;
|
|
|
|
|
|
|
|
|
|
map_dc->color = BLACK;
|
|
|
|
|
for (j = 0; j < map_rows; j++)
|
|
|
|
|
for (i = 0; i < map_cols; i++)
|
|
|
|
|
{
|
|
|
|
|
RowCol2XY(&x, &y, j, i);
|
|
|
|
|
GrPlot(map_dc, x, y);
|
2020-02-20 23:40:10 +00:00
|
|
|
|
}
|
2020-02-15 20:01:48 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
U0 HexCentersCalc()
|
|
|
|
|
{
|
2020-12-23 23:27:18 +00:00
|
|
|
|
I64 i, j;
|
|
|
|
|
F64 x, y;
|
|
|
|
|
|
|
|
|
|
for (j = 0; j < map_rows; j++)
|
|
|
|
|
for (i = 0; i < map_cols; i++)
|
|
|
|
|
{
|
|
|
|
|
x = (2 * HEX_SIDE + 2 * DCOS) * i + HEX_SIDE / 2 + DCOS;
|
|
|
|
|
if (j & 1)
|
|
|
|
|
x += HEX_SIDE + DCOS;
|
|
|
|
|
y = DSIN * (j + 1);
|
|
|
|
|
hex_centers[j][i].x = x;
|
|
|
|
|
hex_centers[j][i].y = y;
|
2020-02-20 23:40:10 +00:00
|
|
|
|
}
|
2020-02-15 20:01:48 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
U0 InitMap()
|
|
|
|
|
{
|
2020-02-20 23:40:10 +00:00
|
|
|
|
HexCentersCalc;
|
|
|
|
|
DrawHexes;
|
2020-12-23 23:27:18 +00:00
|
|
|
|
MemSet(terrain, PLAINS, sizeof(terrain));
|
|
|
|
|
MemSet(roads, FALSE, sizeof(roads));
|
|
|
|
|
MemSet(rivers, FALSE, sizeof(rivers));
|
|
|
|
|
MemSet(vis_map, FALSE, sizeof(vis_map));
|
|
|
|
|
MakeTerrain(MOUNTAINS, 0.03 * map_cols * map_cols, 5, 35);
|
|
|
|
|
MakeTerrain(TREES, 0.03 * map_cols * map_cols, 5, 35);
|
2020-02-20 23:40:10 +00:00
|
|
|
|
DrawTerrain;
|
|
|
|
|
MakeRivers;
|
|
|
|
|
DrawRivers;
|
|
|
|
|
MakeRoads;
|
|
|
|
|
DrawRoads;
|
|
|
|
|
DrawDots;
|
2020-02-15 20:01:48 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
U0 InitUnits()
|
|
|
|
|
{
|
2020-12-23 23:27:18 +00:00
|
|
|
|
I64 i, j, row, col, type;
|
2020-02-20 23:40:10 +00:00
|
|
|
|
Unit *tmpu;
|
2020-12-23 23:27:18 +00:00
|
|
|
|
|
|
|
|
|
MemSet(units, 0, sizeof(units));
|
|
|
|
|
alive_count[0] = alive_count[1]=UNITS_NUM;
|
|
|
|
|
for (j = 0; j < 2; j++)
|
|
|
|
|
for (i = 0; i < alive_count[j]; i++)
|
|
|
|
|
{
|
|
|
|
|
tmpu = &units[j][i];
|
|
|
|
|
tmpu->player = j;
|
|
|
|
|
tmpu->num = i;
|
|
|
|
|
tmpu->life = 100;
|
|
|
|
|
tmpu->facing = RandU16 % 6;
|
|
|
|
|
if (!j)
|
|
|
|
|
{
|
|
|
|
|
if (i >= UNITS_NUM / 2)
|
|
|
|
|
{
|
|
|
|
|
if (i >= 15 * UNITS_NUM / 16)
|
|
|
|
|
type = UT_ARTILLERY;
|
2020-02-20 23:40:10 +00:00
|
|
|
|
else
|
2020-12-23 23:27:18 +00:00
|
|
|
|
type = UT_INFANTRY;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
if (i >= UNITS_NUM / 4)
|
|
|
|
|
type = UT_MD_TANK;
|
2020-02-20 23:40:10 +00:00
|
|
|
|
else
|
2020-12-23 23:27:18 +00:00
|
|
|
|
type = UT_LT_TANK;
|
2020-02-20 23:40:10 +00:00
|
|
|
|
}
|
2020-12-23 23:27:18 +00:00
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
if (i >= UNITS_NUM / 2)
|
|
|
|
|
{
|
|
|
|
|
if (i >= 15 * UNITS_NUM / 16)
|
|
|
|
|
type = UT_ARTILLERY;
|
2020-02-20 23:40:10 +00:00
|
|
|
|
else
|
2020-12-23 23:27:18 +00:00
|
|
|
|
type = UT_INFANTRY;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
if (i >= UNITS_NUM / 4)
|
2020-02-20 23:40:10 +00:00
|
|
|
|
type=UT_MD_TANK;
|
|
|
|
|
else
|
|
|
|
|
type=UT_LT_TANK;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
tmpu->type=type;
|
2020-12-23 23:27:18 +00:00
|
|
|
|
switch (type)
|
|
|
|
|
{
|
2020-02-20 23:40:10 +00:00
|
|
|
|
case UT_INFANTRY:
|
2020-12-23 23:27:18 +00:00
|
|
|
|
tmpu->infantry = TRUE;
|
|
|
|
|
tmpu->indirect_fire = FALSE;
|
|
|
|
|
tmpu->armor = 0;
|
|
|
|
|
tmpu->armored_attack = 15;
|
|
|
|
|
tmpu->unarmored_attack = 180;
|
|
|
|
|
tmpu->accuracy = 45;
|
|
|
|
|
tmpu->range = 5;
|
|
|
|
|
tmpu->movement = 4;
|
|
|
|
|
tmpu->img = $IB,"<1>",BI=1$;
|
2020-02-20 23:40:10 +00:00
|
|
|
|
break;
|
2020-12-23 23:27:18 +00:00
|
|
|
|
|
2020-02-20 23:40:10 +00:00
|
|
|
|
case UT_ARTILLERY:
|
2020-12-23 23:27:18 +00:00
|
|
|
|
tmpu->infantry = TRUE;
|
|
|
|
|
tmpu->indirect_fire = TRUE;
|
|
|
|
|
tmpu->armor = 0;
|
|
|
|
|
tmpu->armored_attack = 60;
|
|
|
|
|
tmpu->unarmored_attack = 180;
|
|
|
|
|
tmpu->accuracy = 25;
|
|
|
|
|
tmpu->range = 20;
|
|
|
|
|
tmpu->movement = 2;
|
|
|
|
|
tmpu->img = $IB,"<2>",BI=2$;
|
2020-02-20 23:40:10 +00:00
|
|
|
|
break;
|
2020-12-23 23:27:18 +00:00
|
|
|
|
|
2020-02-20 23:40:10 +00:00
|
|
|
|
case UT_LT_TANK:
|
2020-12-23 23:27:18 +00:00
|
|
|
|
tmpu->infantry = FALSE;
|
|
|
|
|
tmpu->indirect_fire = FALSE;
|
|
|
|
|
tmpu->armor = 30;
|
|
|
|
|
tmpu->armored_attack = 40;
|
|
|
|
|
tmpu->unarmored_attack = 60;
|
|
|
|
|
tmpu->accuracy = 25;
|
|
|
|
|
tmpu->range = 8;
|
|
|
|
|
tmpu->movement = 24;
|
|
|
|
|
tmpu->img = $IB,"<3>",BI=3$;
|
2020-02-20 23:40:10 +00:00
|
|
|
|
break;
|
2020-12-23 23:27:18 +00:00
|
|
|
|
|
2020-02-20 23:40:10 +00:00
|
|
|
|
case UT_MD_TANK:
|
2020-12-23 23:27:18 +00:00
|
|
|
|
tmpu->infantry = FALSE;
|
|
|
|
|
tmpu->indirect_fire = FALSE;
|
|
|
|
|
tmpu->armor = 60;
|
|
|
|
|
tmpu->armored_attack = 60;
|
|
|
|
|
tmpu->unarmored_attack = 80;
|
|
|
|
|
tmpu->accuracy = 25;
|
|
|
|
|
tmpu->range = 12;
|
|
|
|
|
tmpu->movement = 16;
|
|
|
|
|
tmpu->img = $IB,"<4>",BI=4$;
|
2020-02-20 23:40:10 +00:00
|
|
|
|
break;
|
|
|
|
|
}
|
2020-12-23 23:27:18 +00:00
|
|
|
|
do
|
|
|
|
|
{
|
|
|
|
|
row = RandU32 % map_rows;
|
|
|
|
|
col = RandU32 % (map_cols / 3);
|
2020-02-20 23:40:10 +00:00
|
|
|
|
if (j)
|
2020-12-23 23:27:18 +00:00
|
|
|
|
col += 2 * map_cols / 3;
|
|
|
|
|
}
|
|
|
|
|
while (UnitFind(row, col));
|
|
|
|
|
|
|
|
|
|
tmpu->row = row;
|
|
|
|
|
tmpu->col = col;
|
|
|
|
|
LBts(&tmpu->vis[cur_player], 0);
|
2020-02-20 23:40:10 +00:00
|
|
|
|
}
|
2020-02-15 20:01:48 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
U0 ViewPlayerSet(I8 p)
|
|
|
|
|
{
|
2020-02-20 23:40:10 +00:00
|
|
|
|
CMenuEntry *tmpse;
|
2020-12-23 23:27:18 +00:00
|
|
|
|
|
|
|
|
|
view_player = p;
|
|
|
|
|
if (tmpse = MenuEntryFind(Fs->cur_menu, "View/Player1"))
|
|
|
|
|
tmpse->checked = view_player == 0;
|
|
|
|
|
if (tmpse = MenuEntryFind(Fs->cur_menu, "View/Player2"))
|
|
|
|
|
tmpse->checked = view_player == 1;
|
2020-02-15 20:01:48 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
U0 Init()
|
|
|
|
|
{
|
2020-02-20 23:40:10 +00:00
|
|
|
|
DocClear;
|
2020-12-23 23:27:18 +00:00
|
|
|
|
"GameSeed(0x%X)\n", Seed(PopUpI64Get("GameSeed(0x%X):", Seed));
|
|
|
|
|
moving_unit = NULL;
|
2020-02-20 23:40:10 +00:00
|
|
|
|
InitMap;
|
2020-12-23 23:27:18 +00:00
|
|
|
|
ViewPlayerSet(cur_player = 0);
|
|
|
|
|
enemy_player = 1;
|
|
|
|
|
if (map_width < GR_WIDTH)
|
|
|
|
|
{
|
|
|
|
|
x0 = (MAP_WIDTH - map_width) >> 1;
|
|
|
|
|
y0 = (MAP_HEIGHT - map_height) >> 1 + FONT_HEIGHT;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
x0 = 0;
|
|
|
|
|
y0 = FONT_HEIGHT;
|
2020-02-20 23:40:10 +00:00
|
|
|
|
}
|
|
|
|
|
InitUnits;
|
|
|
|
|
QueueInit(&indirect_head);
|
2020-12-23 23:27:18 +00:00
|
|
|
|
turn = 0;
|
|
|
|
|
fire_radius = 0;
|
|
|
|
|
show_vis_row = -1;
|
|
|
|
|
show_vis_col = -1;
|
|
|
|
|
*message_buf = 0;
|
|
|
|
|
message_off_timeout = 0;
|
|
|
|
|
phase = PHASE_END;
|
2020-02-15 20:01:48 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
U0 CleanUp()
|
|
|
|
|
{
|
2020-12-23 23:27:18 +00:00
|
|
|
|
QueueDel(&indirect_head, TRUE);
|
2020-02-15 20:01:48 +00:00
|
|
|
|
}
|
|
|
|
|
|
2020-12-23 23:27:18 +00:00
|
|
|
|
U0 PlayerPick(U8 *dirname, I64 player)
|
2020-02-15 20:01:48 +00:00
|
|
|
|
{
|
2020-12-23 23:27:18 +00:00
|
|
|
|
I64 i = 0;
|
|
|
|
|
U8 *st;
|
|
|
|
|
CDirEntry *tmpde, *tmpde1, *tmpde2;
|
|
|
|
|
CDoc *doc = DocNew;
|
|
|
|
|
Bool *old_silent = Silent;
|
|
|
|
|
|
|
|
|
|
st = MStrPrint("%s/*.CC*", dirname);
|
|
|
|
|
tmpde = FilesFind(st);
|
2020-02-20 23:40:10 +00:00
|
|
|
|
Free(st);
|
2020-12-23 23:27:18 +00:00
|
|
|
|
tmpde2 = FilesFind("~/ToTheFront/*.CC*");
|
|
|
|
|
tmpde1 = tmpde;
|
2020-02-20 23:40:10 +00:00
|
|
|
|
Silent(old_silent);
|
2020-02-15 20:01:48 +00:00
|
|
|
|
|
2020-12-23 23:27:18 +00:00
|
|
|
|
DocPrint(doc, "Player %d Type\n\n$$LTBLUE$$", player + 1);
|
|
|
|
|
while (tmpde1)
|
|
|
|
|
{
|
|
|
|
|
if (!(i++ & 3))
|
|
|
|
|
DocPrint(doc, "\n");
|
|
|
|
|
st = StrNew(tmpde1->name);
|
2020-02-20 23:40:10 +00:00
|
|
|
|
FileExtRemove(st);
|
2020-12-23 23:27:18 +00:00
|
|
|
|
tmpde1->user_data = DocPrint(doc, "$$MU-UL,\"%-10ts\",LE=%d$$ ", st, tmpde1);
|
2020-02-20 23:40:10 +00:00
|
|
|
|
Free(st);
|
2020-12-23 23:27:18 +00:00
|
|
|
|
tmpde1 = tmpde1->next;
|
2020-02-20 23:40:10 +00:00
|
|
|
|
}
|
2020-12-23 23:27:18 +00:00
|
|
|
|
tmpde1 = tmpde2;
|
|
|
|
|
while (tmpde1)
|
|
|
|
|
{
|
|
|
|
|
if (!(i++ & 3))
|
|
|
|
|
DocPrint(doc, "\n");
|
|
|
|
|
st = StrNew(tmpde1->name);
|
2020-02-20 23:40:10 +00:00
|
|
|
|
FileExtRemove(st);
|
2020-12-23 23:27:18 +00:00
|
|
|
|
tmpde1->user_data = DocPrint(doc, "$$MU-UL,\"%-10ts\",LE=%d$$ ", st, tmpde1);
|
2020-02-20 23:40:10 +00:00
|
|
|
|
Free(st);
|
2020-12-23 23:27:18 +00:00
|
|
|
|
tmpde1 = tmpde1->next;
|
2020-02-20 23:40:10 +00:00
|
|
|
|
}
|
2020-12-23 23:27:18 +00:00
|
|
|
|
DocPrint(doc, "\n\n\n$$FG$$Create your own AI in ~/ToTheFront.");
|
|
|
|
|
while ((tmpde1 = PopUpMenu(doc)) <= 0);
|
2020-02-20 23:40:10 +00:00
|
|
|
|
ExeFile(tmpde1->full_name);
|
|
|
|
|
DocDel(doc);
|
|
|
|
|
DirTreeDel(tmpde);
|
|
|
|
|
DirTreeDel(tmpde2);
|
|
|
|
|
ExePrint("player_indirect[%d]=&PlayerIndirect;"
|
2020-12-23 23:27:18 +00:00
|
|
|
|
"player_move[%d]=&PlayerMove;"
|
|
|
|
|
"player_direct[%d]=&PlayerDirect;",
|
|
|
|
|
player, player, player);
|
2020-02-15 20:01:48 +00:00
|
|
|
|
}
|
|
|
|
|
|