952 lines
52 KiB
C++
952 lines
52 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: /CounterStrike/ODATA.CPP 1 3/03/97 10:25a 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 : ODATA.CPP *
|
|
* *
|
|
* Programmer : Joe L. Bostic *
|
|
* *
|
|
* Start Date : May 16, 1994 *
|
|
* *
|
|
* Last Update : August 14, 1996 [JLB] *
|
|
* *
|
|
*---------------------------------------------------------------------------------------------*
|
|
* Functions: *
|
|
* OverlayTypeClass::As_Reference -- Fetch a reference to the overlay type specified. *
|
|
* OverlayTypeClass::Coord_Fixup -- Adjust the coord to be legal for assignment. *
|
|
* OverlayTypeClass::Create_And_Place -- Creates and places a overlay object on the map. *
|
|
* OverlayTypeClass::Create_One_Of -- Creates an object of this overlay type. *
|
|
* OverlayTypeClass::Display -- Displays a generic representation of overlay. *
|
|
* OverlayTypeClass::Draw_It -- Draws the overlay image at location specified. *
|
|
* OverlayTypeClass::From_Name -- Determine overlay from ASCII name. *
|
|
* OverlayTypeClass::Init -- Initialize the overlay graphic data per theater. *
|
|
* OverlayTypeClass::Init_Heap -- Initialize the overlay type class heap. *
|
|
* OverlayTypeClass::Occupy_List -- Determines occupation list. *
|
|
* OverlayTypeClass::One_Time -- Loads all the necessary general overlay shape data. *
|
|
* OverlayTypeClass::OverlayTypeClass -- Constructor for overlay type objects. *
|
|
* OverlayTypeClass::Prep_For_Add -- Prepares to add overlay to scenario. *
|
|
* OverlayTypeClass::Radar_Icon -- Gets a pointer to the radar icons *
|
|
* OverlayTypeClass::operator delete -- Returns an overlay type object back to the pool. *
|
|
* OverlayTypeClass::operator new -- Allocate an overlay type class object from pool. *
|
|
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
|
|
|
#include "function.h"
|
|
#include "type.h"
|
|
|
|
|
|
static OverlayTypeClass const Sandbag(
|
|
OVERLAY_SANDBAG_WALL, // Overlay type number.
|
|
"SBAG", // INI name of overlay.
|
|
TXT_SANDBAG_WALL, // Full name of overlay.
|
|
LAND_WALL, // What kind of ground is it?
|
|
1, // If this is a wall, how many damage levels?
|
|
20, // If this is a wall, how many damage points can it take per level?
|
|
true, // Visible on the radar map?
|
|
false, // Is it a wooden overlay (affected by fire)?
|
|
true, // Targetable as a destroyable overlay?
|
|
true, // Crushable by tracked vehicle?
|
|
false, // Is this harvestable Tiberium?
|
|
false, // Stops low level bullets in flight?
|
|
false, // Theater specific art?
|
|
true, // Is this a wall type?
|
|
false // Is this a crate?
|
|
);
|
|
static OverlayTypeClass const Cyclone(
|
|
OVERLAY_CYCLONE_WALL, // Overlay type number.
|
|
"CYCL", // INI name of overlay.
|
|
TXT_CYCLONE_WALL, // Full name of overlay.
|
|
LAND_WALL, // What kind of ground is it?
|
|
2, // If this is a wall, how many damage levels?
|
|
10, // If this is a wall, how many damage points can it take per level?
|
|
true, // Visible on the radar map?
|
|
false, // Is it a wooden overlay (affected by fire)?
|
|
true, // Targetable as a destroyable overlay?
|
|
true, // Crushable by tracked vehicle?
|
|
false, // Is this harvestable Tiberium?
|
|
false, // Stops low level bullets in flight?
|
|
false, // Theater specific art?
|
|
true, // Is this a wall type?
|
|
false // Is this a crate?
|
|
);
|
|
static OverlayTypeClass const Brick(
|
|
OVERLAY_BRICK_WALL, // Overlay type number.
|
|
"BRIK", // INI name of overlay.
|
|
TXT_BRICK_WALL, // Full name of overlay.
|
|
LAND_WALL, // What kind of ground is it?
|
|
3, // If this is a wall, how many damage levels?
|
|
70, // If this is a wall, how many damage points can it take per level?
|
|
true, // Visible on the radar map?
|
|
false, // Is it a wooden overlay (affected by fire)?
|
|
true, // Targetable as a destroyable overlay?
|
|
false, // Crushable by tracked vehicle?
|
|
false, // Is this harvestable Tiberium?
|
|
true, // Stops low level bullets in flight?
|
|
false, // Theater specific art?
|
|
true, // Is this a wall type?
|
|
false // Is this a crate?
|
|
);
|
|
static OverlayTypeClass const Barbwire(
|
|
OVERLAY_BARBWIRE_WALL, // Overlay type number.
|
|
"BARB", // INI name of overlay.
|
|
TXT_BARBWIRE_WALL, // Full name of overlay.
|
|
LAND_WALL, // What kind of ground is it?
|
|
1, // If this is a wall, how many damage levels?
|
|
2, // If this is a wall, how many damage points can it take per level?
|
|
true, // Visible on the radar map?
|
|
false, // Is it a wooden overlay (affected by fire)?
|
|
true, // Targetable as a destroyable overlay?
|
|
true, // Crushable by tracked vehicle?
|
|
false, // Is this harvestable Tiberium?
|
|
false, // Stops low level bullets in flight?
|
|
false, // Theater specific art?
|
|
true, // Is this a wall type?
|
|
false // Is this a crate?
|
|
);
|
|
static OverlayTypeClass const Wood(
|
|
OVERLAY_WOOD_WALL, // Overlay type number.
|
|
"WOOD", // INI name of overlay.
|
|
TXT_WOOD_WALL, // Full name of overlay.
|
|
LAND_WALL, // What kind of ground is it?
|
|
1, // If this is a wall, how many damage levels?
|
|
2, // If this is a wall, how many damage points can it take per level?
|
|
true, // Visible on the radar map?
|
|
true, // Is it a wooden overlay (affected by fire)?
|
|
true, // Targetable as a destroyable overlay?
|
|
true, // Crushable by tracked vehicle?
|
|
false, // Is this harvestable Tiberium?
|
|
false, // Stops low level bullets in flight?
|
|
false, // Theater specific art?
|
|
true, // Is this a wall type?
|
|
false // Is this a crate?
|
|
);
|
|
static OverlayTypeClass const Fence(
|
|
OVERLAY_FENCE, // Overlay type number.
|
|
"FENC", // INI name of overlay.
|
|
TXT_FENCE, // Full name of overlay.
|
|
LAND_WALL, // What kind of ground is it?
|
|
2, // If this is a wall, how many damage levels?
|
|
10, // If this is a wall, how many damage points can it take per level?
|
|
true, // Visible on the radar map?
|
|
false, // Is it a wooden overlay (affected by fire)?
|
|
true, // Targetable as a destroyable overlay?
|
|
true, // Crushable by tracked vehicle?
|
|
false, // Is this harvestable Tiberium?
|
|
false, // Stops low level bullets in flight?
|
|
false, // Theater specific art?
|
|
true, // Is this a wall type?
|
|
false // Is this a crate?
|
|
);
|
|
|
|
static OverlayTypeClass const Gold1(
|
|
OVERLAY_GOLD1, // Overlay type number.
|
|
"GOLD01", // INI name of overlay.
|
|
TXT_GOLD, // Full name of overlay.
|
|
LAND_TIBERIUM, // What kind of ground is it?
|
|
0, // If this is a wall, how many damage levels?
|
|
0, // If this is a wall, how many damage points can it take per level?
|
|
true, // Visible on the radar map?
|
|
false, // Is it a wooden overlay (affected by fire)?
|
|
false, // Targetable as a destroyable overlay?
|
|
false, // Crushable by tracked vehicle?
|
|
true, // Is this harvestable Tiberium?
|
|
false, // Stops low level bullets in flight?
|
|
true, // Theater specific art?
|
|
false, // Is this a wall type?
|
|
false // Is this a crate?
|
|
);
|
|
static OverlayTypeClass const Gold2(
|
|
OVERLAY_GOLD2, // Overlay type number.
|
|
"GOLD02", // INI name of overlay.
|
|
TXT_GOLD, // Full name of overlay.
|
|
LAND_TIBERIUM, // What kind of ground is it?
|
|
0, // If this is a wall, how many damage levels?
|
|
0, // If this is a wall, how many damage points can it take per level?
|
|
true, // Visible on the radar map?
|
|
false, // Is it a wooden overlay (affected by fire)?
|
|
false, // Targetable as a destroyable overlay?
|
|
false, // Crushable by tracked vehicle?
|
|
true, // Is this harvestable Tiberium?
|
|
false, // Stops low level bullets in flight?
|
|
true, // Theater specific art?
|
|
false, // Is this a wall type?
|
|
false // Is this a crate?
|
|
);
|
|
static OverlayTypeClass const Gold3(
|
|
OVERLAY_GOLD3, // Overlay type number.
|
|
"GOLD03", // INI name of overlay.
|
|
TXT_GOLD, // Full name of overlay.
|
|
LAND_TIBERIUM, // What kind of ground is it?
|
|
0, // If this is a wall, how many damage levels?
|
|
0, // If this is a wall, how many damage points can it take per level?
|
|
true, // Visible on the radar map?
|
|
false, // Is it a wooden overlay (affected by fire)?
|
|
false, // Targetable as a destroyable overlay?
|
|
false, // Crushable by tracked vehicle?
|
|
true, // Is this harvestable Tiberium?
|
|
false, // Stops low level bullets in flight?
|
|
true, // Theater specific art?
|
|
false, // Is this a wall type?
|
|
false // Is this a crate?
|
|
);
|
|
static OverlayTypeClass const Gold4(
|
|
OVERLAY_GOLD4, // Overlay type number.
|
|
"GOLD04", // INI name of overlay.
|
|
TXT_GOLD, // Full name of overlay.
|
|
LAND_TIBERIUM, // What kind of ground is it?
|
|
0, // If this is a wall, how many damage levels?
|
|
0, // If this is a wall, how many damage points can it take per level?
|
|
true, // Visible on the radar map?
|
|
false, // Is it a wooden overlay (affected by fire)?
|
|
false, // Targetable as a destroyable overlay?
|
|
false, // Crushable by tracked vehicle?
|
|
true, // Is this harvestable Tiberium?
|
|
false, // Stops low level bullets in flight?
|
|
true, // Theater specific art?
|
|
false, // Is this a wall type?
|
|
false // Is this a crate?
|
|
);
|
|
|
|
static OverlayTypeClass const Gems1(
|
|
OVERLAY_GEMS1, // Overlay type number.
|
|
"GEM01", // INI name of overlay.
|
|
TXT_GEMS, // Full name of overlay.
|
|
LAND_TIBERIUM, // What kind of ground is it?
|
|
0, // If this is a wall, how many damage levels?
|
|
0, // If this is a wall, how many damage points can it take per level?
|
|
true, // Visible on the radar map?
|
|
false, // Is it a wooden overlay (affected by fire)?
|
|
false, // Targetable as a destroyable overlay?
|
|
false, // Crushable by tracked vehicle?
|
|
true, // Is this harvestable Tiberium?
|
|
false, // Stops low level bullets in flight?
|
|
true, // Theater specific art?
|
|
false, // Is this a wall type?
|
|
false // Is this a crate?
|
|
);
|
|
static OverlayTypeClass const Gems2(
|
|
OVERLAY_GEMS2, // Overlay type number.
|
|
"GEM02", // INI name of overlay.
|
|
TXT_GEMS, // Full name of overlay.
|
|
LAND_TIBERIUM, // What kind of ground is it?
|
|
0, // If this is a wall, how many damage levels?
|
|
0, // If this is a wall, how many damage points can it take per level?
|
|
true, // Visible on the radar map?
|
|
false, // Is it a wooden overlay (affected by fire)?
|
|
false, // Targetable as a destroyable overlay?
|
|
false, // Crushable by tracked vehicle?
|
|
true, // Is this harvestable Tiberium?
|
|
false, // Stops low level bullets in flight?
|
|
true, // Theater specific art?
|
|
false, // Is this a wall type?
|
|
false // Is this a crate?
|
|
);
|
|
static OverlayTypeClass const Gems3(
|
|
OVERLAY_GEMS3, // Overlay type number.
|
|
"GEM03", // INI name of overlay.
|
|
TXT_GEMS, // Full name of overlay.
|
|
LAND_TIBERIUM, // What kind of ground is it?
|
|
0, // If this is a wall, how many damage levels?
|
|
0, // If this is a wall, how many damage points can it take per level?
|
|
true, // Visible on the radar map?
|
|
false, // Is it a wooden overlay (affected by fire)?
|
|
false, // Targetable as a destroyable overlay?
|
|
false, // Crushable by tracked vehicle?
|
|
true, // Is this harvestable Tiberium?
|
|
false, // Stops low level bullets in flight?
|
|
true, // Theater specific art?
|
|
false, // Is this a wall type?
|
|
false // Is this a crate?
|
|
);
|
|
static OverlayTypeClass const Gems4(
|
|
OVERLAY_GEMS4, // Overlay type number.
|
|
"GEM04", // INI name of overlay.
|
|
TXT_GEMS, // Full name of overlay.
|
|
LAND_TIBERIUM, // What kind of ground is it?
|
|
0, // If this is a wall, how many damage levels?
|
|
0, // If this is a wall, how many damage points can it take per level?
|
|
true, // Visible on the radar map?
|
|
false, // Is it a wooden overlay (affected by fire)?
|
|
false, // Targetable as a destroyable overlay?
|
|
false, // Crushable by tracked vehicle?
|
|
true, // Is this harvestable Tiberium?
|
|
false, // Stops low level bullets in flight?
|
|
true, // Theater specific art?
|
|
false, // Is this a wall type?
|
|
false // Is this a crate?
|
|
);
|
|
static OverlayTypeClass const V12(
|
|
OVERLAY_V12, // Overlay type number.
|
|
"V12", // INI name of overlay.
|
|
TXT_CIV12, // Full name of overlay.
|
|
LAND_ROCK, // What kind of ground is it?
|
|
0, // If this is a wall, how many damage levels?
|
|
0, // If this is a wall, how many damage points can it take per level?
|
|
false, // Visible on the radar map?
|
|
false, // Is it a wooden overlay (affected by fire)?
|
|
false, // Targetable as a destroyable overlay?
|
|
true, // Crushable by tracked vehicle?
|
|
false, // Is this harvestable Tiberium?
|
|
false, // Stops low level bullets in flight?
|
|
true, // Theater specific art?
|
|
false, // Is this a wall type?
|
|
false // Is this a crate?
|
|
);
|
|
static OverlayTypeClass const V13(
|
|
OVERLAY_V13, // Overlay type number.
|
|
"V13", // INI name of overlay.
|
|
TXT_CIV13, // Full name of overlay.
|
|
LAND_ROCK, // What kind of ground is it?
|
|
0, // If this is a wall, how many damage levels?
|
|
0, // If this is a wall, how many damage points can it take per level?
|
|
false, // Visible on the radar map?
|
|
false, // Is it a wooden overlay (affected by fire)?
|
|
false, // Targetable as a destroyable overlay?
|
|
true, // Crushable by tracked vehicle?
|
|
false, // Is this harvestable Tiberium?
|
|
false, // Stops low level bullets in flight?
|
|
true, // Theater specific art?
|
|
false, // Is this a wall type?
|
|
false // Is this a crate?
|
|
);
|
|
static OverlayTypeClass const V14(
|
|
OVERLAY_V14, // Overlay type number.
|
|
"V14", // INI name of overlay.
|
|
TXT_CIV14, // Full name of overlay.
|
|
LAND_ROCK, // What kind of ground is it?
|
|
0, // If this is a wall, how many damage levels?
|
|
0, // If this is a wall, how many damage points can it take per level?
|
|
false, // Visible on the radar map?
|
|
false, // Is it a wooden overlay (affected by fire)?
|
|
false, // Targetable as a destroyable overlay?
|
|
true, // Crushable by tracked vehicle?
|
|
false, // Is this harvestable Tiberium?
|
|
false, // Stops low level bullets in flight?
|
|
true, // Theater specific art?
|
|
false, // Is this a wall type?
|
|
false // Is this a crate?
|
|
);
|
|
static OverlayTypeClass const V15(
|
|
OVERLAY_V15, // Overlay type number.
|
|
"V15", // INI name of overlay.
|
|
TXT_CIV15, // Full name of overlay.
|
|
LAND_ROCK, // What kind of ground is it?
|
|
0, // If this is a wall, how many damage levels?
|
|
0, // If this is a wall, how many damage points can it take per level?
|
|
false, // Visible on the radar map?
|
|
false, // Is it a wooden overlay (affected by fire)?
|
|
false, // Targetable as a destroyable overlay?
|
|
true, // Crushable by tracked vehicle?
|
|
false, // Is this harvestable Tiberium?
|
|
false, // Stops low level bullets in flight?
|
|
true, // Theater specific art?
|
|
false, // Is this a wall type?
|
|
false // Is this a crate?
|
|
);
|
|
static OverlayTypeClass const V16(
|
|
OVERLAY_V16, // Overlay type number.
|
|
"V16", // INI name of overlay.
|
|
TXT_CIV16, // Full name of overlay.
|
|
LAND_ROCK, // What kind of ground is it?
|
|
0, // If this is a wall, how many damage levels?
|
|
0, // If this is a wall, how many damage points can it take per level?
|
|
false, // Visible on the radar map?
|
|
false, // Is it a wooden overlay (affected by fire)?
|
|
false, // Targetable as a destroyable overlay?
|
|
true, // Crushable by tracked vehicle?
|
|
false, // Is this harvestable Tiberium?
|
|
false, // Stops low level bullets in flight?
|
|
true, // Theater specific art?
|
|
false, // Is this a wall type?
|
|
false // Is this a crate?
|
|
);
|
|
static OverlayTypeClass const V17(
|
|
OVERLAY_V17, // Overlay type number.
|
|
"V17", // INI name of overlay.
|
|
TXT_CIV17, // Full name of overlay.
|
|
LAND_ROCK, // What kind of ground is it?
|
|
0, // If this is a wall, how many damage levels?
|
|
0, // If this is a wall, how many damage points can it take per level?
|
|
false, // Visible on the radar map?
|
|
false, // Is it a wooden overlay (affected by fire)?
|
|
false, // Targetable as a destroyable overlay?
|
|
true, // Crushable by tracked vehicle?
|
|
false, // Is this harvestable Tiberium?
|
|
false, // Stops low level bullets in flight?
|
|
true, // Theater specific art?
|
|
false, // Is this a wall type?
|
|
false // Is this a crate?
|
|
);
|
|
static OverlayTypeClass const V18(
|
|
OVERLAY_V18, // Overlay type number.
|
|
"V18", // INI name of overlay.
|
|
TXT_CIV18, // Full name of overlay.
|
|
LAND_ROCK, // What kind of ground is it?
|
|
0, // If this is a wall, how many damage levels?
|
|
0, // If this is a wall, how many damage points can it take per level?
|
|
false, // Visible on the radar map?
|
|
false, // Is it a wooden overlay (affected by fire)?
|
|
false, // Targetable as a destroyable overlay?
|
|
true, // Crushable by tracked vehicle?
|
|
false, // Is this harvestable Tiberium?
|
|
false, // Stops low level bullets in flight?
|
|
true, // Theater specific art?
|
|
false, // Is this a wall type?
|
|
false // Is this a crate?
|
|
);
|
|
static OverlayTypeClass const FlagSpot(
|
|
OVERLAY_FLAG_SPOT, // Overlay type number.
|
|
"FPLS", // INI name of overlay.
|
|
TXT_FLAG_SPOT, // Full name of overlay.
|
|
LAND_CLEAR, // What kind of ground is it?
|
|
0, // If this is a wall, how many damage levels?
|
|
0, // If this is a wall, how many damage points can it take per level?
|
|
true, // Visible on the radar map?
|
|
false, // Is it a wooden overlay (affected by fire)?
|
|
false, // Targetable as a destroyable overlay?
|
|
false, // Crushable by tracked vehicle?
|
|
false, // Is this harvestable Tiberium?
|
|
false, // Stops low level bullets in flight?
|
|
false, // Theater specific art?
|
|
false, // Is this a wall type?
|
|
false // Is this a crate?
|
|
);
|
|
static OverlayTypeClass const WoodCrate(
|
|
OVERLAY_WOOD_CRATE, // Overlay type number.
|
|
"WCRATE", // INI name of overlay.
|
|
TXT_WOOD_CRATE, // Full name of overlay.
|
|
LAND_CLEAR, // What kind of ground is it?
|
|
0, // If this is a wall, how many damage levels?
|
|
0, // If this is a wall, how many damage points can it take per level?
|
|
false, // Visible on the radar map?
|
|
false, // Is it a wooden overlay (affected by fire)?
|
|
false, // Targetable as a destroyable overlay?
|
|
false, // Crushable by tracked vehicle?
|
|
false, // Is this harvestable Tiberium?
|
|
false, // Stops low level bullets in flight?
|
|
false, // Theater specific art?
|
|
false, // Is this a wall type?
|
|
true // Is this a crate?
|
|
);
|
|
static OverlayTypeClass const WaterCrate(
|
|
OVERLAY_WATER_CRATE, // Overlay type number.
|
|
"WWCRATE", // INI name of overlay.
|
|
TXT_WATER_CRATE, // Full name of overlay.
|
|
LAND_WATER, // What kind of ground is it?
|
|
0, // If this is a wall, how many damage levels?
|
|
0, // If this is a wall, how many damage points can it take per level?
|
|
false, // Visible on the radar map?
|
|
false, // Is it a wooden overlay (affected by fire)?
|
|
false, // Targetable as a destroyable overlay?
|
|
false, // Crushable by tracked vehicle?
|
|
false, // Is this harvestable Tiberium?
|
|
false, // Stops low level bullets in flight?
|
|
false, // Theater specific art?
|
|
false, // Is this a wall type?
|
|
true // Is this a crate?
|
|
);
|
|
static OverlayTypeClass const SteelCrate(
|
|
OVERLAY_STEEL_CRATE, // Overlay type number.
|
|
"SCRATE", // INI name of overlay.
|
|
TXT_STEEL_CRATE, // Full name of overlay.
|
|
LAND_CLEAR, // What kind of ground is it?
|
|
0, // If this is a wall, how many damage levels?
|
|
0, // If this is a wall, how many damage points can it take per level?
|
|
false, // Visible on the radar map?
|
|
false, // Is it a wooden overlay (affected by fire)?
|
|
false, // Targetable as a destroyable overlay?
|
|
false, // Crushable by tracked vehicle?
|
|
false, // Is this harvestable Tiberium?
|
|
false, // Stops low level bullets in flight?
|
|
false, // Theater specific art?
|
|
false, // Is this a wall type?
|
|
true // Is this a crate?
|
|
);
|
|
|
|
|
|
/***********************************************************************************************
|
|
* OverlayTypeClass::OverlayTypeClass -- Constructor for overlay type objects. *
|
|
* *
|
|
* This is the constructor for the overlay types. *
|
|
* *
|
|
* INPUT: see below... *
|
|
* *
|
|
* OUTPUT: none *
|
|
* *
|
|
* WARNINGS: none *
|
|
* *
|
|
* HISTORY: *
|
|
* 07/29/1994 JLB : Created. *
|
|
*=============================================================================================*/
|
|
OverlayTypeClass::OverlayTypeClass(
|
|
OverlayType iconset,
|
|
char const * ininame,
|
|
int fullname,
|
|
LandType ground,
|
|
int damagelevels,
|
|
int damagepoints,
|
|
bool isradarvisible,
|
|
bool iswooden,
|
|
bool istarget,
|
|
bool iscrushable,
|
|
bool istiberium,
|
|
bool high,
|
|
bool theater,
|
|
bool walltype,
|
|
bool iscrate) :
|
|
ObjectTypeClass(RTTI_OVERLAYTYPE,
|
|
int(iconset),
|
|
false,
|
|
true,
|
|
false,
|
|
istarget,
|
|
true,
|
|
false,
|
|
false,
|
|
fullname,
|
|
ininame),
|
|
Type(iconset),
|
|
Land(ground),
|
|
DamageLevels(damagelevels),
|
|
DamagePoints(damagepoints),
|
|
IsTheater(theater),
|
|
IsWall(walltype),
|
|
IsHigh(high),
|
|
IsTiberium(istiberium),
|
|
IsWooden(iswooden),
|
|
IsCrate(iscrate),
|
|
IsRadarVisible(isradarvisible)
|
|
{
|
|
IsCrushable = iscrushable;
|
|
}
|
|
|
|
|
|
/***********************************************************************************************
|
|
* OverlayTypeClass::operator new -- Allocate an overlay type class object from pool. *
|
|
* *
|
|
* This will allocate an overlay type class object from the special memory pool that is *
|
|
* for that purpose. *
|
|
* *
|
|
* INPUT: none *
|
|
* *
|
|
* OUTPUT: Returns with a pointer to the overlay type class object allocated. If there is *
|
|
* insufficient memory to fulfill the request, then NULL is returned. *
|
|
* *
|
|
* WARNINGS: none *
|
|
* *
|
|
* HISTORY: *
|
|
* 07/09/1996 JLB : Created. *
|
|
*=============================================================================================*/
|
|
void * OverlayTypeClass::operator new(size_t)
|
|
{
|
|
return(OverlayTypes.Alloc());
|
|
}
|
|
|
|
|
|
/***********************************************************************************************
|
|
* OverlayTypeClass::operator delete -- Returns an overlay type object back to the pool. *
|
|
* *
|
|
* This will return a previously allcoated overaly type object to the special memory *
|
|
* pool that it was allocated from. *
|
|
* *
|
|
* INPUT: pointer -- Pointer to the overlay type class object to return the memory pool. *
|
|
* *
|
|
* OUTPUT: none *
|
|
* *
|
|
* WARNINGS: none *
|
|
* *
|
|
* HISTORY: *
|
|
* 07/09/1996 JLB : Created. *
|
|
*=============================================================================================*/
|
|
void OverlayTypeClass::operator delete(void * pointer)
|
|
{
|
|
OverlayTypes.Free((OverlayTypeClass *)pointer);
|
|
}
|
|
|
|
|
|
/***********************************************************************************************
|
|
* OverlayTypeClass::Init_Heap -- Initialize the overlay type class heap. *
|
|
* *
|
|
* This will initialize the overlay type heap by pre-allocated all overlay types known *
|
|
* to exist. *
|
|
* *
|
|
* INPUT: none *
|
|
* *
|
|
* OUTPUT: none *
|
|
* *
|
|
* WARNINGS: It should be called once and before the rules.ini file is processed. *
|
|
* *
|
|
* HISTORY: *
|
|
* 07/09/1996 JLB : Created. *
|
|
*=============================================================================================*/
|
|
void OverlayTypeClass::Init_Heap(void)
|
|
{
|
|
/*
|
|
** These overlay type class objects must be allocated in the exact order that they
|
|
** are specified in the OverlayType enumeration. This is necessary because the heap
|
|
** allocation block index serves double duty as the type number index.
|
|
*/
|
|
new OverlayTypeClass(Sandbag); // OVERLAY_SANDBAG_WALL
|
|
new OverlayTypeClass(Cyclone); // OVERLAY_CYCLONE_WALL
|
|
new OverlayTypeClass(Brick); // OVERLAY_BRICK_WALL
|
|
new OverlayTypeClass(Barbwire); // OVERLAY_BARBWIRE_WALL
|
|
new OverlayTypeClass(Wood); // OVERLAY_WOOD_WALL
|
|
new OverlayTypeClass(Gold1); // OVERLAY_GOLD1
|
|
new OverlayTypeClass(Gold2); // OVERLAY_GOLD2
|
|
new OverlayTypeClass(Gold3); // OVERLAY_GOLD3
|
|
new OverlayTypeClass(Gold4); // OVERLAY_GOLD4
|
|
new OverlayTypeClass(Gems1); // OVERLAY_GEMS1
|
|
new OverlayTypeClass(Gems2); // OVERLAY_GEMS2
|
|
new OverlayTypeClass(Gems3); // OVERLAY_GEMS3
|
|
new OverlayTypeClass(Gems4); // OVERLAY_GEMS4
|
|
new OverlayTypeClass(V12); // OVERLAY_V12
|
|
new OverlayTypeClass(V13); // OVERLAY_V13
|
|
new OverlayTypeClass(V14); // OVERLAY_V14
|
|
new OverlayTypeClass(V15); // OVERLAY_V15
|
|
new OverlayTypeClass(V16); // OVERLAY_V16
|
|
new OverlayTypeClass(V17); // OVERLAY_V17
|
|
new OverlayTypeClass(V18); // OVERLAY_V18
|
|
new OverlayTypeClass(FlagSpot); // OVERLAY_FLAG_SPOT
|
|
new OverlayTypeClass(WoodCrate); // OVERLAY_WOOD_CRATE
|
|
new OverlayTypeClass(SteelCrate); // OVERLAY_STEEL_CRATE
|
|
new OverlayTypeClass(Fence); // OVERLAY_FENCE
|
|
new OverlayTypeClass(WaterCrate); // OVERLAY_WATER_CRATE
|
|
}
|
|
|
|
|
|
/***********************************************************************************************
|
|
* OverlayTypeClass::One_Time -- Loads all the necessary general overlay shape data. *
|
|
* *
|
|
* This routine should be called once when the game first starts. It will establish *
|
|
* pointers to the graphic data of the overlay objects. *
|
|
* *
|
|
* INPUT: none *
|
|
* *
|
|
* OUTPUT: none *
|
|
* *
|
|
* WARNINGS: none *
|
|
* *
|
|
* HISTORY: *
|
|
* 08/12/1994 JLB : Created. *
|
|
*=============================================================================================*/
|
|
void OverlayTypeClass::One_Time(void)
|
|
{
|
|
}
|
|
|
|
|
|
/***********************************************************************************************
|
|
* OverlayTypeClass::From_Name -- Determine overlay from ASCII name. *
|
|
* *
|
|
* This routine is used to determine the overlay number given only *
|
|
* an ASCII representation. The scenario loader uses this routine *
|
|
* to construct the map from the INI control file. *
|
|
* *
|
|
* INPUT: name -- Pointer to the ASCII name of the overlay. *
|
|
* *
|
|
* OUTPUT: Returns with the overlay number. If the name had no match, *
|
|
* then returns with OVERLAY_NONE. *
|
|
* *
|
|
* WARNINGS: none *
|
|
* *
|
|
* HISTORY: *
|
|
* 05/23/1994 JLB : Created. *
|
|
*=============================================================================================*/
|
|
OverlayType OverlayTypeClass::From_Name(char const * name)
|
|
{
|
|
if (name != NULL) {
|
|
for (OverlayType index = OVERLAY_FIRST; index < OVERLAY_COUNT; index++) {
|
|
if (stricmp(As_Reference(index).IniName, name) == 0) {
|
|
return(index);
|
|
}
|
|
}
|
|
}
|
|
return(OVERLAY_NONE);
|
|
}
|
|
|
|
|
|
/***********************************************************************************************
|
|
* OverlayTypeClass::Occupy_List -- Determines occupation list. *
|
|
* *
|
|
* This routine is used to examine the overlay map and build an *
|
|
* occupation list. This list is used to render a overlay cursor as *
|
|
* well as placement of icon numbers. *
|
|
* *
|
|
* INPUT: placement -- Is this for placement legality checking only? The normal condition *
|
|
* is for marking occupation flags. *
|
|
* *
|
|
* OUTPUT: Returns with a pointer to the overlay occupation list. *
|
|
* *
|
|
* WARNINGS: The return pointer is valid only until the next time that *
|
|
* this routine is called. *
|
|
* *
|
|
* HISTORY: *
|
|
* 05/23/1994 JLB : Created. *
|
|
*=============================================================================================*/
|
|
short const * OverlayTypeClass::Occupy_List(bool) const
|
|
{
|
|
static short _simple[] = {0, REFRESH_EOL};
|
|
|
|
return(_simple);
|
|
}
|
|
|
|
|
|
/***************************************************************************
|
|
* OverlayTypeClass::Radar_Icon -- Gets a pointer to the radar icons *
|
|
* *
|
|
* *
|
|
* INPUT: *
|
|
* *
|
|
* OUTPUT: *
|
|
* *
|
|
* WARNINGS: *
|
|
* *
|
|
* HISTORY: *
|
|
* 04/19/1995 PWG : Created. *
|
|
*=========================================================================*/
|
|
unsigned char * OverlayTypeClass::Radar_Icon(int data) const
|
|
{
|
|
unsigned char * icon = (unsigned char *)Get_Radar_Data(); // Get pointer to radar icons
|
|
if (icon != NULL) icon += (data * 9) + 2; // move icon ptr to correct icon
|
|
return(icon); // Return the correct icon
|
|
}
|
|
|
|
|
|
#ifdef SCENARIO_EDITOR
|
|
/***********************************************************************************************
|
|
* OverlayTypeClass::Display -- Displays a generic representation of overlay. *
|
|
* *
|
|
* This routine is used to display a generic view of the overlay *
|
|
* object. This is necessary for selection in the scenario editor. *
|
|
* *
|
|
* INPUT: x,y -- The coordinates to center the display about. *
|
|
* *
|
|
* window-- The window to base the coordinates upon. *
|
|
* *
|
|
* OUTPUT: none *
|
|
* *
|
|
* WARNINGS: none *
|
|
* *
|
|
* HISTORY: *
|
|
* 05/23/1994 JLB : Created. *
|
|
*=============================================================================================*/
|
|
void OverlayTypeClass::Display(int x, int y, WindowNumberType window, HousesType ) const
|
|
{
|
|
if (Get_Image_Data() != NULL) {
|
|
int frame = 0;
|
|
|
|
if (IsTiberium) {
|
|
frame = 7;
|
|
}
|
|
if (Type == OVERLAY_GEMS1 || Type == OVERLAY_GEMS2 || Type == OVERLAY_GEMS3 || Type == OVERLAY_GEMS4) {
|
|
frame = 2;
|
|
}
|
|
|
|
IsTheaterShape = IsTheater;
|
|
CC_Draw_Shape(Get_Image_Data(), frame, x, y, window, SHAPE_NORMAL|SHAPE_CENTER|SHAPE_WIN_REL);
|
|
IsTheaterShape = false;
|
|
}
|
|
}
|
|
|
|
|
|
/***********************************************************************************************
|
|
* OverlayTypeClass::Prep_For_Add -- Prepares to add overlay to scenario. *
|
|
* *
|
|
* This routine prepares a list of overlay objects so that the *
|
|
* scenario editor can use this list to display a dialog box. The *
|
|
* selection of a overlay object will allow its placement upon the *
|
|
* map. *
|
|
* *
|
|
* INPUT: none *
|
|
* *
|
|
* OUTPUT: none *
|
|
* *
|
|
* WARNINGS: none *
|
|
* *
|
|
* HISTORY: *
|
|
* 08/06/1994 JLB : Created *
|
|
*=============================================================================================*/
|
|
void OverlayTypeClass::Prep_For_Add(void)
|
|
{
|
|
for (OverlayType index = OVERLAY_FIRST; index < OVERLAY_COUNT; index++) {
|
|
OverlayTypeClass const & overlay = As_Reference(index);
|
|
if (overlay.Get_Image_Data() != NULL &&
|
|
!overlay.IsWall &&
|
|
(!overlay.IsTiberium || index == OVERLAY_GOLD1 || index == OVERLAY_GEMS1)) {
|
|
|
|
Map.Add_To_List(&overlay);
|
|
}
|
|
}
|
|
}
|
|
#endif
|
|
|
|
|
|
/***********************************************************************************************
|
|
* OverlayTypeClass::Create_And_Place -- Creates and places a overlay object on the map. *
|
|
* *
|
|
* This support routine is used by the scenario editor to add a overlay object to the map *
|
|
* and to the game. *
|
|
* *
|
|
* INPUT: cell -- The cell to place the overlay object. *
|
|
* *
|
|
* OUTPUT: bool; Was the overlay object placed successfully? *
|
|
* *
|
|
* WARNINGS: none *
|
|
* *
|
|
* HISTORY: *
|
|
* 05/28/1994 JLB : Created. *
|
|
*=============================================================================================*/
|
|
bool OverlayTypeClass::Create_And_Place(CELL cell, HousesType ) const
|
|
{
|
|
if (new OverlayClass(Type, cell)) {
|
|
return(true);
|
|
}
|
|
return(false);
|
|
}
|
|
|
|
|
|
/***********************************************************************************************
|
|
* OverlayTypeClass::Create_One_Of -- Creates an object of this overlay type. *
|
|
* *
|
|
* This routine will create an object of this type. For certain overlay objects, such *
|
|
* as walls, it is actually created as a building. The "building" wall is converted into *
|
|
* a overlay at the moment of placing down on the map. *
|
|
* *
|
|
* INPUT: none *
|
|
* *
|
|
* OUTPUT: Returns with a pointer to the appropriate object for this overlay type. *
|
|
* *
|
|
* WARNINGS: none *
|
|
* *
|
|
* HISTORY: *
|
|
* 06/18/1994 JLB : Created. *
|
|
*=============================================================================================*/
|
|
ObjectClass * OverlayTypeClass::Create_One_Of(HouseClass *) const
|
|
{
|
|
return(new OverlayClass(Type, -1));
|
|
}
|
|
|
|
|
|
/***********************************************************************************************
|
|
* OverlayTypeClass::Draw_It -- Draws the overlay image at location specified. *
|
|
* *
|
|
* This routine will draw the overlay shape at the coordinates specified. It is presumed *
|
|
* that all the underlying layers have already been rendered by the time this routine is *
|
|
* called. *
|
|
* *
|
|
* INPUT: x, y -- Coordinate (upper left) of cell where overlay image is to be drawn. *
|
|
* *
|
|
* data -- Cell specific data that controls the imagery of the overlay. *
|
|
* *
|
|
* OUTPUT: none *
|
|
* *
|
|
* WARNINGS: none *
|
|
* *
|
|
* HISTORY: *
|
|
* 08/12/1994 JLB : Created. *
|
|
*=============================================================================================*/
|
|
void OverlayTypeClass::Draw_It(int x, int y, int data) const
|
|
{
|
|
IsTheaterShape = IsTheater;
|
|
CC_Draw_Shape(Get_Image_Data(), data, Map.TacPixelX+x+(CELL_PIXEL_W>>1), Map.TacPixelY+y+(CELL_PIXEL_H>>1), WINDOW_MAIN, SHAPE_CENTER|SHAPE_WIN_REL|SHAPE_GHOST, NULL, Map.UnitShadow);
|
|
IsTheaterShape = false;
|
|
}
|
|
|
|
|
|
/***********************************************************************************************
|
|
* OverlayTypeClass::Init -- Initialize the overlay graphic data per theater. *
|
|
* *
|
|
* This routine will update the overlay graphic data according to the theater specified. *
|
|
* It is typically called when the scenario is first loaded (theater change). *
|
|
* *
|
|
* INPUT: theater -- The theater to load specific data for. *
|
|
* *
|
|
* OUTPUT: none *
|
|
* *
|
|
* WARNINGS: none *
|
|
* *
|
|
* HISTORY: *
|
|
* 09/01/1994 JLB : Created. *
|
|
*=============================================================================================*/
|
|
void OverlayTypeClass::Init(TheaterType theater)
|
|
{
|
|
if (theater != LastTheater) {
|
|
|
|
for (OverlayType index = OVERLAY_FIRST; index < OVERLAY_COUNT; index++) {
|
|
OverlayTypeClass & overlay = As_Reference(index);
|
|
char fullname[_MAX_FNAME+_MAX_EXT]; // Fully constructed iconset name.
|
|
|
|
if (overlay.IsTheater) {
|
|
_makepath(fullname, NULL, NULL, overlay.IniName, Theaters[theater].Suffix);
|
|
} else {
|
|
_makepath(fullname, NULL, NULL, overlay.IniName, ".SHP");
|
|
}
|
|
overlay.ImageData = MFCD::Retrieve(fullname);
|
|
|
|
IsTheaterShape = overlay.IsTheater; //Tell Build_Frame if this is a theater specific shape
|
|
if (overlay.RadarIcon != NULL) delete[] (char *)overlay.RadarIcon;
|
|
overlay.RadarIcon = Get_Radar_Icon(overlay.Get_Image_Data(), 0, -1, 3);
|
|
IsTheaterShape = false;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
/***********************************************************************************************
|
|
* OverlayTypeClass::As_Reference -- Fetch a reference to the overlay type specified. *
|
|
* *
|
|
* Use this routine to get a reference that corresponds to the overlay type. *
|
|
* *
|
|
* INPUT: type -- The overlay type to fetch a reference to. *
|
|
* *
|
|
* OUTPUT: Returns with a reference to the overlay type specified. *
|
|
* *
|
|
* WARNINGS: Be sure that the overlay type specified is legal. Illegal type value will *
|
|
* result in undefined behavior. *
|
|
* *
|
|
* HISTORY: *
|
|
* 07/09/1996 JLB : Created. *
|
|
*=============================================================================================*/
|
|
OverlayTypeClass & OverlayTypeClass::As_Reference(OverlayType type)
|
|
{
|
|
return(*OverlayTypes.Ptr(type));
|
|
}
|
|
|
|
|
|
/***********************************************************************************************
|
|
* OverlayTypeClass::Coord_Fixup -- Adjust the coord to be legal for assignment. *
|
|
* *
|
|
* This will adjust the coordinate specified so that it will be of legal format to *
|
|
* assign as the coordinate of an overlay. Overlays are always relative to the upper left *
|
|
* corner of the cell, so this routine drops the fractional cell components. *
|
|
* *
|
|
* INPUT: coord -- The coordinate to fixup to be legal for assignment. *
|
|
* *
|
|
* OUTPUT: Returns with a properly fixed up coordinate. *
|
|
* *
|
|
* WARNINGS: none *
|
|
* *
|
|
* HISTORY: *
|
|
* 08/14/1996 JLB : Created. *
|
|
*=============================================================================================*/
|
|
COORDINATE OverlayTypeClass::Coord_Fixup(COORDINATE coord) const
|
|
{
|
|
return Coord_Whole(coord);
|
|
}
|