1027 lines
42 KiB
C++
1027 lines
42 KiB
C++
//
|
||
// Copyright 2020 Electronic Arts Inc.
|
||
//
|
||
// TiberianDawn.DLL and RedAlert.dll and corresponding source code is free
|
||
// software: you can redistribute it and/or modify it under the terms of
|
||
// the GNU General Public License as published by the Free Software Foundation,
|
||
// either version 3 of the License, or (at your option) any later version.
|
||
|
||
// TiberianDawn.DLL and RedAlert.dll and corresponding source code is distributed
|
||
// in the hope that it will be useful, but with permitted additional restrictions
|
||
// under Section 7 of the GPL. See the GNU General Public License in LICENSE.TXT
|
||
// distributed with this program. You should have received a copy of the
|
||
// GNU General Public License along with permitted additional restrictions
|
||
// with this program. If not, see https://github.com/electronicarts/CnC_Remastered_Collection
|
||
|
||
/* $Header: F:\projects\c&c\vcs\code\tdata.cpv 2.16 16 Oct 1995 16:52:04 JOE_BOSTIC $ */
|
||
/***********************************************************************************************
|
||
*** C O N F I D E N T I A L --- W E S T W O O D S T U D I O S ***
|
||
***********************************************************************************************
|
||
* *
|
||
* Project Name : Command & Conquer *
|
||
* *
|
||
* File Name : TDATA.CPP *
|
||
* *
|
||
* Programmer : Joe L. Bostic *
|
||
* *
|
||
* Start Date : May 2, 1994 *
|
||
* *
|
||
* Last Update : May 8, 1995 [JLB] *
|
||
* *
|
||
*---------------------------------------------------------------------------------------------*
|
||
* Functions: *
|
||
* TerrainTypeClass::Prep_For_Add -- Prepares to add terrain object. *
|
||
* TerrainTypeClass::Display -- Display a generic terrain object. *
|
||
* TerrainTypeClass::From_Name -- Convert name to terrain type. *
|
||
* TerrainTypeClass::Init -- Loads terrain object shape files. *
|
||
* TerrainTypeClass::Create_And_Place -- Creates and places terrain object on map. *
|
||
* TerrainTypeClass::Create_On_Of -- Creates a terrain object from type. *
|
||
* TerrainTypeClass::TerrainTypeClass -- The general constructor for the terrain type objects*
|
||
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||
|
||
#include "function.h"
|
||
#include "terrain.h"
|
||
#include "type.h"
|
||
|
||
|
||
#define TREE_NORMAL 600
|
||
#define TREE_WEAK 400
|
||
#define TREE_STRONG 800
|
||
|
||
static short const _List1[] = {0, REFRESH_EOL};
|
||
static short const _List000010[] = {MAP_CELL_W+1, REFRESH_EOL};
|
||
static short const _List000011101000[] = {MAP_CELL_W, MAP_CELL_W+1, MAP_CELL_W+2, MAP_CELL_W*2, REFRESH_EOL};
|
||
static short const _List00001[] = {4, REFRESH_EOL};
|
||
static short const _List000110[] = {MAP_CELL_W, MAP_CELL_W+1, REFRESH_EOL};
|
||
static short const _List000111[] = {MAP_CELL_W, MAP_CELL_W+1, MAP_CELL_W+2, REFRESH_EOL};
|
||
static short const _List001011100110[] = {2, MAP_CELL_W, MAP_CELL_W+1, MAP_CELL_W+2, MAP_CELL_W*2+1, MAP_CELL_W*2+2, REFRESH_EOL};
|
||
static short const _List0010[] = {MAP_CELL_W, REFRESH_EOL};
|
||
static short const _List0011[] = {MAP_CELL_W, MAP_CELL_W+1, REFRESH_EOL};
|
||
static short const _List001[] = {2, REFRESH_EOL};
|
||
static short const _List010110[] = {1, MAP_CELL_W, MAP_CELL_W+1, REFRESH_EOL};
|
||
static short const _List01[] = {1, REFRESH_EOL};
|
||
static short const _List1001[] = {0, MAP_CELL_W+1, REFRESH_EOL};
|
||
static short const _List101001[] = {0, 2, MAP_CELL_W+2, REFRESH_EOL};
|
||
static short const _List10[] = {0, REFRESH_EOL};
|
||
static short const _List110000011001[] = {0, 1, MAP_CELL_W+3, MAP_CELL_W*2, MAP_CELL_W*2+3, REFRESH_EOL};
|
||
static short const _List110000[] = {0, 1, REFRESH_EOL};
|
||
static short const _List110001[] = {0, 1, MAP_CELL_W+2, REFRESH_EOL};
|
||
static short const _List1100[] = {0, 1, REFRESH_EOL};
|
||
static short const _List110110[] = {0, 1, MAP_CELL_W, MAP_CELL_W+1, REFRESH_EOL};
|
||
static short const _List1101[] = {0, 1, MAP_CELL_W+1, REFRESH_EOL};
|
||
static short const _List111000010110[] = {0, 1, 2, MAP_CELL_W+3, MAP_CELL_W*2+1, MAP_CELL_W*2+2, REFRESH_EOL};
|
||
static short const _List111001[] = {0, 1, 2, MAP_CELL_W+2, REFRESH_EOL};
|
||
static short const _List111101[] = {0, 1, 2, MAP_CELL_W, MAP_CELL_W+2, REFRESH_EOL};
|
||
static short const _List11110[] = {0, 1, 2, 3, REFRESH_EOL};
|
||
|
||
|
||
static TerrainTypeClass const Tree1Class(
|
||
TERRAIN_TREE1,
|
||
THEATERF_WINTER|THEATERF_TEMPERATE,
|
||
XYP_COORD(11,41), // Center base coordinate offset.
|
||
false, // Spawns Tiberium spontaneously?
|
||
true, // Does it have destruction animation?
|
||
false, // Does it have transformation (blossom tree) anim?
|
||
true, // Does it catch fire?
|
||
false, // Is this object crushable by heavy vehicles?
|
||
false, // Can this object be selected by the player?
|
||
false, // Can it be the target of a move or attack order?
|
||
true, // Don't make a big deal about it if it gets destroyed?
|
||
false, // Is it immune to normal combat damage?
|
||
"T01",
|
||
TXT_TREE,
|
||
TREE_NORMAL,
|
||
ARMOR_WOOD,
|
||
(short const *)_List0010,
|
||
(short const *)_List1001
|
||
);
|
||
|
||
static TerrainTypeClass const Tree2Class(
|
||
TERRAIN_TREE2,
|
||
THEATERF_WINTER|THEATERF_TEMPERATE,
|
||
XYP_COORD(11,44), // Center base coordinate offset.
|
||
false, // Spawns Tiberium spontaneously?
|
||
true, // Does it have destruction animation?
|
||
false, // Does it have transformation (blossom tree) anim?
|
||
true, // Does it catch fire?
|
||
false, // Is this object crushable by heavy vehicles?
|
||
false, // Can this object be selected by the player?
|
||
false, // Can it be the target of a move or attack order?
|
||
true, // Don't make a big deal about it if it gets destroyed?
|
||
false, // Is it immune to normal combat damage?
|
||
"T02",
|
||
TXT_TREE,
|
||
TREE_NORMAL,
|
||
ARMOR_WOOD,
|
||
(short const *)_List0010,
|
||
(short const *)_List1001
|
||
);
|
||
|
||
static TerrainTypeClass const Tree3Class(
|
||
TERRAIN_TREE3,
|
||
THEATERF_WINTER|THEATERF_TEMPERATE,
|
||
XYP_COORD(12,45), // Center base coordinate offset.
|
||
false, // Spawns Tiberium spontaneously?
|
||
true, // Does it have destruction animation?
|
||
false, // Does it have transformation (blossom tree) anim?
|
||
true, // Does it catch fire?
|
||
false, // Is this object crushable by heavy vehicles?
|
||
false, // Can this object be selected by the player?
|
||
false, // Can it be the target of a move or attack order?
|
||
true, // Don't make a big deal about it if it gets destroyed?
|
||
false, // Is it immune to normal combat damage?
|
||
"T03",
|
||
TXT_TREE,
|
||
TREE_NORMAL,
|
||
ARMOR_WOOD,
|
||
(short const *)_List0010,
|
||
(short const *)_List1001
|
||
);
|
||
|
||
static TerrainTypeClass const Tree4Class(
|
||
TERRAIN_TREE4,
|
||
THEATERF_DESERT,
|
||
XYP_COORD(8,9), // Center base coordinate offset.
|
||
false, // Spawns Tiberium spontaneously?
|
||
true, // Does it have destruction animation?
|
||
false, // Does it have transformation (blossom tree) anim?
|
||
true, // Does it catch fire?
|
||
false, // Is this object crushable by heavy vehicles?
|
||
false, // Can this object be selected by the player?
|
||
false, // Can it be the target of a move or attack order?
|
||
true, // Don't make a big deal about it if it gets destroyed?
|
||
false, // Is it immune to normal combat damage?
|
||
"T04",
|
||
TXT_TREE,
|
||
TREE_NORMAL,
|
||
ARMOR_WOOD,
|
||
(short const *)_List1,
|
||
NULL
|
||
);
|
||
|
||
|
||
static TerrainTypeClass const Tree5Class(
|
||
TERRAIN_TREE5,
|
||
THEATERF_WINTER|THEATERF_TEMPERATE,
|
||
XYP_COORD(15,41), // Center base coordinate offset.
|
||
false, // Spawns Tiberium spontaneously?
|
||
true, // Does it have destruction animation?
|
||
false, // Does it have transformation (blossom tree) anim?
|
||
true, // Does it catch fire?
|
||
false, // Is this object crushable by heavy vehicles?
|
||
false, // Can this object be selected by the player?
|
||
false, // Can it be the target of a move or attack order?
|
||
true, // Don't make a big deal about it if it gets destroyed?
|
||
false, // Is it immune to normal combat damage?
|
||
"T05",
|
||
TXT_TREE,
|
||
TREE_NORMAL,
|
||
ARMOR_WOOD,
|
||
(short const *)_List0010,
|
||
(short const *)_List1001
|
||
);
|
||
|
||
static TerrainTypeClass const Tree6Class(
|
||
TERRAIN_TREE6,
|
||
THEATERF_WINTER|THEATERF_TEMPERATE,
|
||
XYP_COORD(16,37), // Center base coordinate offset.
|
||
false, // Spawns Tiberium spontaneously?
|
||
true, // Does it have destruction animation?
|
||
false, // Does it have transformation (blossom tree) anim?
|
||
true, // Does it catch fire?
|
||
false, // Is this object crushable by heavy vehicles?
|
||
false, // Can this object be selected by the player?
|
||
false, // Can it be the target of a move or attack order?
|
||
true, // Don't make a big deal about it if it gets destroyed?
|
||
false, // Is it immune to normal combat damage?
|
||
"T06",
|
||
TXT_TREE,
|
||
TREE_NORMAL,
|
||
ARMOR_WOOD,
|
||
(short const *)_List0010,
|
||
(short const *)_List1001
|
||
);
|
||
|
||
static TerrainTypeClass const Tree7Class(
|
||
TERRAIN_TREE7,
|
||
THEATERF_WINTER|THEATERF_TEMPERATE,
|
||
XYP_COORD(15,41), // Center base coordinate offset.
|
||
false, // Spawns Tiberium spontaneously?
|
||
true, // Does it have destruction animation?
|
||
false, // Does it have transformation (blossom tree) anim?
|
||
true, // Does it catch fire?
|
||
false, // Is this object crushable by heavy vehicles?
|
||
false, // Can this object be selected by the player?
|
||
false, // Can it be the target of a move or attack order?
|
||
true, // Don't make a big deal about it if it gets destroyed?
|
||
false, // Is it immune to normal combat damage?
|
||
"T07",
|
||
TXT_TREE,
|
||
TREE_NORMAL,
|
||
ARMOR_WOOD,
|
||
(short const *)_List0010,
|
||
(short const *)_List1001
|
||
);
|
||
|
||
static TerrainTypeClass const Tree8Class(
|
||
TERRAIN_TREE8,
|
||
THEATERF_WINTER|THEATERF_TEMPERATE|THEATERF_DESERT,
|
||
XYP_COORD(14,22), // Center base coordinate offset.
|
||
false, // Spawns Tiberium spontaneously?
|
||
true, // Does it have destruction animation?
|
||
false, // Does it have transformation (blossom tree) anim?
|
||
true, // Does it catch fire?
|
||
false, // Is this object crushable by heavy vehicles?
|
||
false, // Can this object be selected by the player?
|
||
false, // Can it be the target of a move or attack order?
|
||
true, // Don't make a big deal about it if it gets destroyed?
|
||
false, // Is it immune to normal combat damage?
|
||
"T08",
|
||
TXT_TREE,
|
||
TREE_NORMAL,
|
||
ARMOR_WOOD,
|
||
(short const *)_List10,
|
||
(short const *)_List01
|
||
);
|
||
|
||
static TerrainTypeClass const Tree9Class(
|
||
TERRAIN_TREE9,
|
||
THEATERF_DESERT,
|
||
XYP_COORD(11,22), // Center base coordinate offset.
|
||
false, // Spawns Tiberium spontaneously?
|
||
true, // Does it have destruction animation?
|
||
false, // Does it have transformation (blossom tree) anim?
|
||
true, // Does it catch fire?
|
||
false, // Is this object crushable by heavy vehicles?
|
||
false, // Can this object be selected by the player?
|
||
false, // Can it be the target of a move or attack order?
|
||
true, // Don't make a big deal about it if it gets destroyed?
|
||
false, // Is it immune to normal combat damage?
|
||
"T09",
|
||
TXT_TREE,
|
||
TREE_NORMAL,
|
||
ARMOR_WOOD,
|
||
(short const *)_List10,
|
||
(short const *)_List01
|
||
);
|
||
|
||
static TerrainTypeClass const Tree10Class(
|
||
TERRAIN_TREE10,
|
||
THEATERF_WINTER|THEATERF_TEMPERATE,
|
||
XYP_COORD(25,43), // Center base coordinate offset.
|
||
false, // Spawns Tiberium spontaneously?
|
||
true, // Does it have destruction animation?
|
||
false, // Does it have transformation (blossom tree) anim?
|
||
true, // Does it catch fire?
|
||
false, // Is this object crushable by heavy vehicles?
|
||
false, // Can this object be selected by the player?
|
||
false, // Can it be the target of a move or attack order?
|
||
true, // Don't make a big deal about it if it gets destroyed?
|
||
false, // Is it immune to normal combat damage?
|
||
"T10",
|
||
TXT_TREE,
|
||
TREE_NORMAL,
|
||
ARMOR_WOOD,
|
||
(short const *)_List0011,
|
||
(short const *)_List1100
|
||
);
|
||
|
||
static TerrainTypeClass const Tree11Class(
|
||
TERRAIN_TREE11,
|
||
THEATERF_WINTER|THEATERF_TEMPERATE,
|
||
XYP_COORD(23,44), // Center base coordinate offset.
|
||
false, // Spawns Tiberium spontaneously?
|
||
true, // Does it have destruction animation?
|
||
false, // Does it have transformation (blossom tree) anim?
|
||
true, // Does it catch fire?
|
||
false, // Is this object crushable by heavy vehicles?
|
||
false, // Can this object be selected by the player?
|
||
false, // Can it be the target of a move or attack order?
|
||
true, // Don't make a big deal about it if it gets destroyed?
|
||
false, // Is it immune to normal combat damage?
|
||
"T11",
|
||
TXT_TREE,
|
||
TREE_NORMAL,
|
||
ARMOR_WOOD,
|
||
(short const *)_List0011,
|
||
(short const *)_List1100
|
||
);
|
||
|
||
static TerrainTypeClass const Tree12Class(
|
||
TERRAIN_TREE12,
|
||
THEATERF_WINTER|THEATERF_TEMPERATE,
|
||
XYP_COORD(14,36), // Center base coordinate offset.
|
||
false, // Spawns Tiberium spontaneously?
|
||
true, // Does it have destruction animation?
|
||
false, // Does it have transformation (blossom tree) anim?
|
||
true, // Does it catch fire?
|
||
false, // Is this object crushable by heavy vehicles?
|
||
false, // Can this object be selected by the player?
|
||
false, // Can it be the target of a move or attack order?
|
||
true, // Don't make a big deal about it if it gets destroyed?
|
||
false, // Is it immune to normal combat damage?
|
||
"T12",
|
||
TXT_TREE,
|
||
TREE_NORMAL,
|
||
ARMOR_WOOD,
|
||
(short const *)_List0010,
|
||
(short const *)_List1001
|
||
);
|
||
|
||
static TerrainTypeClass const Tree13Class(
|
||
TERRAIN_TREE13,
|
||
THEATERF_WINTER|THEATERF_TEMPERATE,
|
||
XYP_COORD(19,40), // Center base coordinate offset.
|
||
false, // Spawns Tiberium spontaneously?
|
||
true, // Does it have destruction animation?
|
||
false, // Does it have transformation (blossom tree) anim?
|
||
true, // Does it catch fire?
|
||
false, // Is this object crushable by heavy vehicles?
|
||
false, // Can this object be selected by the player?
|
||
false, // Can it be the target of a move or attack order?
|
||
true, // Don't make a big deal about it if it gets destroyed?
|
||
false, // Is it immune to normal combat damage?
|
||
"T13",
|
||
TXT_TREE,
|
||
TREE_NORMAL,
|
||
ARMOR_WOOD,
|
||
(short const *)_List0010,
|
||
(short const *)_List1101
|
||
);
|
||
|
||
static TerrainTypeClass const Tree14Class(
|
||
TERRAIN_TREE14,
|
||
THEATERF_WINTER|THEATERF_TEMPERATE,
|
||
XYP_COORD(19,40), // Center base coordinate offset.
|
||
false, // Spawns Tiberium spontaneously?
|
||
true, // Does it have destruction animation?
|
||
false, // Does it have transformation (blossom tree) anim?
|
||
true, // Does it catch fire?
|
||
false, // Is this object crushable by heavy vehicles?
|
||
false, // Can this object be selected by the player?
|
||
false, // Can it be the target of a move or attack order?
|
||
true, // Don't make a big deal about it if it gets destroyed?
|
||
false, // Is it immune to normal combat damage?
|
||
"T14",
|
||
TXT_TREE,
|
||
TREE_NORMAL,
|
||
ARMOR_WOOD,
|
||
(short const *)_List0011,
|
||
(short const *)_List1100
|
||
);
|
||
|
||
static TerrainTypeClass const Tree15Class(
|
||
TERRAIN_TREE15,
|
||
THEATERF_WINTER|THEATERF_TEMPERATE,
|
||
XYP_COORD(19,40), // Center base coordinate offset.
|
||
false, // Spawns Tiberium spontaneously?
|
||
true, // Does it have destruction animation?
|
||
false, // Does it have transformation (blossom tree) anim?
|
||
true, // Does it catch fire?
|
||
false, // Is this object crushable by heavy vehicles?
|
||
false, // Can this object be selected by the player?
|
||
false, // Can it be the target of a move or attack order?
|
||
true, // Don't make a big deal about it if it gets destroyed?
|
||
false, // Is it immune to normal combat damage?
|
||
"T15",
|
||
TXT_TREE,
|
||
TREE_NORMAL,
|
||
ARMOR_WOOD,
|
||
(short const *)_List0011,
|
||
(short const *)_List1100
|
||
);
|
||
|
||
static TerrainTypeClass const Tree16Class(
|
||
TERRAIN_TREE16,
|
||
THEATERF_WINTER|THEATERF_TEMPERATE,
|
||
XYP_COORD(13,36), // Center base coordinate offset.
|
||
false, // Spawns Tiberium spontaneously?
|
||
true, // Does it have destruction animation?
|
||
false, // Does it have transformation (blossom tree) anim?
|
||
true, // Does it catch fire?
|
||
false, // Is this object crushable by heavy vehicles?
|
||
false, // Can this object be selected by the player?
|
||
false, // Can it be the target of a move or attack order?
|
||
true, // Don't make a big deal about it if it gets destroyed?
|
||
false, // Is it immune to normal combat damage?
|
||
"T16",
|
||
TXT_TREE,
|
||
TREE_NORMAL,
|
||
ARMOR_WOOD,
|
||
(short const *)_List0010,
|
||
(short const *)_List1001
|
||
);
|
||
|
||
static TerrainTypeClass const Tree17Class(
|
||
TERRAIN_TREE17,
|
||
THEATERF_WINTER|THEATERF_TEMPERATE,
|
||
XYP_COORD(18,44), // Center base coordinate offset.
|
||
false, // Spawns Tiberium spontaneously?
|
||
true, // Does it have destruction animation?
|
||
false, // Does it have transformation (blossom tree) anim?
|
||
true, // Does it catch fire?
|
||
false, // Is this object crushable by heavy vehicles?
|
||
false, // Can this object be selected by the player?
|
||
false, // Can it be the target of a move or attack order?
|
||
true, // Don't make a big deal about it if it gets destroyed?
|
||
false, // Is it immune to normal combat damage?
|
||
"T17",
|
||
TXT_TREE,
|
||
TREE_NORMAL,
|
||
ARMOR_WOOD,
|
||
(short const *)_List0010,
|
||
(short const *)_List1001
|
||
);
|
||
|
||
static TerrainTypeClass const Tree18Class(
|
||
TERRAIN_TREE18,
|
||
THEATERF_DESERT,
|
||
XYP_COORD(33,40), // Center base coordinate offset.
|
||
false, // Spawns Tiberium spontaneously?
|
||
true, // Does it have destruction animation?
|
||
false, // Does it have transformation (blossom tree) anim?
|
||
true, // Does it catch fire?
|
||
false, // Is this object crushable by heavy vehicles?
|
||
false, // Can this object be selected by the player?
|
||
false, // Can it be the target of a move or attack order?
|
||
true, // Don't make a big deal about it if it gets destroyed?
|
||
false, // Is it immune to normal combat damage?
|
||
"T18",
|
||
TXT_TREE,
|
||
TREE_NORMAL,
|
||
ARMOR_WOOD,
|
||
(short const *)_List000010,
|
||
(short const *)_List111101
|
||
);
|
||
|
||
static TerrainTypeClass const Split1Class(
|
||
TERRAIN_BLOSSOMTREE1,
|
||
THEATERF_TEMPERATE|THEATERF_WINTER,
|
||
XYP_COORD(18,44), // Center base coordinate offset.
|
||
true, // Spawns Tiberium spontaneously?
|
||
false, // Does it have destruction animation?
|
||
true, // Does it have transformation (blossom tree) anim?
|
||
false, // Does it catch fire?
|
||
false, // Is this object crushable by heavy vehicles?
|
||
false, // Can this object be selected by the player?
|
||
false, // Can it be the target of a move or attack order?
|
||
true, // Don't make a big deal about it if it gets destroyed?
|
||
true, // Is it immune to normal combat damage?
|
||
"SPLIT2",
|
||
TXT_BLOSSOM_TREE,
|
||
TREE_NORMAL,
|
||
ARMOR_WOOD,
|
||
(short const *)_List0010,
|
||
(short const *)_List1101
|
||
);
|
||
|
||
static TerrainTypeClass const Split2Class(
|
||
TERRAIN_BLOSSOMTREE2,
|
||
THEATERF_TEMPERATE|THEATERF_WINTER|THEATERF_DESERT,
|
||
XYP_COORD(18,44), // Center base coordinate offset.
|
||
true, // Spawns Tiberium spontaneously?
|
||
false, // Does it have destruction animation?
|
||
true, // Does it have transformation (blossom tree) anim?
|
||
false, // Does it catch fire?
|
||
false, // Is this object crushable by heavy vehicles?
|
||
false, // Can this object be selected by the player?
|
||
false, // Can it be the target of a move or attack order?
|
||
true, // Don't make a big deal about it if it gets destroyed?
|
||
true, // Is it immune to normal combat damage?
|
||
"SPLIT3",
|
||
TXT_BLOSSOM_TREE,
|
||
TREE_NORMAL,
|
||
ARMOR_WOOD,
|
||
(short const *)_List0010,
|
||
(short const *)_List1101
|
||
);
|
||
|
||
static TerrainTypeClass const Clump1Class(
|
||
TERRAIN_CLUMP1,
|
||
THEATERF_WINTER|THEATERF_TEMPERATE,
|
||
XYP_COORD(28,41), // Center base coordinate offset.
|
||
false, // Spawns Tiberium spontaneously?
|
||
false, // Does it have destruction animation?
|
||
false, // Does it have transformation (blossom tree) anim?
|
||
false, // Does it catch fire?
|
||
false, // Is this object crushable by heavy vehicles?
|
||
false, // Can this object be selected by the player?
|
||
false, // Can it be the target of a move or attack order?
|
||
true, // Don't make a big deal about it if it gets destroyed?
|
||
true, // Is it immune to normal combat damage?
|
||
"TC01",
|
||
TXT_TREE,
|
||
TREE_NORMAL,
|
||
ARMOR_WOOD,
|
||
(short const *)_List000110,
|
||
(short const *)_List110001
|
||
);
|
||
|
||
static TerrainTypeClass const Clump2Class(
|
||
TERRAIN_CLUMP2,
|
||
THEATERF_WINTER|THEATERF_TEMPERATE,
|
||
XYP_COORD(38,41), // Center base coordinate offset.
|
||
false, // Spawns Tiberium spontaneously?
|
||
false, // Does it have destruction animation?
|
||
false, // Does it have transformation (blossom tree) anim?
|
||
false, // Does it catch fire?
|
||
false, // Is this object crushable by heavy vehicles?
|
||
false, // Can this object be selected by the player?
|
||
false, // Can it be the target of a move or attack order?
|
||
true, // Don't make a big deal about it if it gets destroyed?
|
||
true, // Is it immune to normal combat damage?
|
||
"TC02",
|
||
TXT_TREE,
|
||
TREE_NORMAL,
|
||
ARMOR_WOOD,
|
||
(short const *)_List010110,
|
||
(short const *)_List101001
|
||
);
|
||
|
||
static TerrainTypeClass const Clump3Class(
|
||
TERRAIN_CLUMP3,
|
||
THEATERF_WINTER|THEATERF_TEMPERATE,
|
||
XYP_COORD(33,35), // Center base coordinate offset.
|
||
false, // Spawns Tiberium spontaneously?
|
||
false, // Does it have destruction animation?
|
||
false, // Does it have transformation (blossom tree) anim?
|
||
false, // Does it catch fire?
|
||
false, // Is this object crushable by heavy vehicles?
|
||
false, // Can this object be selected by the player?
|
||
false, // Can it be the target of a move or attack order?
|
||
true, // Don't make a big deal about it if it gets destroyed?
|
||
true, // Is it immune to normal combat damage?
|
||
"TC03",
|
||
TXT_TREE,
|
||
TREE_NORMAL,
|
||
ARMOR_WOOD,
|
||
(short const *)_List110110,
|
||
(short const *)_List001
|
||
);
|
||
|
||
static TerrainTypeClass const Clump4Class(
|
||
TERRAIN_CLUMP4,
|
||
THEATERF_WINTER|THEATERF_TEMPERATE,
|
||
XYP_COORD(44,49), // Center base coordinate offset.
|
||
false, // Spawns Tiberium spontaneously?
|
||
false, // Does it have destruction animation?
|
||
false, // Does it have transformation (blossom tree) anim?
|
||
false, // Does it catch fire?
|
||
false, // Is this object crushable by heavy vehicles?
|
||
false, // Can this object be selected by the player?
|
||
false, // Can it be the target of a move or attack order?
|
||
true, // Don't make a big deal about it if it gets destroyed?
|
||
true, // Is it immune to normal combat damage?
|
||
"TC04",
|
||
TXT_TREE,
|
||
TREE_NORMAL,
|
||
ARMOR_WOOD,
|
||
(short const *)_List000011101000,
|
||
(short const *)_List111000010110
|
||
);
|
||
|
||
static TerrainTypeClass const Clump5Class(
|
||
TERRAIN_CLUMP5,
|
||
THEATERF_WINTER|THEATERF_TEMPERATE,
|
||
XYP_COORD(49,58), // Center base coordinate offset.
|
||
false, // Spawns Tiberium spontaneously?
|
||
false, // Does it have destruction animation?
|
||
false, // Does it have transformation (blossom tree) anim?
|
||
false, // Does it catch fire?
|
||
false, // Is this object crushable by heavy vehicles?
|
||
false, // Can this object be selected by the player?
|
||
false, // Can it be the target of a move or attack order?
|
||
true, // Don't make a big deal about it if it gets destroyed?
|
||
true, // Is it immune to normal combat damage?
|
||
"TC05",
|
||
TXT_TREE,
|
||
TREE_NORMAL,
|
||
ARMOR_WOOD,
|
||
(short const *)_List001011100110,
|
||
(short const *)_List110000011001
|
||
);
|
||
|
||
static TerrainTypeClass const Rock1Class(
|
||
TERRAIN_ROCK1,
|
||
THEATERF_DESERT,
|
||
XYP_COORD(33,41), // Center base coordinate offset.
|
||
false, // Spawns Tiberium spontaneously?
|
||
false, // Does it have destruction animation?
|
||
false, // Does it have transformation (blossom tree) anim?
|
||
false, // Does it catch fire?
|
||
false, // Is this object crushable by heavy vehicles?
|
||
false, // Can this object be selected by the player?
|
||
false, // Can it be the target of a move or attack order?
|
||
true, // Don't make a big deal about it if it gets destroyed?
|
||
true, // Is it immune to normal combat damage?
|
||
"ROCK1",
|
||
TXT_ROCK,
|
||
1000,
|
||
ARMOR_STEEL,
|
||
(short const *)_List0011,
|
||
(short const *)_List111001
|
||
);
|
||
|
||
static TerrainTypeClass const Rock2Class(
|
||
TERRAIN_ROCK2,
|
||
THEATERF_DESERT,
|
||
XYP_COORD(24,23), // Center base coordinate offset.
|
||
false, // Spawns Tiberium spontaneously?
|
||
false, // Does it have destruction animation?
|
||
false, // Does it have transformation (blossom tree) anim?
|
||
false, // Does it catch fire?
|
||
false, // Is this object crushable by heavy vehicles?
|
||
false, // Can this object be selected by the player?
|
||
false, // Can it be the target of a move or attack order?
|
||
true, // Don't make a big deal about it if it gets destroyed?
|
||
true, // Is it immune to normal combat damage?
|
||
"ROCK2",
|
||
TXT_ROCK,
|
||
1000,
|
||
ARMOR_STEEL,
|
||
(short const *)_List1100,
|
||
(short const *)_List001
|
||
);
|
||
|
||
static TerrainTypeClass const Rock3Class(
|
||
TERRAIN_ROCK3,
|
||
THEATERF_DESERT,
|
||
XYP_COORD(20,39), // Center base coordinate offset.
|
||
false, // Spawns Tiberium spontaneously?
|
||
false, // Does it have destruction animation?
|
||
false, // Does it have transformation (blossom tree) anim?
|
||
false, // Does it catch fire?
|
||
false, // Is this object crushable by heavy vehicles?
|
||
false, // Can this object be selected by the player?
|
||
false, // Can it be the target of a move or attack order?
|
||
true, // Don't make a big deal about it if it gets destroyed?
|
||
true, // Is it immune to normal combat damage?
|
||
"ROCK3",
|
||
TXT_ROCK,
|
||
1000,
|
||
ARMOR_STEEL,
|
||
(short const *)_List000110,
|
||
(short const *)_List110001
|
||
);
|
||
|
||
static TerrainTypeClass const Rock4Class(
|
||
TERRAIN_ROCK4,
|
||
THEATERF_DESERT,
|
||
XYP_COORD(12,20), // Center base coordinate offset.
|
||
false, // Spawns Tiberium spontaneously?
|
||
false, // Does it have destruction animation?
|
||
false, // Does it have transformation (blossom tree) anim?
|
||
false, // Does it catch fire?
|
||
false, // Is this object crushable by heavy vehicles?
|
||
false, // Can this object be selected by the player?
|
||
false, // Can it be the target of a move or attack order?
|
||
true, // Don't make a big deal about it if it gets destroyed?
|
||
true, // Is it immune to normal combat damage?
|
||
"ROCK4",
|
||
TXT_ROCK,
|
||
1000,
|
||
ARMOR_STEEL,
|
||
(short const *)_List10,
|
||
(short const *)_List01
|
||
);
|
||
|
||
static TerrainTypeClass const Rock5Class(
|
||
TERRAIN_ROCK5,
|
||
THEATERF_DESERT,
|
||
XYP_COORD(17,19), // Center base coordinate offset.
|
||
false, // Spawns Tiberium spontaneously?
|
||
false, // Does it have destruction animation?
|
||
false, // Does it have transformation (blossom tree) anim?
|
||
false, // Does it catch fire?
|
||
false, // Is this object crushable by heavy vehicles?
|
||
false, // Can this object be selected by the player?
|
||
false, // Can it be the target of a move or attack order?
|
||
true, // Don't make a big deal about it if it gets destroyed?
|
||
true, // Is it immune to normal combat damage?
|
||
"ROCK5",
|
||
TXT_ROCK,
|
||
1000,
|
||
ARMOR_STEEL,
|
||
(short const *)_List10,
|
||
(short const *)_List01
|
||
);
|
||
|
||
static TerrainTypeClass const Rock6Class(
|
||
TERRAIN_ROCK6,
|
||
THEATERF_DESERT,
|
||
XYP_COORD(28,40), // Center base coordinate offset.
|
||
false, // Spawns Tiberium spontaneously?
|
||
false, // Does it have destruction animation?
|
||
false, // Does it have transformation (blossom tree) anim?
|
||
false, // Does it catch fire?
|
||
false, // Is this object crushable by heavy vehicles?
|
||
false, // Can this object be selected by the player?
|
||
false, // Can it be the target of a move or attack order?
|
||
true, // Don't make a big deal about it if it gets destroyed?
|
||
true, // Is it immune to normal combat damage?
|
||
"ROCK6",
|
||
TXT_ROCK,
|
||
1000,
|
||
ARMOR_STEEL,
|
||
(short const *)_List000111,
|
||
(short const *)_List110000
|
||
);
|
||
|
||
static TerrainTypeClass const Rock7Class(
|
||
TERRAIN_ROCK7,
|
||
THEATERF_DESERT,
|
||
XYP_COORD(57,22), // Center base coordinate offset.
|
||
false, // Spawns Tiberium spontaneously?
|
||
false, // Does it have destruction animation?
|
||
false, // Does it have transformation (blossom tree) anim?
|
||
false, // Does it catch fire?
|
||
false, // Is this object crushable by heavy vehicles?
|
||
false, // Can this object be selected by the player?
|
||
false, // Can it be the target of a move or attack order?
|
||
true, // Don't make a big deal about it if it gets destroyed?
|
||
true, // Is it immune to normal combat damage?
|
||
"ROCK7",
|
||
TXT_ROCK,
|
||
1000,
|
||
ARMOR_STEEL,
|
||
(short const *)_List11110,
|
||
(short const *)_List00001
|
||
);
|
||
|
||
|
||
TerrainTypeClass const * const TerrainTypeClass::Pointers[TERRAIN_COUNT] = {
|
||
&Tree1Class, // TERRAIN_TREE1
|
||
&Tree2Class, // TERRAIN_TREE2
|
||
&Tree3Class, // TERRAIN_TREE3
|
||
&Tree4Class, // TERRAIN_TREE4
|
||
&Tree5Class, // TERRAIN_TREE5
|
||
&Tree6Class, // TERRAIN_TREE6
|
||
&Tree7Class, // TERRAIN_TREE7
|
||
&Tree8Class, // TERRAIN_TREE8
|
||
&Tree9Class, // TERRAIN_TREE9
|
||
&Tree10Class, // TERRAIN_TREE10
|
||
&Tree11Class, // TERRAIN_TREE11
|
||
&Tree12Class, // TERRAIN_TREE12
|
||
&Tree13Class, // TERRAIN_TREE13
|
||
&Tree14Class, // TERRAIN_TREE14
|
||
&Tree15Class, // TERRAIN_TREE15
|
||
&Tree16Class, // TERRAIN_TREE16
|
||
&Tree17Class, // TERRAIN_TREE17
|
||
&Tree18Class, // TERRAIN_TREE18
|
||
&Split1Class, // TERRAIN_BLOSSOMTREE1
|
||
&Split2Class, // TERRAIN_BLOSSOMTREE2
|
||
&Clump1Class, // TERRAIN_CLUMP1
|
||
&Clump2Class, // TERRAIN_CLUMP2
|
||
&Clump3Class, // TERRAIN_CLUMP3
|
||
&Clump4Class, // TERRAIN_CLUMP4
|
||
&Clump5Class, // TERRAIN_CLUMP5
|
||
&Rock1Class, // TERRAIN_ROCK1
|
||
&Rock2Class, // TERRAIN_ROCK2
|
||
&Rock3Class, // TERRAIN_ROCK3
|
||
&Rock4Class, // TERRAIN_ROCK4
|
||
&Rock5Class, // TERRAIN_ROCK5
|
||
&Rock6Class, // TERRAIN_ROCK6
|
||
&Rock7Class // TERRAIN_ROCK7
|
||
};
|
||
|
||
|
||
/***********************************************************************************************
|
||
* TerrainTypeClass::TerrainTypeClass -- The general constructor for the terrain type objects. *
|
||
* *
|
||
* This is the constructor for terrain type objects. It is only used to construct the *
|
||
* static (constant) terrain type objects. *
|
||
* *
|
||
* INPUT: see below.. *
|
||
* *
|
||
* OUTPUT: none *
|
||
* *
|
||
* WARNINGS: none *
|
||
* *
|
||
* HISTORY: *
|
||
* 07/19/1994 JLB : Created. *
|
||
*=============================================================================================*/
|
||
TerrainTypeClass::TerrainTypeClass(
|
||
TerrainType terrain,
|
||
int theater,
|
||
COORDINATE centerbase,
|
||
bool is_spawn,
|
||
bool is_destroyable,
|
||
bool is_transformable,
|
||
bool is_flammable,
|
||
bool is_crushable,
|
||
bool is_selectable,
|
||
bool is_legal_target,
|
||
bool is_insignificant,
|
||
bool is_immune,
|
||
char const *ininame,
|
||
int fullname, unsigned short strength, ArmorType armor, short const *occupy, short const *overlap) :
|
||
ObjectTypeClass(true, is_flammable, is_crushable, true, is_selectable,
|
||
is_legal_target, is_insignificant, is_immune,
|
||
fullname, ininame, armor, strength)
|
||
{
|
||
CenterBase = centerbase;
|
||
IsTiberiumSpawn = is_spawn;
|
||
IsDestroyable = is_destroyable;
|
||
IsTransformable = is_transformable;
|
||
Theater = theater;
|
||
Type = terrain;
|
||
Occupy = occupy;
|
||
Overlap = overlap;
|
||
}
|
||
|
||
|
||
/***********************************************************************************************
|
||
* TerrainTypeClass::Init -- Loads terrain object shape files. *
|
||
* *
|
||
* This routine is used to load up the terrain object shape files. *
|
||
* The shape files loaded depends on theater. *
|
||
* *
|
||
* INPUT: theater -- The theater to load the terrain shape data for. *
|
||
* *
|
||
* OUTPUT: none *
|
||
* *
|
||
* WARNINGS: none *
|
||
* *
|
||
* HISTORY: *
|
||
* 05/16/1994 JLB : Created. *
|
||
*=============================================================================================*/
|
||
void TerrainTypeClass::Init(TheaterType theater)
|
||
{
|
||
if (theater != LastTheater){
|
||
for (TerrainType index = TERRAIN_FIRST; index < TERRAIN_COUNT; index++) {
|
||
TerrainTypeClass const & terrain = As_Reference(index);
|
||
char fullname[_MAX_FNAME+_MAX_EXT];
|
||
|
||
/*
|
||
** Clear any existing shape pointer. All terrain is theater specific, thus if
|
||
** it isn't loaded in this routine, it shouldn't exist at all.
|
||
*/
|
||
((void const *&)terrain.ImageData) = NULL;
|
||
|
||
if (terrain.Theater & (1 << theater)) {
|
||
|
||
/*
|
||
** Load in the appropriate object shape data.
|
||
*/
|
||
_makepath(fullname, NULL, NULL, terrain.IniName, Theaters[theater].Suffix);
|
||
((void const *&)terrain.ImageData) = MixFileClass::Retrieve(fullname);
|
||
|
||
IsTheaterShape = true;
|
||
if (terrain.RadarIcon) delete[] (char *)terrain.RadarIcon;
|
||
((void const *&)terrain.RadarIcon) = Get_Radar_Icon(terrain.Get_Image_Data(), 0, 1, 3);
|
||
IsTheaterShape = false;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
/***********************************************************************************************
|
||
* TerrainTypeClass::From_Name -- Convert name to terrain type. *
|
||
* *
|
||
* This routine is used to convert a text name into the matching *
|
||
* terrain type number. This is used during scenario initialization. *
|
||
* *
|
||
* INPUT: name -- The name to convert. *
|
||
* *
|
||
* OUTPUT: Returns the TerrainType that matches the name specified. If *
|
||
* no match was found, then TERRAIN_NONE is returned. *
|
||
* *
|
||
* WARNINGS: none *
|
||
* *
|
||
* HISTORY: *
|
||
* 05/16/1994 JLB : Created. *
|
||
*=============================================================================================*/
|
||
TerrainType TerrainTypeClass::From_Name(char const * name)
|
||
{
|
||
TerrainType index;
|
||
|
||
if (name) {
|
||
for (index = TERRAIN_FIRST; index < TERRAIN_COUNT; index++) {
|
||
if (stricmp(name, Pointers[index]->IniName) == 0) {
|
||
return(index);
|
||
}
|
||
}
|
||
}
|
||
return(TERRAIN_NONE);
|
||
}
|
||
|
||
|
||
#ifdef SCENARIO_EDITOR
|
||
/***********************************************************************************************
|
||
* TerrainTypeClass::Display -- Display a generic terrain object. *
|
||
* *
|
||
* This routine is used to display a generic terrain object. Typical *
|
||
* use is during scenario editing. *
|
||
* *
|
||
* INPUT: x,y -- Pixel coordinates to display object at (centered). *
|
||
* *
|
||
* window-- The window to display the object within. *
|
||
* *
|
||
* OUTPUT: none *
|
||
* *
|
||
* WARNINGS: none *
|
||
* *
|
||
* HISTORY: *
|
||
* 05/16/1994 JLB : Created. *
|
||
*=============================================================================================*/
|
||
void TerrainTypeClass::Display(int x, int y, WindowNumberType window, HousesType) const
|
||
{
|
||
CC_Draw_Shape(Get_Image_Data(), 0, x, y, window, SHAPE_NORMAL|SHAPE_CENTER|SHAPE_WIN_REL);
|
||
}
|
||
|
||
|
||
/***********************************************************************************************
|
||
* TerrainTypeClass::Prep_For_Add -- Prepares to add terrain object. *
|
||
* *
|
||
* Submits all of the valid terrain objects to the scenario editor for possible selection *
|
||
* and subsequent placement on the map. All terrain objects, that have a valid shape *
|
||
* file available, are added. *
|
||
* *
|
||
* INPUT: none *
|
||
* *
|
||
* OUTPUT: none *
|
||
* *
|
||
* WARNINGS: none *
|
||
* *
|
||
* HISTORY: *
|
||
* 05/23/1994 JLB : Created. *
|
||
*=============================================================================================*/
|
||
void TerrainTypeClass::Prep_For_Add(void)
|
||
{
|
||
for (TerrainType index = TERRAIN_FIRST; index < TERRAIN_COUNT; index++) {
|
||
if (As_Reference(index).Get_Image_Data()) {
|
||
Map.Add_To_List(&As_Reference(index));
|
||
}
|
||
}
|
||
}
|
||
#endif
|
||
|
||
|
||
/***********************************************************************************************
|
||
* TerrainTypeClass::Create_And_Place -- Creates and places terrain object on map. *
|
||
* *
|
||
* This support routine is used by the scenario editor to add a terrain object to the map. *
|
||
* *
|
||
* INPUT: cell -- The cell to place the terrain object in. *
|
||
* *
|
||
* OUTPUT: bool; Was the placement successful? *
|
||
* *
|
||
* WARNINGS: none *
|
||
* *
|
||
* HISTORY: *
|
||
* 05/28/1994 JLB : Created. *
|
||
*=============================================================================================*/
|
||
bool TerrainTypeClass::Create_And_Place(CELL cell, HousesType ) const
|
||
{
|
||
if (new TerrainClass(Type, cell)) {
|
||
return(true);
|
||
}
|
||
return(false);
|
||
}
|
||
|
||
|
||
/***********************************************************************************************
|
||
* TerrainTypeClass::Create_On_Of -- Creates a terrain object from type. *
|
||
* *
|
||
* This is used to create a terrain object by using the terrain type as a guide. This *
|
||
* routine is typically used by the scenario editor in order to place a terrain object *
|
||
* onto the map. *
|
||
* *
|
||
* INPUT: none *
|
||
* *
|
||
* OUTPUT: Returns with a pointer to the created terrain object or NULL if one couldn't be *
|
||
* created. *
|
||
* *
|
||
* WARNINGS: none *
|
||
* *
|
||
* HISTORY: *
|
||
* 07/19/1994 JLB : Created. *
|
||
*=============================================================================================*/
|
||
ObjectClass * TerrainTypeClass::Create_One_Of(HouseClass *) const
|
||
{
|
||
return(new TerrainClass(Type, -1));
|
||
}
|
||
|
||
|
||
short const * TerrainTypeClass::Occupy_List(bool ) const
|
||
{
|
||
if (Occupy) return(Occupy);
|
||
|
||
static short const _simple[1] = {
|
||
REFRESH_EOL
|
||
};
|
||
return(&_simple[0]);
|
||
}
|
||
|
||
|
||
short const * TerrainTypeClass::Overlap_List(void) const
|
||
{
|
||
if (Overlap) return(Overlap);
|
||
|
||
static short const _simple[1] = {
|
||
REFRESH_EOL
|
||
};
|
||
return(&_simple[0]);
|
||
}
|