1530 lines
66 KiB
C++
1530 lines
66 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/IDATA.CPP 3 3/16/97 10:16p Joe_b $ */
|
|
/***********************************************************************************************
|
|
*** 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 : IDATA.CPP *
|
|
* *
|
|
* Programmer : Joe L. Bostic *
|
|
* *
|
|
* Start Date : August 15, 1994 *
|
|
* *
|
|
* Last Update : July 19, 1996 [JLB] *
|
|
* *
|
|
*---------------------------------------------------------------------------------------------*
|
|
* Functions: *
|
|
* InfantryTypeClass::As_Reference -- Fetches a reference to the infantry type specified. *
|
|
* InfantryTypeClass::Create_And_Place -- Creates and places infantry object onto the map. *
|
|
* InfantryTypeClass::Create_One_Of -- Creates an infantry object. *
|
|
* InfantryTypeClass::Display -- Displays a generic infantry object. *
|
|
* InfantryTypeClass::From_Name -- Converts an ASCII name into an infantry type number. *
|
|
* InfantryTypeClass::Full_Name -- Fetches the full name text number. *
|
|
* InfantryTypeClass::Get_Cameo_Data -- Fetches the small cameo shape for sidebar strip. *
|
|
* InfantryTypeClass::InfantryTypeClass -- Constructor for infantry type class objects. *
|
|
* InfantryTypeClass::Init_Heap -- Initialize the infantry type class heap. *
|
|
* InfantryTypeClass::Occupy_List -- Returns with default infantry occupation list. *
|
|
* InfantryTypeClass::One_Time -- Performs any one time processing for infantry system. *
|
|
* InfantryTypeClass::Prep_For_Add -- Prepares the scenario editor for adding of infantry obj*
|
|
* InfantryTypeClass::Read_INI -- Fetches infantry override values from the INI database. *
|
|
* InfantryTypeClass::operator delete -- Frees an infantry type class object. *
|
|
* InfantryTypeClass::operator new -- Allocate an infanty type class object. *
|
|
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
|
|
|
#include "function.h"
|
|
#include "type.h"
|
|
|
|
static DoInfoStruct DogDoControls[DO_COUNT] = {
|
|
{0, 1, 1}, // DO_STAND_READY
|
|
{0, 1, 1}, // DO_STAND_GUARD
|
|
{0, 1, 1}, // DO_PRONE // NA
|
|
{8, 6, 6}, // DO_WALK
|
|
{104, 14,14}, // DO_FIRE_WEAPON
|
|
{0, 0, 0}, // DO_LIE_DOWN // NA
|
|
{56, 6, 6}, // DO_CRAWL
|
|
{0, 0, 0}, // DO_GET_UP
|
|
{104, 14,14}, // DO_FIRE_PRONE
|
|
{216, 18,0}, // DO_IDLE1
|
|
{216, 18,0}, // DO_IDLE2
|
|
{235, 7, 0}, // DO_GUN_DEATH
|
|
{242, 9, 0}, // DO_EXPLOSION_DEATH
|
|
{242, 9, 0}, // DO_EXPLOSION2_DEATH
|
|
{242, 9, 0}, // DO_GRENADE_DEATH
|
|
{251, 14,0}, // DO_FIRE_DEATH
|
|
{0, 1, 0}, // DO_GESTURE1
|
|
{0, 1, 0}, // DO_SALUTE1
|
|
{0, 1, 0}, // DO_GESTURE2
|
|
{0, 1, 0}, // DO_SALUTE2
|
|
{106, 12,14}, // DO_DOG_MAUL
|
|
};
|
|
|
|
|
|
//
|
|
// For the virtual do controls, we are using the TD infantry asset animation frame numbers, take out the -94 frame offsets that were added in RA
|
|
//
|
|
|
|
static DoInfoStruct E1DoControlsVirtual[DO_COUNT] = {
|
|
{0, 1, 1}, // DO_STAND_READY
|
|
{8, 1, 1}, // DO_STAND_GUARD
|
|
{192, 1, 8}, // DO_PRONE
|
|
{16, 6, 6}, // DO_WALK
|
|
{64, 8, 8}, // DO_FIRE_WEAPON
|
|
{128, 2, 2}, // DO_LIE_DOWN
|
|
{144, 4, 4}, // DO_CRAWL
|
|
{176, 2, 2}, // DO_GET_UP
|
|
{192, 6, 8}, // DO_FIRE_PRONE
|
|
{256, 16,0}, // DO_IDLE1
|
|
{272, 16,0}, // DO_IDLE2
|
|
{382, 8, 0}, // DO_GUN_DEATH
|
|
{398, 8, 0}, // DO_EXPLOSION_DEATH
|
|
{398, 8, 0}, // DO_EXPLOSION2_DEATH
|
|
{406, 12,0}, // DO_GRENADE_DEATH
|
|
{418, 18,0}, // DO_FIRE_DEATH
|
|
{436, 3, 3}, // DO_GESTURE1
|
|
{460, 3, 3}, // DO_SALUTE1
|
|
{484, 3, 3}, // DO_GESTURE2
|
|
{508, 3, 3}, // DO_SALUTE2
|
|
{0, 0, 0}, // DO_DOG_MAUL // N/A
|
|
};
|
|
|
|
static DoInfoStruct E2DoControlsVirtual[DO_COUNT] = {
|
|
{0, 1, 1}, // DO_STAND_READY
|
|
{8, 1, 1}, // DO_STAND_GUARD
|
|
{288, 1, 12}, // DO_PRONE
|
|
{16, 6, 6}, // DO_WALK
|
|
{64, 20,20}, // DO_FIRE_WEAPON
|
|
{224, 2, 2}, // DO_LIE_DOWN
|
|
{240, 4, 4}, // DO_CRAWL
|
|
{272, 2, 2}, // DO_GET_UP
|
|
{288, 8, 12}, // DO_FIRE_PRONE
|
|
{384, 16,0}, // DO_IDLE1
|
|
{400, 16,0}, // DO_IDLE2
|
|
{510, 8, 0}, // DO_GUN_DEATH
|
|
{526, 8, 0}, // DO_EXPLOSION_DEATH
|
|
{526, 8, 0}, // DO_EXPLOSION2_DEATH
|
|
{534, 12,0}, // DO_GRENADE_DEATH
|
|
{546, 18,0}, // DO_FIRE_DEATH
|
|
{564, 3, 3}, // DO_GESTURE1
|
|
{588, 3, 3}, // DO_SALUTE1
|
|
{612, 3, 3}, // DO_GESTURE2
|
|
{636, 3, 3}, // DO_SALUTE2
|
|
{0, 0, 0}, // DO_DOG_MAUL // N/A
|
|
};
|
|
|
|
static DoInfoStruct E3DoControlsVirtual[DO_COUNT] = {
|
|
{0, 1, 1}, // DO_STAND_READY
|
|
{8, 1, 1}, // DO_STAND_GUARD
|
|
{192, 1,10}, // DO_PRONE
|
|
{16, 6, 6}, // DO_WALK
|
|
{64, 8, 8}, // DO_FIRE_WEAPON
|
|
{128, 2, 2}, // DO_LIE_DOWN
|
|
{144, 4, 4}, // DO_CRAWL
|
|
{176, 2, 2}, // DO_GET_UP
|
|
{192, 10,10}, // DO_FIRE_PRONE
|
|
{272, 16,0}, // DO_IDLE1
|
|
{288, 16,0}, // DO_IDLE2
|
|
{398, 8, 0}, // DO_GUN_DEATH
|
|
{414, 8, 0}, // DO_EXPLOSION_DEATH
|
|
{414, 8, 0}, // DO_EXPLOSION2_DEATH
|
|
{422, 12,0}, // DO_GRENADE_DEATH
|
|
{434, 18,0}, // DO_FIRE_DEATH
|
|
{452, 3, 3}, // DO_GESTURE1
|
|
{476, 3, 3}, // DO_SALUTE1
|
|
{500, 3, 3}, // DO_GESTURE2
|
|
{524, 3, 3}, // DO_SALUTE2
|
|
{0, 0, 0}, // DO_DOG_MAUL // N/A
|
|
};
|
|
|
|
static DoInfoStruct E4DoControlsVirtual[DO_COUNT] = {
|
|
{0, 1, 1}, // DO_STAND_READY
|
|
{8, 1, 1}, // DO_STAND_GUARD
|
|
{256, 1,16}, // DO_PRONE
|
|
{16, 6, 6}, // DO_WALK
|
|
{64, 16,16}, // DO_FIRE_WEAPON
|
|
{192, 2, 2}, // DO_LIE_DOWN
|
|
{208, 4, 4}, // DO_CRAWL
|
|
{240, 2, 2}, // DO_GET_UP
|
|
{256, 16,16}, // DO_FIRE_PRONE
|
|
{384, 16,0}, // DO_IDLE1
|
|
{400, 16,0}, // DO_IDLE2
|
|
{510, 8, 0}, // DO_GUN_DEATH
|
|
{526, 8, 0}, // DO_EXPLOSION_DEATH
|
|
{526, 8, 0}, // DO_EXPLOSION2_DEATH
|
|
{534, 12,0}, // DO_GRENADE_DEATH
|
|
{546, 18,0}, // DO_FIRE_DEATH
|
|
{564, 3, 3}, // DO_GESTURE1
|
|
{588, 3, 3}, // DO_SALUTE1
|
|
{612, 3, 3}, // DO_GESTURE2
|
|
{636, 3, 3}, // DO_SALUTE2
|
|
{0, 0, 0}, // DO_DOG_MAUL // N/A
|
|
};
|
|
|
|
|
|
|
|
static DoInfoStruct E1DoControls[DO_COUNT] = {
|
|
{0, 1, 1}, // DO_STAND_READY
|
|
{8, 1, 1}, // DO_STAND_GUARD
|
|
{192, 1, 8}, // DO_PRONE
|
|
{16, 6, 6}, // DO_WALK
|
|
{64, 8, 8}, // DO_FIRE_WEAPON
|
|
{128, 2, 2}, // DO_LIE_DOWN
|
|
{144, 4, 4}, // DO_CRAWL
|
|
{176, 2, 2}, // DO_GET_UP
|
|
{192, 6, 8}, // DO_FIRE_PRONE
|
|
{256, 16,0}, // DO_IDLE1
|
|
{272, 16,0}, // DO_IDLE2
|
|
{382-94, 8, 0}, // DO_GUN_DEATH
|
|
{398-94, 8, 0}, // DO_EXPLOSION_DEATH
|
|
{398-94, 8, 0}, // DO_EXPLOSION2_DEATH
|
|
{406-94, 12,0}, // DO_GRENADE_DEATH
|
|
{418-94, 18,0}, // DO_FIRE_DEATH
|
|
{436-94, 3, 3}, // DO_GESTURE1
|
|
{460-94, 3, 3}, // DO_SALUTE1
|
|
{484-94, 3, 3}, // DO_GESTURE2
|
|
{508-94, 3, 3}, // DO_SALUTE2
|
|
{0, 0, 0}, // DO_DOG_MAUL // N/A
|
|
};
|
|
|
|
static DoInfoStruct E2DoControls[DO_COUNT] = {
|
|
{0, 1, 1}, // DO_STAND_READY
|
|
{8, 1, 1}, // DO_STAND_GUARD
|
|
{288, 1, 12}, // DO_PRONE
|
|
{16, 6, 6}, // DO_WALK
|
|
{64, 20,20}, // DO_FIRE_WEAPON
|
|
{224, 2, 2}, // DO_LIE_DOWN
|
|
{240, 4, 4}, // DO_CRAWL
|
|
{272, 2, 2}, // DO_GET_UP
|
|
{288, 8, 12}, // DO_FIRE_PRONE
|
|
{384, 16,0}, // DO_IDLE1
|
|
{400, 16,0}, // DO_IDLE2
|
|
{510-94, 8, 0}, // DO_GUN_DEATH
|
|
{526-94, 8, 0}, // DO_EXPLOSION_DEATH
|
|
{526-94, 8, 0}, // DO_EXPLOSION2_DEATH
|
|
{534-94, 12,0}, // DO_GRENADE_DEATH
|
|
{546-94, 18,0}, // DO_FIRE_DEATH
|
|
{564-94, 3, 3}, // DO_GESTURE1
|
|
{588-94, 3, 3}, // DO_SALUTE1
|
|
{612-94, 3, 3}, // DO_GESTURE2
|
|
{636-94, 3, 3}, // DO_SALUTE2
|
|
{0, 0, 0}, // DO_DOG_MAUL // N/A
|
|
};
|
|
|
|
static DoInfoStruct E3DoControls[DO_COUNT] = {
|
|
{0, 1, 1}, // DO_STAND_READY
|
|
{8, 1, 1}, // DO_STAND_GUARD
|
|
{192, 1,10}, // DO_PRONE
|
|
{16, 6, 6}, // DO_WALK
|
|
{64, 8, 8}, // DO_FIRE_WEAPON
|
|
{128, 2, 2}, // DO_LIE_DOWN
|
|
{144, 4, 4}, // DO_CRAWL
|
|
{176, 2, 2}, // DO_GET_UP
|
|
{192, 10,10}, // DO_FIRE_PRONE
|
|
{272, 16,0}, // DO_IDLE1
|
|
{288, 16,0}, // DO_IDLE2
|
|
{398-94, 8, 0}, // DO_GUN_DEATH
|
|
{414-94, 8, 0}, // DO_EXPLOSION_DEATH
|
|
{414-94, 8, 0}, // DO_EXPLOSION2_DEATH
|
|
{422-94, 12,0}, // DO_GRENADE_DEATH
|
|
{434-94, 18,0}, // DO_FIRE_DEATH
|
|
{452-94, 3, 3}, // DO_GESTURE1
|
|
{476-94, 3, 3}, // DO_SALUTE1
|
|
{500-94, 3, 3}, // DO_GESTURE2
|
|
{524-94, 3, 3}, // DO_SALUTE2
|
|
{0, 0, 0}, // DO_DOG_MAUL // N/A
|
|
};
|
|
|
|
static DoInfoStruct E4DoControls[DO_COUNT] = {
|
|
{0, 1, 1}, // DO_STAND_READY
|
|
{8, 1, 1}, // DO_STAND_GUARD
|
|
{256, 1,16}, // DO_PRONE
|
|
{16, 6, 6}, // DO_WALK
|
|
{64, 16,16}, // DO_FIRE_WEAPON
|
|
{192, 2, 2}, // DO_LIE_DOWN
|
|
{208, 4, 4}, // DO_CRAWL
|
|
{240, 2, 2}, // DO_GET_UP
|
|
{256, 16,16}, // DO_FIRE_PRONE
|
|
{384, 16,0}, // DO_IDLE1
|
|
{400, 16,0}, // DO_IDLE2
|
|
{510-94, 8, 0}, // DO_GUN_DEATH
|
|
{526-94, 8, 0}, // DO_EXPLOSION_DEATH
|
|
{526-94, 8, 0}, // DO_EXPLOSION2_DEATH
|
|
{534-94, 12,0}, // DO_GRENADE_DEATH
|
|
{546-94, 18,0}, // DO_FIRE_DEATH
|
|
{564-94, 3, 3}, // DO_GESTURE1
|
|
{588-94, 3, 3}, // DO_SALUTE1
|
|
{612-94, 3, 3}, // DO_GESTURE2
|
|
{636-94, 3, 3}, // DO_SALUTE2
|
|
{0, 0, 0}, // DO_DOG_MAUL // N/A
|
|
};
|
|
|
|
|
|
static DoInfoStruct E6DoControls[DO_COUNT] = {
|
|
{0, 1, 1}, // DO_STAND_READY
|
|
{8, 1, 1}, // DO_STAND_GUARD
|
|
{82, 1, 4}, // DO_PRONE
|
|
{16, 6, 6}, // DO_WALK
|
|
{0, 0, 0}, // DO_FIRE_WEAPON
|
|
{67, 2, 2}, // DO_LIE_DOWN
|
|
{82, 4, 4}, // DO_CRAWL
|
|
{114, 2, 2}, // DO_GET_UP
|
|
{0, 0, 0}, // DO_FIRE_PRONE
|
|
{130, 16,0}, // DO_IDLE1
|
|
{130, 16,0}, // DO_IDLE2
|
|
{146, 8, 0}, // DO_GUN_DEATH
|
|
{154, 8, 0}, // DO_EXPLOSION_DEATH
|
|
{162, 8, 0}, // DO_EXPLOSION2_DEATH
|
|
{170, 12,0}, // DO_GRENADE_DEATH
|
|
{182, 18,0}, // DO_FIRE_DEATH
|
|
{200, 3, 3}, // DO_GESTURE1
|
|
{224, 3, 3}, // DO_SALUTE1
|
|
{200, 3, 3}, // DO_GESTURE2
|
|
{224, 3, 3}, // DO_SALUTE2
|
|
{0, 0, 0}, // DO_DOG_MAUL // N/A
|
|
};
|
|
|
|
static DoInfoStruct E7DoControls[DO_COUNT] = {
|
|
{0, 1, 1}, // DO_STAND_READY
|
|
{0, 1, 1}, // DO_STAND_GUARD
|
|
{128, 1, 4}, // DO_PRONE
|
|
{8, 6, 6}, // DO_WALK
|
|
{56, 7, 7}, // DO_FIRE_WEAPON
|
|
{113, 2, 2}, // DO_LIE_DOWN
|
|
{128, 4, 4}, // DO_CRAWL
|
|
{161, 2, 2}, // DO_GET_UP
|
|
{176, 7, 7}, // DO_FIRE_PRONE
|
|
{232, 17,0}, // DO_IDLE1
|
|
{249, 13,0}, // DO_IDLE2
|
|
{262, 8, 0}, // DO_GUN_DEATH
|
|
{270, 8, 0}, // DO_EXPLOSION_DEATH
|
|
{278, 8, 0}, // DO_EXPLOSION2_DEATH
|
|
{286, 12,0}, // DO_GRENADE_DEATH
|
|
{298, 18,0}, // DO_FIRE_DEATH
|
|
{0, 1, 0}, // DO_GESTURE1
|
|
{0, 1, 0}, // DO_SALUTE1
|
|
{0, 1, 0}, // DO_GESTURE2
|
|
{0, 1, 0}, // DO_SALUTE2
|
|
{0, 0, 0}, // DO_DOG_MAUL // N/A
|
|
};
|
|
|
|
//Spy
|
|
static DoInfoStruct SpyDoControls[DO_COUNT] = {
|
|
{0, 1, 1}, // DO_STAND_READY
|
|
{8, 1, 1}, // DO_STAND_GUARD
|
|
{144, 1, 4}, // DO_PRONE
|
|
{16, 6, 6}, // DO_WALK
|
|
{64, 8, 8}, // DO_FIRE_WEAPON
|
|
{128, 2, 2}, // DO_LIE_DOWN
|
|
{144, 4, 4}, // DO_CRAWL
|
|
{176, 2, 2}, // DO_GET_UP
|
|
{192, 8, 8}, // DO_FIRE_PRONE
|
|
{256, 14,0}, // DO_IDLE1
|
|
{270, 18,0}, // DO_IDLE2
|
|
{288, 8, 0}, // DO_GUN_DEATH
|
|
{296, 8, 0}, // DO_EXPLOSION_DEATH
|
|
{304, 8, 0}, // DO_EXPLOSION2_DEATH
|
|
{312, 12,0}, // DO_GRENADE_DEATH
|
|
{324, 18,0}, // DO_FIRE_DEATH
|
|
{0, 1, 0}, // DO_GESTURE1
|
|
{0, 1, 0}, // DO_SALUTE1
|
|
{0, 1, 0}, // DO_GESTURE2
|
|
{0, 1, 0}, // DO_SALUTE2
|
|
{0, 0, 0}, // DO_DOG_MAUL // N/A
|
|
};
|
|
|
|
static DoInfoStruct E9DoControls[DO_COUNT] = {
|
|
{0, 1, 1}, // DO_STAND_READY
|
|
{8, 1, 1}, // DO_STAND_GUARD
|
|
{72, 1, 4}, // DO_PRONE
|
|
{8, 6, 6}, // DO_WALK
|
|
{0, 0, 0}, // DO_FIRE_WEAPON
|
|
{56, 2, 2}, // DO_LIE_DOWN
|
|
{72, 4, 4}, // DO_CRAWL
|
|
{108, 2, 2}, // DO_GET_UP
|
|
{0, 0, 0}, // DO_FIRE_PRONE
|
|
{120, 19,0}, // DO_IDLE1
|
|
{120, 19,0}, // DO_IDLE2
|
|
{139, 8, 0}, // DO_GUN_DEATH
|
|
{147, 8, 0}, // DO_EXPLOSION_DEATH
|
|
{155, 8, 0}, // DO_EXPLOSION2_DEATH
|
|
{163, 12,0}, // DO_GRENADE_DEATH
|
|
{175, 18,0}, // DO_FIRE_DEATH
|
|
{0, 1, 0}, // DO_GESTURE1
|
|
{0, 1, 0}, // DO_SALUTE1
|
|
{0, 1, 0}, // DO_GESTURE2
|
|
{0, 1, 0}, // DO_SALUTE2
|
|
{0, 0, 0}, // DO_DOG_MAUL // N/A
|
|
};
|
|
|
|
static DoInfoStruct MedicDoControls[DO_COUNT] = {
|
|
{0, 1, 1}, // DO_STAND_READY
|
|
{0, 1, 1}, // DO_STAND_GUARD
|
|
{130, 1, 4}, // DO_PRONE
|
|
{8, 6, 6}, // DO_WALK
|
|
{56, 28,0}, // DO_FIRE_WEAPON
|
|
{114, 2, 2}, // DO_LIE_DOWN
|
|
{130, 4, 4}, // DO_CRAWL
|
|
{162, 2, 2}, // DO_GET_UP
|
|
{56, 28,0}, // DO_FIRE_PRONE
|
|
{178, 15,0}, // DO_IDLE1
|
|
{178, 15,0}, // DO_IDLE2
|
|
{193, 8, 0}, // DO_GUN_DEATH
|
|
{210, 8, 0}, // DO_EXPLOSION_DEATH
|
|
{202, 8, 0}, // DO_EXPLOSION2_DEATH
|
|
{217, 12,0}, // DO_GRENADE_DEATH
|
|
{229, 18,0}, // DO_FIRE_DEATH
|
|
{0, 1, 0}, // DO_GESTURE1
|
|
{0, 1, 0}, // DO_SALUTE1
|
|
{0, 1, 0}, // DO_GESTURE2
|
|
{0, 1, 0}, // DO_SALUTE2
|
|
{0, 0, 0}, // DO_DOG_MAUL // N/A
|
|
};
|
|
|
|
static DoInfoStruct GeneralDoControls[DO_COUNT] = {
|
|
{0, 1, 1}, // DO_STAND_READY
|
|
{0, 1, 1}, // DO_STAND_GUARD
|
|
{104, 1, 4}, // DO_PRONE
|
|
{8, 6, 6}, // DO_WALK
|
|
{56, 4, 4}, // DO_FIRE_WEAPON
|
|
{88, 2, 2}, // DO_LIE_DOWN
|
|
{104, 4, 4}, // DO_CRAWL
|
|
{136, 2, 2}, // DO_GET_UP
|
|
{152, 4, 4}, // DO_FIRE_PRONE
|
|
{184, 26,0}, // DO_IDLE1
|
|
{184, 26,0}, // DO_IDLE2
|
|
{210, 8, 0}, // DO_GUN_DEATH
|
|
{226, 8, 0}, // DO_EXPLOSION_DEATH
|
|
{218, 8, 0}, // DO_EXPLOSION2_DEATH
|
|
{234, 12,0}, // DO_GRENADE_DEATH
|
|
{246, 18,0}, // DO_FIRE_DEATH
|
|
{0, 1, 0}, // DO_GESTURE1
|
|
{0, 1, 0}, // DO_SALUTE1
|
|
{0, 1, 0}, // DO_GESTURE2
|
|
{0, 1, 0}, // DO_SALUTE2
|
|
{0, 0, 0}, // DO_DOG_MAUL // N/A
|
|
};
|
|
|
|
static DoInfoStruct CivilianDoControls[DO_COUNT] = {
|
|
{0, 1, 1}, // DO_STAND_READY
|
|
{0, 1, 1}, // DO_STAND_GUARD
|
|
{0, 1, 1}, // DO_PRONE // N/A
|
|
{56, 6, 6}, // DO_WALK
|
|
{205-85, 4, 4}, // DO_FIRE_WEAPON
|
|
{0, 1, 1}, // DO_LIE_DOWN // N/A
|
|
{8, 6, 6}, // DO_CRAWL
|
|
{0, 1, 1}, // DO_GET_UP // N/A
|
|
{205-85, 4, 4}, // DO_FIRE_PRONE
|
|
{189-85, 10,0}, // DO_IDLE1
|
|
{199-85, 6, 0}, // DO_IDLE2
|
|
{152, 8, 0}, // DO_GUN_DEATH
|
|
{160, 8, 0}, // DO_EXPLOSION_DEATH
|
|
{160, 8, 0}, // DO_EXPLOSION2_DEATH
|
|
{168, 12,0}, // DO_GRENADE_DEATH
|
|
{180, 18,0}, // DO_FIRE_DEATH
|
|
{0, 1, 0}, // DO_GESTURE1 // N/A
|
|
{0, 1, 0}, // DO_SALUTE1 // N/A
|
|
{0, 1, 0}, // DO_GESTURE2 // N/A
|
|
{0, 1, 0}, // DO_SALUTE2 // N/A
|
|
{0, 0, 0}, // DO_DOG_MAUL // N/A
|
|
};
|
|
|
|
static DoInfoStruct CivilianDoControlsVirtual[DO_COUNT] = {
|
|
{0, 1, 1}, // DO_STAND_READY
|
|
{0, 1, 1}, // DO_STAND_GUARD
|
|
{0, 1, 1}, // DO_PRONE // N/A
|
|
{56, 6, 6}, // DO_WALK
|
|
{205, 4, 4}, // DO_FIRE_WEAPON
|
|
{0, 1, 1}, // DO_LIE_DOWN // N/A
|
|
{8, 6, 6}, // DO_CRAWL
|
|
{0, 1, 1}, // DO_GET_UP // N/A
|
|
{205, 4, 4}, // DO_FIRE_PRONE
|
|
{189, 10,0}, // DO_IDLE1
|
|
{199, 6, 0}, // DO_IDLE2
|
|
{329, 8, 0}, // DO_GUN_DEATH
|
|
{337, 8, 0}, // DO_EXPLOSION_DEATH
|
|
{337, 8, 0}, // DO_EXPLOSION2_DEATH
|
|
{345, 12,0}, // DO_GRENADE_DEATH
|
|
{357, 18,0}, // DO_FIRE_DEATH
|
|
{0, 1, 0}, // DO_GESTURE1 // N/A
|
|
{0, 1, 0}, // DO_SALUTE1 // N/A
|
|
{0, 1, 0}, // DO_GESTURE2 // N/A
|
|
{0, 1, 0}, // DO_SALUTE2 // N/A
|
|
{0, 0, 0}, // DO_DOG_MAUL // N/A
|
|
};
|
|
|
|
static DoInfoStruct EinsteinDoControls[DO_COUNT] = {
|
|
{0, 1, 1}, // DO_STAND_READY
|
|
{0, 1, 1}, // DO_STAND_GUARD
|
|
{0, 1, 1}, // DO_PRONE // N/A
|
|
{56, 6, 6}, // DO_WALK
|
|
{205-92, 4, 4}, // DO_FIRE_WEAPON
|
|
{0, 1, 1}, // DO_LIE_DOWN // N/A
|
|
{8, 6, 6}, // DO_CRAWL
|
|
{0, 1, 1}, // DO_GET_UP // N/A
|
|
{0, 0, 0}, // DO_FIRE_PRONE
|
|
{104, 16,0}, // DO_IDLE1
|
|
{104, 16,0}, // DO_IDLE2
|
|
{212-92, 8, 0}, // DO_GUN_DEATH
|
|
{220-92, 8, 0}, // DO_EXPLOSION_DEATH
|
|
{228-92, 12,0}, // DO_EXPLOSION2_DEATH
|
|
{228-92, 12,0}, // DO_GRENADE_DEATH
|
|
{240-92, 17,0}, // DO_FIRE_DEATH
|
|
{0, 1, 0}, // DO_GESTURE1 // N/A
|
|
{0, 1, 0}, // DO_SALUTE1 // N/A
|
|
{0, 1, 0}, // DO_GESTURE2 // N/A
|
|
{0, 1, 0}, // DO_SALUTE2 // N/A
|
|
{0, 0, 0}, // DO_DOG_MAUL // N/A
|
|
};
|
|
|
|
// Attack dogs
|
|
static InfantryTypeClass const Dog(
|
|
INFANTRY_DOG, // Infantry type number.
|
|
TXT_GUARD_DOG, // Translate name number for infantry type.
|
|
"DOG", // INI name for infantry.
|
|
0x0015, // Vertical offset.
|
|
0x0010, // Primary weapon offset along turret centerline.
|
|
false, // Is this a female type?
|
|
false, // Has crawling animation frames?
|
|
false, // Is this a civilian?
|
|
false, // Does this unit use the override remap table?
|
|
false, // Always use the given name for the infantry?
|
|
false, // Theater specific graphic image?
|
|
PIP_FULL, // Transport pip shape/color to use.
|
|
DogDoControls,
|
|
DogDoControls,
|
|
1, // Frame of projectile launch.
|
|
1, // Frame of projectile launch while prone.
|
|
0 // pointer to override remap table
|
|
);
|
|
|
|
// Minigunners
|
|
static InfantryTypeClass const E1(
|
|
INFANTRY_E1, // Infantry type number.
|
|
TXT_E1, // Translate name number for infantry type.
|
|
"E1", // INI name for infantry.
|
|
0x0035, // Vertical offset.
|
|
0x0010, // Primary weapon offset along turret centerline.
|
|
false, // Is this a female type?
|
|
true, // Has crawling animation frames?
|
|
false, // Is this a civilian?
|
|
false, // Does this unit use the override remap table?
|
|
false, // Always use the given name for the infantry?
|
|
false, // Theater specific graphic image?
|
|
PIP_FULL, // Transport pip shape/color to use.
|
|
E1DoControls,
|
|
E1DoControlsVirtual,
|
|
2, // Frame of projectile launch.
|
|
2, // Frame of projectile launch while prone.
|
|
0 // pointer to override remap table
|
|
);
|
|
|
|
// Grenadiers
|
|
static InfantryTypeClass const E2(
|
|
INFANTRY_E2, // Infantry type number.
|
|
TXT_E2, // Translate name number for infantry type.
|
|
"E2", // INI name for infantry.
|
|
0x0035, // Vertical offset.
|
|
0x0010, // Primary weapon offset along turret centerline.
|
|
false, // Is this a female type?
|
|
true, // Has crawling animation frames?
|
|
false, // Is this a civilian?
|
|
false, // Does this unit use the override remap table?
|
|
false, // Always use the given name for the infantry?
|
|
false, // Theater specific graphic image?
|
|
PIP_FULL, // Transport pip shape/color to use.
|
|
E2DoControls,
|
|
E2DoControlsVirtual,
|
|
14, // Frame of projectile launch.
|
|
6, // Frame of projectile launch while prone.
|
|
0 // pointer to override remap table
|
|
);
|
|
|
|
// Bazooka
|
|
static InfantryTypeClass const E3(
|
|
INFANTRY_E3, // Infantry type number.
|
|
TXT_E3, // Translate name number for infantry type.
|
|
"E3", // INI name for infantry.
|
|
0x0035, // Vertical offset.
|
|
0x0010, // Primary weapon offset along turret centerline.
|
|
false, // Is this a female type?
|
|
true, // Has crawling animation frames?
|
|
false, // Is this a civilian?
|
|
false, // Does this unit use the override remap table?
|
|
false, // Always use the given name for the infantry?
|
|
false, // Theater specific graphic image?
|
|
PIP_FULL, // Transport pip shape/color to use.
|
|
E3DoControls,
|
|
E3DoControlsVirtual,
|
|
3, // Frame of projectile launch.
|
|
3, // Frame of projectile launch while prone.
|
|
0 // pointer to override remap table
|
|
);
|
|
|
|
// Flamethrower
|
|
static InfantryTypeClass const E4(
|
|
INFANTRY_E4, // Infantry type number.
|
|
TXT_E4, // Translate name number for infantry type.
|
|
"E4", // INI name for infantry.
|
|
0x0035, // Vertical offset.
|
|
0x0010, // Primary weapon offset along turret centerline.
|
|
false, // Is this a female type?
|
|
true, // Has crawling animation frames?
|
|
false, // Is this a civilian?
|
|
false, // Does this unit use the override remap table?
|
|
false, // Always use the given name for the infantry?
|
|
false, // Theater specific graphic image?
|
|
PIP_FULL, // Transport pip shape/color to use.
|
|
E4DoControls,
|
|
E4DoControlsVirtual,
|
|
2, // Frame of projectile launch.
|
|
0, // Frame of projectile launch while prone.
|
|
0 // pointer to override remap table
|
|
);
|
|
|
|
// Renovator
|
|
static InfantryTypeClass const E6(
|
|
INFANTRY_RENOVATOR, // Infantry type number.
|
|
TXT_E6, // Translate name number for infantry type.
|
|
"E6", // INI name for infantry.
|
|
0x0035, // Vertical offset.
|
|
0x0010, // Primary weapon offset along turret centerline.
|
|
false, // Is this a female type?
|
|
false, // Has crawling animation frames?
|
|
false, // Is this a civilian?
|
|
false, // Does this unit use the override remap table?
|
|
false, // Always use the given name for the infantry?
|
|
false, // Theater specific graphic image?
|
|
PIP_ENGINEER, // Transport pip shape/color to use.
|
|
E6DoControls,
|
|
E6DoControls,
|
|
3, // Frame of projectile launch.
|
|
3, // Frame of projectile launch while prone.
|
|
0 // pointer to override remap table
|
|
);
|
|
|
|
// Spy
|
|
static InfantryTypeClass const E8(
|
|
INFANTRY_SPY, // Infantry type number.
|
|
TXT_E8, // Translate name number for infantry type.
|
|
"SPY", // INI name for infantry.
|
|
0x0035, // Vertical offset.
|
|
0x0010, // Primary weapon offset along turret centerline.
|
|
false, // Is this a female type?
|
|
false, // Has crawling animation frames?
|
|
false, // Is this a civilian?
|
|
false, // Does this unit use the override remap table?
|
|
false, // Always use the given name for the infantry?
|
|
false, // Theater specific graphic image?
|
|
PIP_ENGINEER, // Transport pip shape/color to use.
|
|
SpyDoControls,
|
|
SpyDoControls,
|
|
3, // Frame of projectile launch.
|
|
3, // Frame of projectile launch while prone.
|
|
0 // pointer to override remap table
|
|
);
|
|
|
|
// Thief
|
|
static InfantryTypeClass const E9(
|
|
INFANTRY_THIEF, // Infantry type number.
|
|
TXT_THIEF, // Translate name number for infantry type.
|
|
"THF", // INI name for infantry.
|
|
0x0035, // Vertical offset.
|
|
0x0010, // Primary weapon offset along turret centerline.
|
|
false, // Is this a female type?
|
|
false, // Has crawling animation frames?
|
|
false, // Is this a civilian?
|
|
false, // Does this unit use the override remap table?
|
|
false, // Always use the given name for the infantry?
|
|
false, // Theater specific graphic image?
|
|
PIP_ENGINEER, // Transport pip shape/color to use.
|
|
E9DoControls,
|
|
E9DoControls,
|
|
3, // Frame of projectile launch.
|
|
3, // Frame of projectile launch while prone.
|
|
0 // pointer to override remap table
|
|
);
|
|
|
|
// Tanya
|
|
static InfantryTypeClass const E7(
|
|
INFANTRY_TANYA, // Infantry type number.
|
|
TXT_E7, // Translate name number for infantry type.
|
|
"E7", // INI name for infantry.
|
|
0x0035, // Vertical offset.
|
|
0x0010, // Primary weapon offset along turret centerline.
|
|
false, // Is this a female type?
|
|
true, // Has crawling animation frames?
|
|
false, // Is this a civilian?
|
|
false, // Does this unit use the override remap table?
|
|
false, // Always use the given name for the infantry?
|
|
false, // Theater specific graphic image?
|
|
PIP_COMMANDO, // Transport pip shape/color to use.
|
|
E7DoControls,
|
|
E7DoControls,
|
|
2, // Frame of projectile launch.
|
|
2, // Frame of projectile launch while prone.
|
|
0 // pointer to override remap table
|
|
);
|
|
|
|
static InfantryTypeClass const Medic(
|
|
INFANTRY_MEDIC, // Infantry type number.
|
|
TXT_MEDIC, // Translate name number for infantry type.
|
|
"MEDI", // INI name for infantry.
|
|
0x0035, // Vertical offset.
|
|
0x0010, // Primary weapon offset along turret centerline.
|
|
false, // Is this a female type?
|
|
true, // Has crawling animation frames?
|
|
false, // Is this a civilian?
|
|
false, // Does this unit use the override remap table?
|
|
false, // Always use the given name for the infantry?
|
|
false, // Theater specific graphic image?
|
|
PIP_ENGINEER, // Transport pip shape/color to use.
|
|
MedicDoControls,
|
|
MedicDoControls,
|
|
25, // Frame of projectile launch.
|
|
25, // Frame of projectile launch while prone.
|
|
0 // pointer to override remap table
|
|
);
|
|
|
|
static InfantryTypeClass const General(
|
|
INFANTRY_GENERAL, // Infantry type number.
|
|
TXT_GENERAL, // Translate name number for infantry type.
|
|
"GNRL", // INI name for infantry.
|
|
0x0035, // Vertical offset.
|
|
0x0010, // Primary weapon offset along turret centerline.
|
|
false, // Is this a female type?
|
|
true, // Has crawling animation frames?
|
|
false, // Is this a civilian?
|
|
false, // Does this unit use the override remap table?
|
|
false, // Always use the given name for the infantry?
|
|
false, // Theater specific graphic image?
|
|
PIP_ENGINEER, // Transport pip shape/color to use.
|
|
GeneralDoControls,
|
|
GeneralDoControls,
|
|
2, // Frame of projectile launch.
|
|
2, // Frame of projectile launch while prone.
|
|
0 // pointer to override remap table
|
|
);
|
|
|
|
// Civilians
|
|
static InfantryTypeClass const C1(
|
|
INFANTRY_C1, // Infantry type number.
|
|
TXT_C1, // Translate name number for infantry type.
|
|
"C1", // INI name for infantry.
|
|
0x0035, // Vertical offset.
|
|
0x0010, // Primary weapon offset along turret centerline.
|
|
false, // Is this a female type?
|
|
false, // Has crawling animation frames?
|
|
true, // Is this a civilian?
|
|
false, // Does this unit use the override remap table?
|
|
true, // Always use the given name for the infantry?
|
|
false, // Theater specific graphic image?
|
|
PIP_CIVILIAN, // Transport pip shape/color to use.
|
|
CivilianDoControls,
|
|
CivilianDoControlsVirtual,
|
|
2, // Frame of projectile launch.
|
|
0, // Frame of projectile launch while prone.
|
|
0 // pointer to override remap table
|
|
);
|
|
|
|
static InfantryTypeClass const C2(
|
|
INFANTRY_C2, // Infantry type number.
|
|
TXT_C2, // Translate name number for infantry type.
|
|
"C2", // INI name for infantry.
|
|
0x0035, // Vertical offset.
|
|
0x0010, // Primary weapon offset along turret centerline.
|
|
false, // Is this a female type?
|
|
false, // Has crawling animation frames?
|
|
true, // Is this a civilian?
|
|
true, // Does this unit use the override remap table?
|
|
true, // Always use the given name for the infantry?
|
|
false, // Theater specific graphic image?
|
|
PIP_CIVILIAN, // Transport pip shape/color to use.
|
|
CivilianDoControls,
|
|
CivilianDoControlsVirtual,
|
|
2, // Frame of projectile launch.
|
|
0, // Frame of projectile launch while prone.
|
|
RemapCiv2 // pointer to override remap table
|
|
);
|
|
|
|
static InfantryTypeClass const C3(
|
|
INFANTRY_C3, // Infantry type number.
|
|
TXT_C3, // Translate name number for infantry type.
|
|
"C3", // INI name for infantry.
|
|
0x0035, // Vertical offset.
|
|
0x0010, // Primary weapon offset along turret centerline.
|
|
true, // Is this a female type?
|
|
false, // Has crawling animation frames?
|
|
true, // Is this a civilian?
|
|
false, // Does this unit use the override remap table?
|
|
true, // Always use the given name for the infantry?
|
|
false, // Theater specific graphic image?
|
|
PIP_CIVILIAN, // Transport pip shape/color to use.
|
|
CivilianDoControls,
|
|
CivilianDoControlsVirtual,
|
|
2, // Frame of projectile launch.
|
|
0, // Frame of projectile launch while prone.
|
|
0 // pointer to override remap table
|
|
);
|
|
|
|
static InfantryTypeClass const C4(
|
|
INFANTRY_C4, // Infantry type number.
|
|
TXT_C4, // Translate name number for infantry type.
|
|
"C4", // INI name for infantry.
|
|
0x0035, // Vertical offset.
|
|
0x0010, // Primary weapon offset along turret centerline.
|
|
true, // Is this a female type?
|
|
false, // Has crawling animation frames?
|
|
true, // Is this a civilian?
|
|
true, // Does this unit use the override remap table?
|
|
true, // Always use the given name for the infantry?
|
|
false, // Theater specific graphic image?
|
|
PIP_CIVILIAN, // Transport pip shape/color to use.
|
|
CivilianDoControls,
|
|
CivilianDoControlsVirtual,
|
|
2, // Frame of projectile launch.
|
|
0, // Frame of projectile launch while prone.
|
|
RemapCiv4 // pointer to override remap table
|
|
);
|
|
|
|
static InfantryTypeClass const C5(
|
|
INFANTRY_C5, // Infantry type number.
|
|
TXT_C5, // Translate name number for infantry type.
|
|
"C5", // INI name for infantry.
|
|
0x0035, // Vertical offset.
|
|
0x0010, // Primary weapon offset along turret centerline.
|
|
false, // Is this a female type?
|
|
false, // Has crawling animation frames?
|
|
true, // Is this a civilian?
|
|
true, // Does this unit use the override remap table?
|
|
true, // Always use the given name for the infantry?
|
|
false, // Theater specific graphic image?
|
|
PIP_CIVILIAN, // Transport pip shape/color to use.
|
|
CivilianDoControls,
|
|
CivilianDoControlsVirtual,
|
|
2, // Frame of projectile launch.
|
|
0, // Frame of projectile launch while prone.
|
|
RemapCiv5 // pointer to override remap table
|
|
);
|
|
|
|
static InfantryTypeClass const C6(
|
|
INFANTRY_C6, // Infantry type number.
|
|
TXT_C6, // Translate name number for infantry type.
|
|
"C6", // INI name for infantry.
|
|
0x0035, // Vertical offset.
|
|
0x0010, // Primary weapon offset along turret centerline.
|
|
false, // Is this a female type?
|
|
false, // Has crawling animation frames?
|
|
true, // Is this a civilian?
|
|
true, // Does this unit use the override remap table?
|
|
true, // Always use the given name for the infantry?
|
|
false, // Theater specific graphic image?
|
|
PIP_CIVILIAN, // Transport pip shape/color to use.
|
|
CivilianDoControls,
|
|
CivilianDoControlsVirtual,
|
|
2, // Frame of projectile launch.
|
|
0, // Frame of projectile launch while prone.
|
|
RemapCiv6 // pointer to override remap table
|
|
);
|
|
|
|
static InfantryTypeClass const C7(
|
|
INFANTRY_C7, // Infantry type number.
|
|
TXT_C7, // Translate name number for infantry type.
|
|
"C7", // INI name for infantry.
|
|
0x0035, // Vertical offset.
|
|
0x0010, // Primary weapon offset along turret centerline.
|
|
false, // Is this a female type?
|
|
false, // Has crawling animation frames?
|
|
true, // Is this a civilian?
|
|
true, // Does this unit use the override remap table?
|
|
true, // Always use the given name for the infantry?
|
|
false, // Theater specific graphic image?
|
|
PIP_CIVILIAN, // Transport pip shape/color to use.
|
|
CivilianDoControls,
|
|
CivilianDoControlsVirtual,
|
|
2, // Frame of projectile launch.
|
|
0, // Frame of projectile launch while prone.
|
|
RemapCiv7 // pointer to override remap table
|
|
);
|
|
|
|
static InfantryTypeClass const C8(
|
|
INFANTRY_C8, // Infantry type number.
|
|
TXT_C8, // Translate name number for infantry type.
|
|
"C8", // INI name for infantry.
|
|
0x0035, // Vertical offset.
|
|
0x0010, // Primary weapon offset along turret centerline.
|
|
false, // Is this a female type?
|
|
false, // Has crawling animation frames?
|
|
true, // Is this a civilian?
|
|
true, // Does this unit use the override remap table?
|
|
true, // Always use the given name for the infantry?
|
|
false, // Theater specific graphic image?
|
|
PIP_CIVILIAN, // Transport pip shape/color to use.
|
|
CivilianDoControls,
|
|
CivilianDoControlsVirtual,
|
|
2, // Frame of projectile launch.
|
|
0, // Frame of projectile launch while prone.
|
|
RemapCiv8 // pointer to override remap table
|
|
);
|
|
|
|
static InfantryTypeClass const C9(
|
|
INFANTRY_C9, // Infantry type number.
|
|
TXT_C9, // Translate name number for infantry type.
|
|
"C9", // INI name for infantry.
|
|
0x0035, // Vertical offset.
|
|
0x0010, // Primary weapon offset along turret centerline.
|
|
false, // Is this a female type?
|
|
false, // Has crawling animation frames?
|
|
true, // Is this a civilian?
|
|
true, // Does this unit use the override remap table?
|
|
true, // Always use the given name for the infantry?
|
|
false, // Theater specific graphic image?
|
|
PIP_CIVILIAN, // Transport pip shape/color to use.
|
|
CivilianDoControls,
|
|
CivilianDoControlsVirtual,
|
|
2, // Frame of projectile launch.
|
|
0, // Frame of projectile launch while prone.
|
|
RemapCiv9 // pointer to override remap table
|
|
);
|
|
|
|
// Nikoomba
|
|
static InfantryTypeClass const C10(
|
|
INFANTRY_C10, // Infantry type number.
|
|
TXT_C10, // Translate name number for infantry type.
|
|
"C10", // INI name for infantry.
|
|
0x0035, // Vertical offset.
|
|
0x0010, // Primary weapon offset along turret centerline.
|
|
false, // Is this a female type?
|
|
false, // Has crawling animation frames?
|
|
true, // Is this a civilian?
|
|
true, // Does this unit use the override remap table?
|
|
true, // Always use the given name for the infantry?
|
|
false, // Theater specific graphic image?
|
|
PIP_ENGINEER, // Transport pip shape/color to use.
|
|
CivilianDoControls,
|
|
CivilianDoControlsVirtual,
|
|
2, // Frame of projectile launch.
|
|
0, // Frame of projectile launch while prone.
|
|
RemapCiv10 // pointer to override remap table
|
|
);
|
|
|
|
static InfantryTypeClass const Einstein(
|
|
INFANTRY_EINSTEIN, // Infantry type number.
|
|
TXT_EINSTEIN, // Translate name number for infantry type.
|
|
"EINSTEIN", // INI name for infantry.
|
|
0x0035, // Vertical offset.
|
|
0x0010, // Primary weapon offset along turret centerline.
|
|
false, // Is this a female type?
|
|
false, // Has crawling animation frames?
|
|
true, // Is this a civilian?
|
|
false, // Does this unit use the override remap table?
|
|
true, // Always use the given name for the infantry?
|
|
false, // Theater specific graphic image?
|
|
PIP_ENGINEER, // Transport pip shape/color to use.
|
|
EinsteinDoControls,
|
|
EinsteinDoControls,
|
|
0, // Frame of projectile launch.
|
|
0, // Frame of projectile launch while prone.
|
|
0 // pointer to override remap table
|
|
);
|
|
|
|
static InfantryTypeClass const Delphi(
|
|
INFANTRY_DELPHI, // Infantry type number.
|
|
TXT_DELPHI, // Translate name number for infantry type.
|
|
"DELPHI", // INI name for infantry.
|
|
0x0035, // Vertical offset.
|
|
0x0010, // Primary weapon offset along turret centerline.
|
|
false, // Is this a female type?
|
|
false, // Has crawling animation frames?
|
|
true, // Is this a civilian?
|
|
false, // Does this unit use the override remap table?
|
|
true, // Always use the given name for the infantry?
|
|
false, // Theater specific graphic image?
|
|
PIP_ENGINEER, // Transport pip shape/color to use.
|
|
CivilianDoControls,
|
|
CivilianDoControlsVirtual,
|
|
2, // Frame of projectile launch.
|
|
0, // Frame of projectile launch while prone.
|
|
0 // pointer to override remap table
|
|
);
|
|
|
|
static InfantryTypeClass const DrChan(
|
|
INFANTRY_CHAN, // Infantry type number.
|
|
TXT_CHAN, // Translate name number for infantry type.
|
|
"CHAN", // INI name for infantry.
|
|
0x0035, // Vertical offset.
|
|
0x0010, // Primary weapon offset along turret centerline.
|
|
false, // Is this a female type?
|
|
false, // Has crawling animation frames?
|
|
true, // Is this a civilian?
|
|
false, // Does this unit use the override remap table?
|
|
true, // Always use the given name for the infantry?
|
|
false, // Theater specific graphic image?
|
|
PIP_ENGINEER, // Transport pip shape/color to use.
|
|
EinsteinDoControls,
|
|
EinsteinDoControls,
|
|
2, // Frame of projectile launch.
|
|
0, // Frame of projectile launch while prone.
|
|
0 // pointer to override remap table
|
|
);
|
|
|
|
#ifdef FIXIT_CSII // checked - ajw 9/28/98
|
|
|
|
// Shock Trooper
|
|
static InfantryTypeClass const ShockTrooper(
|
|
INFANTRY_SHOCK, // Infantry type number.
|
|
TXT_SHOCKTROOPER, // Translate name number for infantry type.
|
|
"SHOK", // INI name for infantry.
|
|
-0x0010, // Vertical offset.
|
|
0x0038, // Primary weapon offset along turret centerline.
|
|
false, // Is this a female type?
|
|
true, // Has crawling animation frames?
|
|
false, // Is this a civilian?
|
|
false, // Does this unit use the override remap table?
|
|
false, // Always use the given name for the infantry?
|
|
false, // Theater specific graphic image?
|
|
PIP_FULL, // Transport pip shape/color to use.
|
|
E4DoControls,
|
|
E4DoControls,
|
|
2, // Frame of projectile launch.
|
|
0, // Frame of projectile launch while prone.
|
|
0, // pointer to override remap table
|
|
0x0018 // Horizontal offset.
|
|
);
|
|
|
|
|
|
static InfantryTypeClass const Mechanic(
|
|
INFANTRY_MECHANIC, // Infantry type number.
|
|
TXT_MECHANIC, // Translate name number for infantry type.
|
|
"MECH", // INI name for infantry.
|
|
0x0035, // Vertical offset.
|
|
0x0010, // Primary weapon offset along turret centerline.
|
|
false, // Is this a female type?
|
|
true, // Has crawling animation frames?
|
|
false, // Is this a civilian?
|
|
false, // Does this unit use the override remap table?
|
|
false, // Always use the given name for the infantry?
|
|
false, // Theater specific graphic image?
|
|
PIP_ENGINEER, // Transport pip shape/color to use.
|
|
MedicDoControls,
|
|
MedicDoControls,
|
|
25, // Frame of projectile launch.
|
|
25, // Frame of projectile launch while prone.
|
|
0 // pointer to override remap table
|
|
);
|
|
#endif
|
|
|
|
/***********************************************************************************************
|
|
* InfantryTypeClass::InfantryTypeClass -- Constructor for infantry type class objects. *
|
|
* *
|
|
* This routine will construct the infantry type objects. It is use to create the static *
|
|
* infantry types that are used to give each of the infantry objects their characteristics. *
|
|
* *
|
|
* INPUT: see below... *
|
|
* *
|
|
* OUTPUT: none *
|
|
* *
|
|
* WARNINGS: none *
|
|
* *
|
|
* HISTORY: *
|
|
* 09/24/1994 JLB : Created. *
|
|
* 02/16/1996 JLB : Greatly simplified. *
|
|
*=============================================================================================*/
|
|
InfantryTypeClass::InfantryTypeClass (
|
|
InfantryType type,
|
|
int name,
|
|
char const * ininame,
|
|
int verticaloffset,
|
|
int primaryoffset,
|
|
bool is_female,
|
|
bool is_crawling,
|
|
bool is_civilian,
|
|
bool is_remap_override,
|
|
bool is_nominal,
|
|
bool is_theater,
|
|
PipEnum pip,
|
|
DoInfoStruct const * control,
|
|
DoInfoStruct const * virtual_control,
|
|
int firelaunch,
|
|
int pronelaunch,
|
|
unsigned char const * override_remap,
|
|
int horizontaloffset)
|
|
: TechnoTypeClass(RTTI_INFANTRYTYPE,
|
|
int(type),
|
|
name,
|
|
ininame,
|
|
REMAP_NORMAL,
|
|
verticaloffset,
|
|
primaryoffset,
|
|
0x0000,
|
|
0x0000,
|
|
0x0000,
|
|
is_nominal,
|
|
true,
|
|
true,
|
|
true,
|
|
false,
|
|
false,
|
|
is_theater,
|
|
false,
|
|
true,
|
|
true,
|
|
8,
|
|
SPEED_FOOT,
|
|
horizontaloffset),
|
|
IsFemale(is_female),
|
|
IsCrawling(is_crawling),
|
|
IsCapture(false),
|
|
IsFraidyCat(false),
|
|
IsCivilian(is_civilian),
|
|
IsBomber(false),
|
|
IsDog(false),
|
|
IsRemapOverride(is_remap_override),
|
|
Type(type),
|
|
Pip(pip),
|
|
DoControls(control),
|
|
DoControlsVirtual(virtual_control),
|
|
FireLaunch(firelaunch),
|
|
ProneLaunch(pronelaunch),
|
|
OverrideRemap(override_remap)
|
|
{
|
|
/*
|
|
** Forced infantry overrides from the default.
|
|
*/
|
|
IsCrushable = true;
|
|
IsScanner = true;
|
|
IsRepairable = false;
|
|
IsCrew = false;
|
|
Speed = SPEED_FOOT;
|
|
}
|
|
|
|
|
|
/***********************************************************************************************
|
|
* InfantryTypeClass::operator new -- Allocate an infanty type class object. *
|
|
* *
|
|
* This will allocate an infantry type class object from the special memory pool of that *
|
|
* purpose. *
|
|
* *
|
|
* INPUT: none *
|
|
* *
|
|
* OUTPUT: Returns with a pointer to the infantry type class object allocated. If there was *
|
|
* insufficient memory to fulfill the request, then NULL is returned. *
|
|
* *
|
|
* WARNINGS: none *
|
|
* *
|
|
* HISTORY: *
|
|
* 07/11/1996 JLB : Created. *
|
|
*=============================================================================================*/
|
|
void * InfantryTypeClass::operator new(size_t)
|
|
{
|
|
return(InfantryTypes.Alloc());
|
|
}
|
|
|
|
|
|
/***********************************************************************************************
|
|
* InfantryTypeClass::operator delete -- Frees an infantry type class object. *
|
|
* *
|
|
* This will return a previously allocated infantry type class object back to the memory *
|
|
* pool from whence it came. *
|
|
* *
|
|
* INPUT: pointer -- The pointer to the infantry type class object to free. *
|
|
* *
|
|
* OUTPUT: none *
|
|
* *
|
|
* WARNINGS: none *
|
|
* *
|
|
* HISTORY: *
|
|
* 07/11/1996 JLB : Created. *
|
|
*=============================================================================================*/
|
|
void InfantryTypeClass::operator delete(void * pointer)
|
|
{
|
|
InfantryTypes.Free((InfantryTypeClass *)pointer);
|
|
}
|
|
|
|
|
|
/***********************************************************************************************
|
|
* InfantryTypeClass::Init_Heap -- Initialize the infantry type class heap. *
|
|
* *
|
|
* This will pre-allocate all known infantry types. *
|
|
* *
|
|
* INPUT: none *
|
|
* *
|
|
* OUTPUT: none *
|
|
* *
|
|
* WARNINGS: Call this routine once and before the rules.ini file is processed. *
|
|
* *
|
|
* HISTORY: *
|
|
* 07/11/1996 JLB : Created. *
|
|
*=============================================================================================*/
|
|
void InfantryTypeClass::Init_Heap(void)
|
|
{
|
|
/*
|
|
** These infantry type class objects must be allocated in the exact order that they
|
|
** are specified in the InfantryType enumeration. This is necessary because the heap
|
|
** allocation block index serves double duty as the type number index.
|
|
*/
|
|
new InfantryTypeClass(E1);
|
|
new InfantryTypeClass(E2);
|
|
new InfantryTypeClass(E3);
|
|
new InfantryTypeClass(E4);
|
|
new InfantryTypeClass(E6);
|
|
new InfantryTypeClass(E7);
|
|
new InfantryTypeClass(E8);
|
|
new InfantryTypeClass(E9);
|
|
new InfantryTypeClass(Medic);
|
|
new InfantryTypeClass(General);
|
|
new InfantryTypeClass(Dog);
|
|
new InfantryTypeClass(C1);
|
|
new InfantryTypeClass(C2);
|
|
new InfantryTypeClass(C3);
|
|
new InfantryTypeClass(C4);
|
|
new InfantryTypeClass(C5);
|
|
new InfantryTypeClass(C6);
|
|
new InfantryTypeClass(C7);
|
|
new InfantryTypeClass(C8);
|
|
new InfantryTypeClass(C9);
|
|
new InfantryTypeClass(C10);
|
|
new InfantryTypeClass(Einstein);
|
|
new InfantryTypeClass(Delphi);
|
|
new InfantryTypeClass(DrChan);
|
|
#ifdef FIXIT_CSII // checked - ajw 9/28/98
|
|
new InfantryTypeClass(ShockTrooper);
|
|
new InfantryTypeClass(Mechanic);
|
|
#endif
|
|
}
|
|
|
|
|
|
/***********************************************************************************************
|
|
* InfantryTypeClass::Create_One_Of -- Creates an infantry object. *
|
|
* *
|
|
* This creates an infantry object, but does not attempt to place it on the map. It is *
|
|
* typically used by the scenario editor when an object is needed, but the location has *
|
|
* not yet been specified for where it should appear on the map. *
|
|
* *
|
|
* INPUT: house -- The owner of the infantry object. *
|
|
* *
|
|
* OUTPUT: Returns with a pointer to the created infantry object. If an object could not be *
|
|
* created, then NULL is returned. *
|
|
* *
|
|
* WARNINGS: none *
|
|
* *
|
|
* HISTORY: *
|
|
* 09/24/1994 JLB : Created. *
|
|
*=============================================================================================*/
|
|
ObjectClass * InfantryTypeClass::Create_One_Of(HouseClass * house) const
|
|
{
|
|
return(new InfantryClass(Type, house->Class->House));
|
|
}
|
|
|
|
|
|
/***********************************************************************************************
|
|
* InfantryTypeClass::Create_And_Place -- Creates and places infantry object onto the map. *
|
|
* *
|
|
* This routine is used by the scenario editor to create and place an infantry object onto *
|
|
* the map at the location specified. *
|
|
* *
|
|
* INPUT: cell -- The cell location to place the infantry object at. *
|
|
* *
|
|
* house -- The owner of the infantry object. *
|
|
* *
|
|
* OUTPUT: bool; Was the infantry object successfully created and placed at the location *
|
|
* specified? *
|
|
* *
|
|
* WARNINGS: none *
|
|
* *
|
|
* HISTORY: *
|
|
* 09/24/1994 JLB : Created. *
|
|
*=============================================================================================*/
|
|
bool InfantryTypeClass::Create_And_Place(CELL cell, HousesType house) const
|
|
{
|
|
InfantryClass * i = new InfantryClass(Type, house);
|
|
if (i != NULL) {
|
|
COORDINATE coord = Map[cell].Closest_Free_Spot(Cell_Coord(cell));
|
|
if (coord) {
|
|
return(i->Unlimbo(coord, DIR_E));
|
|
} else {
|
|
delete i;
|
|
}
|
|
}
|
|
return(false);
|
|
}
|
|
|
|
|
|
/***********************************************************************************************
|
|
* InfantryTypeClass::Occupy_List -- Returns with default infantry occupation list. *
|
|
* *
|
|
* This routine will return with a cell offset occupation list for a generic infantry *
|
|
* object. This is typically just a single cell since infantry are never bigger than one *
|
|
* cell and this routine presumes the infantry is located in the center of the cell. *
|
|
* *
|
|
* INPUT: placement -- Is this for placement legality checking only? The normal condition *
|
|
* is for marking occupation flags. *
|
|
* *
|
|
* OUTPUT: Returns with a cell offset list for the infantry object as if it were located *
|
|
* in the center of a cell. *
|
|
* *
|
|
* WARNINGS: none *
|
|
* *
|
|
* HISTORY: *
|
|
* 09/24/1994 JLB : Created. *
|
|
*=============================================================================================*/
|
|
short const * InfantryTypeClass::Occupy_List(bool) const
|
|
{
|
|
static short const _list[] = {0, REFRESH_EOL};
|
|
|
|
return(&_list[0]);
|
|
}
|
|
|
|
|
|
#ifdef SCENARIO_EDITOR
|
|
/***********************************************************************************************
|
|
* InfantryTypeClass::Display -- Displays a generic infantry object. *
|
|
* *
|
|
* This routine is used by the scenario editor to display a generic representation of the *
|
|
* infantry object for the scenario editor. It simply draws a single (nice profile) view *
|
|
* of the infantry type. *
|
|
* *
|
|
* INPUT: x,y -- The display coordinates to render the infantry object at. *
|
|
* *
|
|
* window -- The window that the display coordinates are relative to. *
|
|
* *
|
|
* house -- The house colors to use when rendering this infantry object. *
|
|
* *
|
|
* OUTPUT: none *
|
|
* *
|
|
* WARNINGS: none *
|
|
* *
|
|
* HISTORY: *
|
|
* 09/24/1994 JLB : Created. *
|
|
*=============================================================================================*/
|
|
void InfantryTypeClass::Display(int x, int y, WindowNumberType window, HousesType house) const
|
|
{
|
|
if (house != HOUSE_NONE) {
|
|
|
|
int shape = 0;
|
|
void const * ptr = Get_Cameo_Data();
|
|
if (ptr == NULL) {
|
|
ptr = Get_Image_Data();
|
|
shape = 2;
|
|
}
|
|
|
|
CC_Draw_Shape(ptr, shape, x, y, window, SHAPE_NORMAL|SHAPE_CENTER|SHAPE_WIN_REL);
|
|
}
|
|
}
|
|
|
|
|
|
/***********************************************************************************************
|
|
* InfantryTypeClass::Prep_For_Add -- Prepares the scenario editor for adding of infantry object.*
|
|
* *
|
|
* This routine will prepare the scenario editor so that the infantry objects appear on *
|
|
* the object list. *
|
|
* *
|
|
* INPUT: none *
|
|
* *
|
|
* OUTPUT: none *
|
|
* *
|
|
* WARNINGS: none *
|
|
* *
|
|
* HISTORY: *
|
|
* 09/24/1994 JLB : Created. *
|
|
*=============================================================================================*/
|
|
void InfantryTypeClass::Prep_For_Add(void)
|
|
{
|
|
for (InfantryType index = INFANTRY_FIRST; index < INFANTRY_COUNT; index++) {
|
|
Map.Add_To_List(&As_Reference(index));
|
|
}
|
|
}
|
|
#endif
|
|
|
|
|
|
/***********************************************************************************************
|
|
* InfantryTypeClass::From_Name -- Converts an ASCII name into an infantry type number. *
|
|
* *
|
|
* This routine is used to convert the infantry ASCII name as specified into an infantry *
|
|
* type number. This is called from the INI reader routine in the process if creating the *
|
|
* infantry objects needed for the scenario. *
|
|
* *
|
|
* INPUT: name -- The ASCII name to convert into an infantry type number. *
|
|
* *
|
|
* OUTPUT: Returns with the infantry type number that corresponds to the infantry ASCII name *
|
|
* specified. If no match could be found, then INFANTRY_NONE is returned. *
|
|
* *
|
|
* WARNINGS: none *
|
|
* *
|
|
* HISTORY: *
|
|
* 09/24/1994 JLB : Created. *
|
|
*=============================================================================================*/
|
|
InfantryType InfantryTypeClass::From_Name(char const * name)
|
|
{
|
|
if (name != NULL) {
|
|
for (InfantryType classid = INFANTRY_FIRST; classid < INFANTRY_COUNT; classid++) {
|
|
if (stricmp(As_Reference(classid).IniName, name) == 0) {
|
|
return(classid);
|
|
}
|
|
}
|
|
}
|
|
return(INFANTRY_NONE);
|
|
}
|
|
|
|
|
|
/***********************************************************************************************
|
|
* InfantryTypeClass::One_Time -- Performs any one time processing for infantry system. *
|
|
* *
|
|
* This routine will perform one time processing for the infantry type system. This is *
|
|
* generally restricted to loading of the infantry shape data. *
|
|
* *
|
|
* INPUT: none *
|
|
* *
|
|
* OUTPUT: none *
|
|
* *
|
|
* WARNINGS: none *
|
|
* *
|
|
* HISTORY: *
|
|
* 09/24/1994 JLB : Created. *
|
|
*=============================================================================================*/
|
|
void InfantryTypeClass::One_Time(void)
|
|
{
|
|
for (InfantryType index = INFANTRY_FIRST; index < INFANTRY_COUNT; index++) {
|
|
char fullname[_MAX_FNAME+_MAX_EXT];
|
|
InfantryTypeClass const * uclass;
|
|
CCFileClass file;
|
|
|
|
uclass = &As_Reference(index);
|
|
|
|
/*
|
|
** Generic shape for all houses load method.
|
|
*/
|
|
_makepath(fullname, NULL, NULL, uclass->Graphic_Name(), ".SHP");
|
|
|
|
#ifndef NDEBUG
|
|
RawFileClass sfile(fullname);
|
|
if (sfile.Is_Available()) {
|
|
((void const *&)uclass->ImageData) = Load_Alloc_Data(sfile);
|
|
} else {
|
|
((void const *&)uclass->ImageData) = MFCD::Retrieve(fullname);
|
|
}
|
|
#else
|
|
((void const *&)uclass->ImageData) = MFCD::Retrieve(fullname);
|
|
#endif
|
|
|
|
/*
|
|
** The small build image icon sized shapes are always generic.
|
|
*/
|
|
char buffer[_MAX_FNAME];
|
|
sprintf(buffer, "%.4sICON", uclass->Graphic_Name());
|
|
_makepath(fullname, NULL, NULL, buffer, ".SHP");
|
|
|
|
#ifndef NDEBUG
|
|
RawFileClass ifile(fullname);
|
|
if (ifile.Is_Available()) {
|
|
((void const *&)uclass->CameoData) = Load_Alloc_Data(ifile);
|
|
} else {
|
|
((void const *&)uclass->CameoData) = MFCD::Retrieve(fullname);
|
|
}
|
|
#else
|
|
((void const *&)uclass->CameoData) = MFCD::Retrieve(fullname);
|
|
#endif
|
|
}
|
|
}
|
|
|
|
|
|
/***********************************************************************************************
|
|
* InfantryTypeClass::Full_Name -- Fetches the full name text number. *
|
|
* *
|
|
* This routine will fetch the full name text number for this infantry type. It examines *
|
|
* the special custom name flag to determine whether the custom name or the generic name *
|
|
* is to be used. *
|
|
* *
|
|
* INPUT: none *
|
|
* *
|
|
* OUTPUT: Returns with text number for the name to give this infantry type object. *
|
|
* *
|
|
* WARNINGS: none *
|
|
* *
|
|
* HISTORY: *
|
|
* 06/29/1995 JLB : Created. *
|
|
*=============================================================================================*/
|
|
int InfantryTypeClass::Full_Name(void) const
|
|
{
|
|
if (Debug_Map || !IsNominal || Rule.IsNamed || Type == INFANTRY_C10 || Type == INFANTRY_DELPHI || Type == INFANTRY_EINSTEIN) {
|
|
return(TechnoTypeClass::Full_Name());
|
|
}
|
|
return(TXT_CIVILIAN);
|
|
}
|
|
|
|
|
|
/***********************************************************************************************
|
|
* InfantryTypeClass::As_Reference -- Fetches a reference to the infantry type specified. *
|
|
* *
|
|
* Use this routine to convert an infantry type number into a reference to the infantry *
|
|
* type class object it represents. *
|
|
* *
|
|
* INPUT: type -- The infantry type number to convert into a infantry type class object. *
|
|
* *
|
|
* OUTPUT: Returns with a reference to the infantry type class object specified. *
|
|
* *
|
|
* WARNINGS: Be sure that the type parameter is legal, otherwise the results are undefined. *
|
|
* *
|
|
* HISTORY: *
|
|
* 07/11/1996 JLB : Created. *
|
|
*=============================================================================================*/
|
|
InfantryTypeClass & InfantryTypeClass::As_Reference(InfantryType type)
|
|
{
|
|
return(*InfantryTypes.Ptr(type));
|
|
}
|
|
|
|
|
|
/***********************************************************************************************
|
|
* InfantryTypeClass::Read_INI -- Fetches infantry override values from the INI database. *
|
|
* *
|
|
* This routine will retrieve the override values for this infantry type class object from *
|
|
* the INI database specified. *
|
|
* *
|
|
* INPUT: ini -- Reference to the INI database to retrieve the data from. *
|
|
* *
|
|
* OUTPUT: bool; Was the infantry section for this type found and data retrieved from it? *
|
|
* *
|
|
* WARNINGS: none *
|
|
* *
|
|
* HISTORY: *
|
|
* 07/19/1996 JLB : Created. *
|
|
*=============================================================================================*/
|
|
bool InfantryTypeClass::Read_INI(CCINIClass & ini)
|
|
{
|
|
if (TechnoTypeClass::Read_INI(ini)) {
|
|
IsFraidyCat = ini.Get_Bool(Name(), "Fraidycat", IsFraidyCat);
|
|
IsCapture = ini.Get_Bool(Name(), "Infiltrate", IsCapture);
|
|
IsBomber = ini.Get_Bool(Name(), "C4", IsBomber);
|
|
IsDog = ini.Get_Bool(Name(), "IsCanine", IsDog);
|
|
if (IsBomber) IsCapture = true;
|
|
if (IsDog) IsLeader = false;
|
|
return(true);
|
|
}
|
|
return(false);
|
|
}
|
|
|
|
|
|
void InfantryTypeClass::Dimensions(int & width, int & height) const
|
|
{
|
|
#ifdef WIN32
|
|
width = 14;
|
|
height = 20;
|
|
#else
|
|
width = 12;
|
|
height = 16;
|
|
#endif
|
|
} |