Three separate defects, all the same class: a per-mech image is looked up by string, the lookup misses, and nothing says so. Two were pre-existing and live; all three would have been inherited by the six V4H chassis. 1. The atlas was full, so mech id 64 showed another mech. HSH_CreateMFDTextures built a 1024x1024 texture holding one 128x128 tile per chassis, 8 per row, indexed by mech id -- 64 tiles for 65 names. Zeus (id 64) addressed y=1024. On write, DrawBitmapToSurface blits through a GDI DC, so the blit fell outside the clip rect and was discarded. On read, DrawTexture2 divides by tw/th, giving v = 1.000..1.117; the MFD device never sets D3DTSS_ADDRESS so it is D3D7's default WRAP, and that range wrapped to 0.000..0.117 -- exactly tile 0. Targeting a Zeus therefore displayed the Annihilator: not garbage, not black, a clean picture of the wrong mech, which is why it went unnoticed. The atlas is now 1024x2048 (128 tiles). Tile origins are unchanged and the draw derives UVs from pixel coordinates over tw/th, so the taller surface re-normalises automatically: all 64 other chassis sample byte-identical regions, and only Zeus moves -- from the Annihilator's pixels to its own. CreatePixelFormatTexture returns NULL on failure and SetTexture(0,NULL) renders untextured rather than crashing, so on a card that caps texture dimensions at 1024 an unguarded change would have silently blanked all 65 images. It now falls back to the original size, which restores exactly the previous behaviour, and says which size it got in gos-displays.txt. The granted height travels on the device as m_nMechAtlasH because mode 4 gives each of the two panels its own IDirectDraw7 and swaps the texture between them. A capacity guard now logs and skips a tile past the end instead of writing it off-surface and reading back someone else's picture, so this cannot recur silently when the roster grows. 2. Assassin II had no target image at all.5813aeb6renamed hsh/MFD/assassinii.bmp to assassin2.bmp to match texturename[], but mechnames[] is a separate list and still said "assassinii", so the tile was never written and the mech showed whatever the freshly created texture happened to contain. mechnames[5] is now "assassin2"; the two arrays agree on all 65 ids. 3. Behemoth II's cockpit doll texture was missing, and that one is fatal. texturename[12] is "behemothii" but the texture was named behemoth2. It was absent from the loose tree, from textures.hint and from the packed textures.mw4. HUDDamage::Reset -> AddTexture -> MLRTexturePool::Add -> ResourceImagePool::LoadImageGOS resolves content\textures\hud\behemothii.tga, and on a miss LAB_ONLY substitutes a placeholder while Release does STOP("Texture ... could not be found!"). m_MechID there is the player's own mech, so flying a Behemoth II in a Release build should have been a hard stop -- masked in Profile by the placeholder. Three of the four layers already said "behemothii", so the texture was the outlier: behemoth2.tga is renamed to behemothii.tga and its hint page follows. The art is unchanged; it is byte-identical to behemoth.tga, since Behemoth II deliberately inherits Behemoth's doll. Also removed the orphans left by5813aeb6-- hsh/hud/assassinii.bmp, hsh/radar/hud/assassinii.bmp, Content/textures/HUD/Assassinii.tga and the [hud\assassinii] pool page. Nothing referenced them. The two stray dolls were not identical to the assassin2 pair (0.5% and 9.5% of pixels), so coord.cpp row 5 was scored against both first: identical results (MFD 0.925, Radar 0.934), i.e. same component geometry with faint re-encode noise. hsh/Mechs/assassin ii.bmp is deliberately kept -- portraits are keyed by the localised display name, not by texturename[]. Verified: every string-keyed per-mech art lookup now resolves for all 65 chassis -- mechnames[] into hsh/MFD, and texturename[] into hsh/hud, hsh/radar/hud and Content/textures/HUD -- with zero disagreements between the two arrays. The other behemoth2 entries in textures.hint are the mech skin and footstep pages and are untouched; a global rename there would have broken the skin. Needs a Release and Profile rebuild for the code, and a textures.mw4 repack for the hint and art changes. Worth confirming on hardware by targeting a Zeus and an Assassin II, and by flying a Behemoth II in the Release build. Co-authored-by: Claude Opus 5 (Anthropic) <noreply@anthropic.com> Co-authored-by: GitHub Copilot <copilot@github.com>
2264 lines
78 KiB
C++
2264 lines
78 KiB
C++
#include "MW4Headers.hpp"
|
|
#include "hudcomp.hpp"
|
|
#include "hudcomp2.hpp"
|
|
#include "huddamage.hpp"
|
|
#include "vehicle.hpp"
|
|
#include "mech.hpp"
|
|
#include "mechlabheaders.h"
|
|
#include "weapon.hpp"
|
|
#include "mwapplication.hpp"
|
|
#include "..\missionlang\resource.h"
|
|
|
|
//sanghoon begin
|
|
#include <windows.h>
|
|
#include <ddraw.h>
|
|
#include <d3d.h>
|
|
|
|
#include <GameOS\render.hpp>
|
|
extern bool g_bCOOP;
|
|
|
|
// MSL 5.02
|
|
extern float texuv2[LastMechID+1][11][4];
|
|
extern int offset2[LastMechID+1][11][2];
|
|
extern float texuv3[LastMechID+1][11][4];
|
|
extern int offset3[LastMechID+1][11][2];
|
|
|
|
bool g_bMuteMode = false;
|
|
|
|
bool g_bJumpZoom = true;
|
|
bool g_bZoomMode = true;
|
|
bool g_bJumpMode = false;
|
|
bool g_bFlushMode = false;
|
|
bool g_bLightAmpMode = false;
|
|
bool g_bNextTargetMode = false;
|
|
bool g_bCrossTargetMode = false;
|
|
// MSL 5.03 Secondary Damage Display
|
|
int g_nAuxilMode = 0;
|
|
//sanghoon end
|
|
|
|
using namespace MechWarrior4;
|
|
namespace HUDDAMAGE
|
|
{
|
|
const int YOUR_BARHEIGHT = 90;
|
|
const int YOUR_BARWIDTH = 10;
|
|
|
|
const int TARGET_BARHEIGHT = 90;
|
|
const int TARGET_BARWIDTH = 10;
|
|
|
|
const int MAX_FLASH = 10;
|
|
// MSL 5.05 Fix the S1 and S2 swap issue
|
|
const int trans_array[12] = {
|
|
8,5,6,4,2,3,1,0,9,10,7,11
|
|
};
|
|
|
|
// MSL ADD MECH
|
|
const char *texturename[LastMechID+1] = {
|
|
"hud\\annihilator",
|
|
"hud\\archer",
|
|
"hud\\arcticwolf",
|
|
"hud\\ares",
|
|
"hud\\argus",
|
|
"hud\\assassin2",
|
|
"hud\\atlas",
|
|
"hud\\avatar",
|
|
"hud\\awesome",
|
|
"hud\\battlemaster",
|
|
"hud\\battlemasteriic",
|
|
"hud\\behemoth",
|
|
"hud\\behemothii",
|
|
"hud\\blackhawk",
|
|
"hud\\blackknight",
|
|
"hud\\blacklanner",
|
|
"hud\\brigand",
|
|
"hud\\bushwacker",
|
|
"hud\\catapult",
|
|
"hud\\cauldronborn",
|
|
"hud\\chimera",
|
|
"hud\\commando",
|
|
"hud\\cougar",
|
|
"hud\\cyclops",
|
|
"hud\\daishi",
|
|
// "hud\\dasher",
|
|
"hud\\deimos",
|
|
"hud\\dragon",
|
|
"hud\\fafnir",
|
|
"hud\\flea",
|
|
"hud\\gladiator",
|
|
"hud\\grizzly",
|
|
"hud\\hauptmann",
|
|
"hud\\hellhound",
|
|
"hud\\hellspawn",
|
|
"hud\\highlander",
|
|
"hud\\hollanderii",
|
|
"hud\\hunchback",
|
|
"hud\\kodiak",
|
|
"hud\\loki",
|
|
"hud\\longbow",
|
|
"hud\\madcat",
|
|
"hud\\madcat2",
|
|
"hud\\masakari",
|
|
"hud\\mauler",
|
|
"hud\\novacat",
|
|
"hud\\osiris",
|
|
"hud\\owens",
|
|
"hud\\puma",
|
|
"hud\\raven",
|
|
"hud\\rifleman",
|
|
"hud\\ryoken",
|
|
"hud\\shadowcat",
|
|
"hud\\solitaire",
|
|
"hud\\sunder",
|
|
"hud\\templar",
|
|
"hud\\thanatos",
|
|
"hud\\thor",
|
|
"hud\\uller",
|
|
"hud\\urbanmech",
|
|
"hud\\uziel",
|
|
"hud\\victor",
|
|
"hud\\vulture",
|
|
"hud\\warhammer",
|
|
"hud\\wolfhound",
|
|
"hud\\zeus"
|
|
};
|
|
// left leg 0
|
|
// right leg 1
|
|
// left arm 2
|
|
// right arm 3
|
|
// right torso 4
|
|
// left torso 5
|
|
// center torso 6
|
|
// center torso reat 7
|
|
// head 8
|
|
// special 1 9
|
|
// special 2 10
|
|
|
|
// MSL ADD MECH
|
|
const Scalar texuv[LastMechID+1][11][4] = {
|
|
{ {62,52, 79,112},{32,52,49,112},{ 79, 8, 98,56},{19, 8,31,54},{33,13, 50,43},{62,13,78,43},{104,16,125,69},{0,0,0,0},{53,8,59,13},{0,0,0,0},{0,0,0,0}}, // M_Annihilator
|
|
{ {65,57, 86,117},{23,57,44,117},{ 88,56,103,80},{ 5,56,20,80},{18,13, 47,54},{61,13,90,54},{47,17,61,69},{0,0,0,0},{51,5,57,13},{0,0,0,0},{0,0,0,0}}, // M_Archer
|
|
{ {70,60, 95,114},{19,60,44,114},{ 84,44,107,61},{ 6,44,29,61},{22,26, 42,49},{70,26,90,49},{45,23,69,72},{0,0,0,0},{52,18,56,20},{71,7,96,22},{17,7,42,22}}, // M_Arctic Wolf
|
|
{ {59,63, 89,126},{23,63,53,126},{ 80,26, 96,57},{16,26,32,57},{34,13, 55,47},{57,13,78,47},{103,20,125,59},{0,0,0,0},{52,8,60,11},{81,6,100,24},{12,6,31,24}}, // M_Ares
|
|
{ {60,49, 96,113},{17,49,53,113},{ 74, 8,105,42},{18,10,38,36},{40,10, 50,39},{61,10,72,39},{96,49,113,108},{0,0,0,0},{54,1.001f,59,5},{0,0,0,0},{0,0,0,0}}, // M_Argus
|
|
{ {59,63, 89,126},{23,63,53,126},{ 80,26, 96,57},{16,26,32,57},{34,13, 55,47},{57,13,78,47},{103,20,125,59},{0,0,0,0},{52,8,60,11},{81,6,100,24},{0,0,0,0}}, // M_Assassin2
|
|
{ {58,51, 75,115},{37,51,54,115},{ 73,11, 92,51},{20,11,39,51},{42,15, 50,48},{62,15,70,48},{2,8,18,66},{0,0,0,0},{48,3,54,6},{97,37,103,43},{84,65,91,84}}, // M_Atlas
|
|
{ {60,45, 95,114},{20,45,55,114},{ 78,28, 97,44},{18,28,37,44},{38, 9, 50,42},{65,9,77,42},{52,7,63,45},{0,0,0,0},{55,1.001f,60,6},{99,43,126,56},{0,0,0,0}}, // M_Avatar
|
|
{ {62,52, 79,112},{32,52,49,112},{ 79, 8, 98,56},{19, 8,31,54},{33,13, 50,43},{62,13,78,43},{104,16,125,69},{0,0,0,0},{53,8,59,13},{0,0,0,0},{0,0,0,0}}, // M_Awesome
|
|
{ {58,51, 75,115},{37,51,54,115},{ 73,11, 92,51},{20,11,39,51},{42,15, 50,48},{62,15,70,48},{2,8,18,66},{0,0,0,0},{48,3,54,6},{97,37,103,43},{84,65,91,84}}, // M_Battlemaster
|
|
{ {58,51, 75,115},{37,51,54,115},{ 73,11, 92,51},{20,11,39,51},{42,15, 50,48},{62,15,70,48},{2,8,18,66},{0,0,0,0},{48,3,54,6},{97,37,103,43},{0,0,0,0}}, // M_Battlemasteriic
|
|
{ {62,59, 81,125},{34,59,53,125},{ 83, 9,108,54},{ 6, 6,34,54},{37,17, 49,47},{67,17,79,47},{51,6,64,58},{0,0,0,0},{70,10,77,13},{7,71,25,110},{0,0,0,0}}, // M_Behemoth
|
|
{ {62,59, 81,125},{34,59,53,125},{ 83, 9,108,54},{ 6, 6,34,54},{37,17, 49,47},{67,17,79,47},{51,6,64,58},{0,0,0,0},{70,10,77,13},{7,71,25,110},{0,0,0,0}}, // M_BehemothII
|
|
{ {59,63, 89,126},{23,63,53,126},{ 80,26, 96,57},{16,26,32,57},{34,13, 55,47},{57,13,78,47},{103,20,125,59},{0,0,0,0},{52,8,60,11},{81,6,100,24},{12,6,31,24}}, // M_Blackhawk
|
|
{ {62,59, 81,125},{34,59,53,125},{ 83, 9,108,54},{ 6, 6,34,54},{37,17, 49,47},{67,17,79,47},{51,6,64,58},{0,0,0,0},{70,10,77,13},{7,71,25,110},{0,0,0,0}}, // M_blackknight
|
|
{ {59,63, 89,126},{23,63,53,126},{ 80,26, 96,57},{16,26,32,57},{34,13, 55,47},{57,13,78,47},{103,20,125,59},{0,0,0,0},{52,8,60,11},{81,6,100,24},{12,6,31,24}}, // M_blacklanner
|
|
{ {59,63, 89,126},{23,63,53,126},{ 80,26, 96,57},{16,26,32,57},{34,13, 55,47},{57,13,78,47},{103,20,125,59},{0,0,0,0},{52,8,60,11},{81,6,100,24},{12,6,31,24}}, // M_Brigand
|
|
{ {59,61, 89,127},{21,61,52,127},{ 77,30,102,57},{ 8,27,34,58},{36,14, 55,39},{56,11,75,39},{106,21,126,54},{0,0,0,0},{52,5,59,9},{79,2,95,15},{0,0,0,0}}, // M_Bushwacker
|
|
{ {62,66, 95,124},{17,66,51,124},{ 77,10,108,41},{ 6,10,35,41},{38,32, 50,64},{64,32,74,64},{51,28,62,71},{0,0,0,0},{53,21,60,26},{0,0,0,0},{0,0,0,0}}, // M_Catapult
|
|
{ {78,59,108,123},{18,59,49,123},{ 94,25,126,47},{ 4,31,36,53},{36, 9, 57,34},{79,15,91,40},{54,29,78,66},{0,0,0,0},{64,4,71,7},{95,4,113,21},{10,3,30,23}}, // M_CauldronBorn
|
|
{ {58,56, 89,127},{22,56,53,127},{ 89,26,107,45},{ 8,28,23,46},{92,57,120,86},{67,12,86,35},{46,7,67,55},{0,0,0,0},{60,3,66,6},{0,0,0,0},{0,0,0,0}}, // M_Chimera
|
|
{ {57,45, 91,110},{21,45,50,110},{ 90,23,105,57},{ 9,23,22,57},{24,11, 45,42},{67,11,88,42},{108,6,126,57},{0,0,0,0},{52,0,60,4},{0,0,0,0},{0,0,0,0}}, // M_Commando
|
|
{ {57,45, 91,110},{21,45,50,110},{ 90,23,105,57},{ 9,23,22,57},{24,11, 45,42},{67,11,88,42},{108,6,126,57},{0,0,0,0},{52,0,60,4},{0,0,0,0},{0,0,0,0}}, // M_Cougar
|
|
{ {79,58,104,116},{20,58,45,116},{ 98,19,114,55},{ 8,19,24,55},{27,25, 41,55},{80,23,95,55},{51,16,74,74},{0,0,0,0},{58,9,67,11},{34,8,47,20},{0,0,0,0}}, // M_Cyclops
|
|
{ {61,53,100,111},{10,53,49,111},{ 79,17, 94,50},{16,17,31,50},{34,12, 54,51},{56,12,76,51},{103,21,125,65},{0,0,0,0},{52,5,59,11},{103,5,124,14},{0,0,0,0}}, // M_Daishi
|
|
// { {57,45, 91,110},{21,45,50,110},{ 90,23,105,57},{ 9,23,22,57},{24,11, 45,42},{67,11,88,42},{108,6,126,57},{0,0,0,0},{52,0,60,4},{0,0,0,0},{0,0,0,0}}, // M_Dasher
|
|
{ {59,63, 89,126},{23,63,53,126},{ 80,26, 96,57},{16,26,32,57},{34,13, 55,47},{57,13,78,47},{103,20,125,59},{0,0,0,0},{52,8,60,11},{81,6,100,24},{12,6,31,24}}, // M_Deimos
|
|
{ {79,49,100,115},{28,49,49,115},{108,26,124,49},{ 4,24,22,45},{27,11, 49,37},{79,11,100,37},{54,14,74,62},{0,0,0,0},{59,5,69,10},{0,0,0,0},{0,0,0,0}}, // M_Dragon
|
|
{ {77,64,102,123},{34,64,59,123},{109,12,123,45},{10,12,24,45},{28,13, 55,53},{79,13,106,53},{57,13,78,74},{0,0,0,0},{54,5,61,8},{0,0,0,0},{0,0,0,0}}, // M_Fafnir
|
|
{ {93,54,119,119},{ 6,54,32,119},{110,29,115,36},{ 6,29,11,36},{33,16, 50,38},{59,16,76,38},{45,54,64,100},{0,0,0,0},{51,5,58,8},{0,0,0,0},{0,0,0,0}}, // M_Flea
|
|
{ {62,65, 79,117},{27,65,44,117},{ 85,29,101,59},{ 6,28,20,60},{29,26, 39,61},{67,26,77,61},{42,11,64,76},{0,0,0,0},{68,14,77,19},{0,0,0,0},{0,0,0,0}}, // M_Gladiator
|
|
{ {79,58,104,116},{20,58,45,116},{ 98,19,114,55},{ 8,19,24,55},{27,25, 41,55},{80,23,95,55},{51,16,74,74},{0,0,0,0},{58,9,67,11},{34,8,47,20},{0,0,0,0}}, // M_Grizzly
|
|
{ {79,58,104,116},{20,58,45,116},{ 98,19,114,55},{ 8,19,24,55},{27,25, 41,55},{80,23,95,55},{51,16,74,74},{0,0,0,0},{58,9,67,11},{34,8,47,20},{0,0,0,0}}, // M_Hauptmann
|
|
{ {55,48, 84,106},{23,48,52,106},{ 97,30,114,47},{ 8,30,25,47},{31,13, 47,46},{77,14,93,47},{94,58,109,97},{0,0,0,0},{50,6,57,9},{0,0,0,0},{0,0,0,0}}, // M_Hellhound
|
|
{ {66,62, 84,126},{30,62,48,126},{ 79,25, 97,54},{18,25,35,54},{37,19, 56,44},{58,23,77,43},{47,47,67,61},{0,0,0,0},{60,18,66,23},{43,1.001f,57,16},{20,8,37,23}}, // M_Hellspawn
|
|
{ {85,60,105,124},{24,61,44,125},{104,23,123,48},{ 3,21,23,49},{25, 9, 52,46},{75,8,100,45},{55,5,72,66},{0,0,0,0},{79,3,90,6},{0,0,0,0},{0,0,0,0}}, // M_Highlander
|
|
{ {59,63, 89,126},{23,63,53,126},{ 80,26, 96,57},{16,26,32,57},{34,13, 55,47},{57,13,78,47},{103,20,125,59},{0,0,0,0},{52,8,60,11},{81,6,100,24},{12,6,31,24}}, // M_HollanderII
|
|
{ {70,55, 92,112},{23,55,45,112},{109,16,124,47},{ 2,16,17,47},{ 6,55, 18,76},{92,5,104,49},{45,9,68,66},{0,0,0,0},{55,3,61,5},{22,9,38,30},{0,0,0,0}}, // M_Hunchback
|
|
{ {82,66,108,119},{ 8,66,34,119},{ 95,11,117,38},{ 4,26,26,53},{32,16, 51,51},{67,16,86,51},{41,58,74,119},{0,0,0,0},{54,6,61,9},{0,0,0,0},{0,0,0,0}}, // M_Kodiak
|
|
{ {64,52, 81,114},{32,52,49,114},{ 77,23, 95,52},{20,23,36,52},{38,18, 48,47},{65,13,75,47},{50,16,64,64},{0,0,0,0},{54,10,59,14},{36,7,48,16},{0,0,0,0}}, // M_Loki
|
|
{ {76,55, 96,119},{31,55,51,119},{102,18,126,42},{ 2,18,26,42},{28,15, 48,46},{78,15,98,46},{52,11,73,65},{0,0,0,0},{76,5,85,8},{0,0,0,0},{0,0,0,0}}, // M_Longbow
|
|
{ {59,63, 89,126},{23,63,53,126},{ 80,26, 96,57},{16,26,32,57},{34,13, 55,47},{57,13,78,47},{103,20,125,59},{0,0,0,0},{52,8,60,11},{81,6,100,24},{12,6,31,24}}, // M_Madcat
|
|
{ {67,53, 98,111},{16,53,47,111},{ 75,34, 95,51},{19,34,39,51},{40,15, 56,50},{58,15,74,50},{47,66,67,109},{0,0,0,0},{53,9,61,13},{19,4,36,25},{78,4,95,25}}, // M_Madcat_MKII
|
|
{ {75,51,120,114},{ 8,51,53,114},{ 99,10,126,43},{ 2,10,29,43},{41,15, 55,49},{73,15,87,49},{56,15,72,66},{0,0,0,0},{58,6,70,10},{0,0,0,0},{0,0,0,0}}, // M_Masakari
|
|
{ {67,56, 87,112},{24,56,44,112},{ 84, 7,100,54},{11, 7,27,54},{31, 5, 51,52},{60,5,80,52},{47,58,64,101},{0,0,0,0},{52,11,59,15},{0,0,0,0},{0,0,0,0}}, // M_Mauler
|
|
{ {62,63, 84,128},{29,63,51,128},{ 79,11,101,49},{12,11,34,49},{35,16, 47,44},{66,16,78,44},{48,11,65,62},{0,0,0,0},{52,4,61,7},{0,0,0,0},{0,0,0,0}}, // M_Novacat
|
|
{ {66,63, 85,124},{27,63,46,124},{ 84,17, 98,40},{15,23,28,38},{30,17, 43,46},{69,17,82,46},{45,14,67,57},{0,0,0,0},{53,8,59,12},{8,4,24,11},{48,59,64,66}}, // M_Osiris
|
|
{ {75,54,104,112},{21,54,50,112},{ 97,17,120,45},{ 5,17,28,45},{30,29, 47,50},{78,29,95,50},{50,12,75,62},{0,0,0,0},{33,17,45,19},{0,0,0,0},{0,0,0,0}}, // M_Owens
|
|
{ {74,54,110,119},{14,54,50,119},{103, 5,123,45},{ 2, 5,22,45},{26, 5, 45,35},{79,5,98,35},{49,5,74,50},{0,0,0,0},{56,59,68,65},{0,0,0,0},{0,0,0,0}}, // M_Puma
|
|
{ {67,45, 90,114},{23,45,46,114},{ 79, 7, 99,31},{13, 7,33,22},{36,11, 56,42},{57,11,77,42},{46,66,67,111},{0,0,0,0},{54,4,59,9},{0,0,0,0},{0,0,0,0}}, // M_Raven
|
|
{ {59,63, 89,126},{23,63,53,126},{ 80,26, 96,57},{16,26,32,57},{34,13, 55,47},{57,13,78,47},{103,20,125,59},{0,0,0,0},{52,8,60,11},{81,6,100,24},{12,6,31,24}}, // M_Rifleman
|
|
{ {54,57, 83,125},{21,57,50,125},{ 77,14, 97,52},{17,14,37,52},{39,15, 56,41},{58,15,75,41},{87,60,123,103},{0,0,0,0},{53,7,61,11},{0,0,0,0},{0,0,0,0}}, // M_Ryoken
|
|
{ {67,42,103,114},{11,42,47,114},{ 79,21,104,40},{ 9,21,35,40},{37, 7, 49,39},{65,10,77,39},{47,52,67,106},{0,0,0,0},{54,2,60,5},{0,0,0,0},{0,0,0,0}}, // M_Shadowcat
|
|
{ {79,58,104,116},{20,58,45,116},{ 98,19,114,55},{ 8,19,24,55},{27,25, 41,55},{80,23,95,55},{51,16,74,74},{0,0,0,0},{58,9,67,11},{34,8,47,20},{0,0,0,0}}, // M_Solitaire
|
|
{ {70,50, 90,117},{23,50,43,117},{102,22,122,43},{ 5,22,25,43},{28, 8, 43,42},{70,8,85,42},{46,5,67,62},{0,0,0,0},{90,8,97,11},{0,0,0,0},{0,0,0,0}}, // M_Sunder
|
|
{ {65,57, 86,117},{23,57,44,117},{ 88,56,103,80},{ 5,56,20,80},{18,13, 47,54},{61,13,90,54},{47,17,61,69},{0,0,0,0},{51,5,57,13},{0,0,0,0},{0,0,0,0}}, // M_Templar
|
|
{ {64,48, 84,115},{31,48,51,115},{ 84,12,104,44},{11,12,31,44},{33, 8, 51,43},{65,8,82,43},{52,7,64,65},{0,0,0,0},{56,1.001f,60,6},{0,0,0,0},{0,0,0,0}}, // M_Thanatos
|
|
{ {64,51, 81,113},{32,51,49,113},{ 78,22, 96,51},{19,22,35,51},{37,17, 50,44},{64,22,76,44},{99,20,114,64},{0,0,0,0},{41,11,48,16},{62,6,77,20},{0,0,0,0}}, // M_Thor
|
|
{ {60,54, 96,126},{18,54,54,126},{101,21,126,54},{ 3,22,34,58},{37,10, 56,34},{80,9,99,33},{58,17,78,52},{0,0,0,0},{64,10,72,13},{0,0,0,0},{0,0,0,0}}, // M_Uller
|
|
{ {60,54, 96,126},{18,54,54,126},{101,21,126,54},{ 3,22,34,58},{37,10, 56,34},{80,9,99,33},{58,17,78,52},{0,0,0,0},{64,10,72,13},{0,0,0,0},{0,0,0,0}}, // M_Urbanmech
|
|
{ {69,52, 96,114},{17,52,44,114},{ 88,10,109,41},{ 6,10,25,49},{30, 9, 46,49},{69,9,83,49},{46,11,69,47},{0,0,0,0},{53,2,61,6},{46,48,67,72},{0,0,0,0}}, // M_Uziel
|
|
{ {75,54, 95,118},{31,54,51,118},{ 99,58,116,91},{11,59,28,82},{18,16, 44,48},{81,16,107,48},{49,6,77,67},{0,0,0,0},{34,7,42,12},{0,0,0,0},{0,0,0,0}}, // M_Victor
|
|
{ {60,45, 95,114},{20,45,55,114},{ 78,28, 97,44},{18,28,37,44},{38, 9, 50,42},{65,9,77,42},{52,7,63,45},{0,0,0,0},{55,1.001f,60,6},{99,43,126,56},{0,0,0,0}}, // M_Vulture
|
|
{ {59,63, 89,126},{23,63,53,126},{ 80,26, 96,57},{16,26,32,57},{34,13, 55,47},{57,13,78,47},{103,20,125,59},{0,0,0,0},{52,8,60,11},{81,6,100,24},{12,6,31,24}}, // M_Warhammer
|
|
{ {66,55, 79,116},{34,55,47,116},{ 90,14,103,50},{ 8,15,25,53},{31,21, 41,47},{72,21,82,47},{46,8,66,71},{0,0,0,0},{72,14,80,16},{0,0,0,0},{0,0,0,0}}, // M_Wolfhound
|
|
{ {78,53,101,114},{20,53,43,114},{106,47,121,70},{ 2,48,17,66},{ 7, 9, 33,43},{84,9,110,43},{42,4,71,63},{0,0,0,0},{75,13,82,17},{0,0,0,0},{0,0,0,0}} // M_Zeus
|
|
|
|
|
|
};
|
|
// MSL ADD MECH
|
|
const int offset[LastMechID+1][11][2] = {
|
|
{ {62,52},{32,52},{78, 8},{20, 8},{33,13},{62,13},{46,16},{0,0},{53,20},{ 0, 0},{ 0, 0}}, // M_Annihilator
|
|
{ {62,53},{33,53},{84,36},{17,36},{22, 9},{65, 9},{51,13},{0,0},{55,19},{ 0, 0},{ 0, 0}}, // M_Archer
|
|
{ {70,56},{19,56},{75,33},{15,33},{28,22},{65,22},{45,19},{0,0},{52,21},{67,11},{21,11}}, // M_Arctic Wolf
|
|
{ {58,49},{24,49},{80,26},{16,26},{34,13},{57,13},{45,20},{0,0},{52,23},{72, 6},{21, 6}}, // M_Ares
|
|
{ {60,49},{17,49},{74, 8},{18,10},{40,10},{61,10},{48, 6},{0,0},{54,13},{ 0, 0},{ 0, 0}}, // M_Argus
|
|
{ {58,49},{24,49},{80,26},{16,26},{34,13},{57,13},{45,20},{0,0},{52,23},{72, 6},{ 0, 0}}, // M_Assassin2
|
|
{ {58,51},{37,51},{72,11},{21,11},{42,15},{62,15},{49, 8},{0,0},{48,13},{39,37},{69,50}}, // M_Atlas
|
|
{ {60,45},{20,45},{78,28},{18,28},{38, 9},{65, 9},{52, 7},{0,0},{55, 4},{44,43},{ 0, 0}}, // M_Avatar
|
|
{ {62,52},{32,52},{78, 8},{20, 8},{33,13},{62,13},{46,16},{0,0},{53,20},{ 0, 0},{ 0, 0}}, // M_Awesome
|
|
{ {58,51},{37,51},{72,11},{21,11},{42,15},{62,15},{49, 8},{0,0},{48,13},{39,37},{69,50}}, // M_Battlemaster
|
|
{ {58,51},{37,51},{72,11},{21,11},{42,15},{62,15},{49, 8},{0,0},{48,13},{39,37},{ 0, 0}}, // M_BattlemasterIIc
|
|
{ {62,49},{34,49},{78, 9},{ 9, 6},{39,17},{64,17},{51, 6},{0,0},{54,10},{ 8, 6},{ 0, 0}}, // M_Behemoth
|
|
{ {62,49},{34,49},{78, 9},{ 9, 6},{39,17},{64,17},{51, 6},{0,0},{54,10},{ 8, 6},{ 0, 0}}, // M_BehemothII
|
|
{ {58,49},{24,49},{80,26},{16,26},{34,13},{57,13},{45,20},{0,0},{52,23},{72, 6},{21, 6}}, // M_Blackhawk
|
|
{ {62,49},{34,49},{78, 9},{ 9, 6},{39,17},{64,17},{51, 6},{0,0},{54,10},{ 8, 6},{ 0, 0}}, // M_Blackknight
|
|
{ {58,49},{24,49},{80,26},{16,26},{34,13},{57,13},{45,20},{0,0},{52,23},{72, 6},{21, 6}}, // M_Blacklanner
|
|
{ {58,49},{24,49},{80,26},{16,26},{34,13},{57,13},{45,20},{0,0},{52,23},{72, 6},{21, 6}}, // M_Brigand
|
|
{ {59,44},{21,44},{77,30},{ 8,27},{36,14},{56,11},{46,21},{0,0},{52,27},{69, 2},{ 0, 0}}, // M_Bushwacker
|
|
{ {61,57},{17,57},{67,10},{16,10},{38,32},{64,32},{51,28},{0,0},{53,33},{ 0, 0},{ 0, 0}}, // M_Catapult
|
|
{ {60,52},{24,52},{80,33},{ 3,34},{35,26},{69,26},{47,29},{0,0},{59,39},{73,15},{22,13}}, // M_CauldronBorn
|
|
{ {58,43},{22,43},{79,25},{19,27},{27, 7},{67,12},{46,10},{0,0},{60,10},{ 0, 0},{ 0, 0}}, // M_Chimera
|
|
{ {57,45},{21,45},{90,23},{ 9,23},{24,11},{67,11},{48, 6},{0,0},{52,16},{ 0, 0},{ 0, 0}}, // M_Commando
|
|
{ {57,45},{21,45},{90,23},{ 9,23},{24,11},{67,11},{48, 6},{0,0},{52,16},{ 0, 0},{ 0, 0}}, // M_Cougar
|
|
{ {64,55},{23,55},{80,22},{17,22},{34,23},{64,21},{45,13},{0,0},{52,21},{34,10},{ 0, 0}}, // M_Cyclops
|
|
{ {61,53},{10,53},{78,17},{17,17},{34,12},{56,12},{45,21},{0,0},{52,29},{58, 5},{ 0, 0}}, // M_Daishi
|
|
// { {57,45},{21,45},{90,23},{ 9,23},{24,11},{67,11},{48, 6},{0,0},{52,16},{ 0, 0},{ 0, 0}}, // M_Dasher
|
|
{ {58,51},{24,51},{80,28},{16,28},{34,15},{57,15},{45,22},{0,0},{52,25},{72, 8},{21, 8}}, // M_Deimos
|
|
{ {66,49},{33,49},{78,26},{21,24},{29,11},{69,11},{50,14},{0,0},{55,19},{ 0, 0},{ 0, 0}}, // M_Dragon
|
|
{ {60,55},{30,55},{91,12},{10,12},{23,13},{65,13},{47,13},{0,0},{54,39},{ 0, 0},{ 0, 0}}, // M_Fafnir
|
|
{ {62,43},{21,43},{69,29},{35,29},{33,16},{59,16},{45,13},{0,0},{51,27},{ 0, 0},{ 0, 0}}, // M_Flea
|
|
{ {62,61},{35,61},{73,27},{26,27},{40,24},{64,24},{46, 9},{0,0},{53,25},{ 0, 0},{ 0, 0}}, // M_Gladiator
|
|
{ {64,55},{23,55},{80,22},{17,22},{34,23},{64,21},{45,13},{0,0},{52,21},{34,10},{ 0, 0}}, // M_Grizzly
|
|
{ {64,55},{23,55},{80,22},{17,22},{34,23},{64,21},{45,13},{0,0},{52,21},{34,10},{ 0, 0}}, // M_Hauptmann
|
|
{ {55,48},{23,48},{76,30},{14,30},{31,14},{60,14},{46,22},{0,0},{50,38},{ 0, 0},{ 0, 0}}, // M_Hellhound
|
|
{ {66,50},{30,50},{79,25},{18,25},{37,19},{58,23},{47,46},{0,0},{44,18},{43, 7},{25, 8}}, // M_Hellspawn
|
|
{ {61,52},{32,52},{79,27},{13,26},{22,13},{64,13},{48, 6},{0,0},{51,11},{ 0, 0},{ 0, 0}}, // M_Highlander
|
|
{ {58,49},{24,49},{80,26},{16,26},{34,13},{57,13},{45,20},{0,0},{52,23},{72, 6},{21, 6}}, // M_HollanderII
|
|
{ {60,55},{31,55},{77,20},{21,20},{36,32},{65, 9},{45, 9},{0,0},{55,13},{35, 9},{ 0, 0}}, // M_Hunchback
|
|
{ {60,60},{29,60},{79,26},{14,26},{31,16},{65,16},{41, 9},{0,0},{54,12},{ 0, 0},{ 0, 0}}, // M_Kodiak
|
|
{ {64,52},{32,52},{77,23},{20,23},{38,18},{65,13},{50,16},{0,0},{54,20},{36, 7},{ 0, 0}}, // M_Loki
|
|
{ {60,49},{31,49},{84,16},{ 3,16},{26,13},{65,13},{45, 9},{0,0},{51,21},{ 0, 0},{ 0, 0}}, // M_Longbow
|
|
{ {58,49},{24,49},{80,26},{16,26},{34,13},{57,13},{45,20},{0,0},{52,23},{72, 6},{21, 6}}, // M_Madcat
|
|
{ {67,53},{16,53},{75,34},{19,34},{40,15},{58,15},{47,26},{0,0},{53,31},{24, 4},{73, 4}}, // M_Madcat_MKII
|
|
{ {62,51},{ 7,51},{78,29},{ 9,29},{34,15},{66,15},{49,15},{0,0},{51,32},{ 0, 0},{ 0, 0}}, // M_Masakari
|
|
{ {59,56},{32,56},{76, 7},{19, 7},{31, 5},{60, 5},{47,18},{0,0},{52,25},{ 0, 0},{ 0, 0}}, // M_Mauler
|
|
{ {62,46},{29,46},{79,11},{12,11},{35,16},{66,16},{48,11},{0,0},{52,14},{ 0, 0},{ 0, 0}}, // M_Novacat
|
|
{ {66,53},{27,53},{84,17},{15,23},{30,17},{69,17},{45,14},{0,0},{53,20},{48, 4},{48,59}}, // M_Osiris
|
|
{ {62,52},{21,52},{82,17},{ 7,17},{30,29},{65,29},{44,12},{0,0},{50,36},{ 0, 0},{ 0, 0}}, // M_Owens
|
|
{ {57,45},{19,45},{83,23},{ 9,23},{25,13},{68,13},{43,13},{0,0},{50,36},{ 0, 0},{ 0, 0}}, // M_Puma
|
|
{ {67,45},{23,45},{69, 7},{20, 7},{36,11},{57,11},{46,16},{0,0},{54,22},{ 0, 0},{ 0, 0}}, // M_Raven
|
|
{ {58,49},{24,49},{80,26},{16,26},{34,13},{57,13},{45,20},{0,0},{52,23},{72, 6},{21, 6}}, // M_Rifleman
|
|
{ {64,53},{21,53},{77,10},{17,10},{39,11},{58,11},{39,24},{0,0},{53,31},{ 0, 0},{ 0, 0}}, // M_Ryoken
|
|
{ {67,42},{11,42},{79,21},{ 9,21},{37, 7},{65,10},{47, 7},{0,0},{54,16},{ 0, 0},{ 0, 0}}, // M_Shadowcat
|
|
{ {64,55},{23,55},{80,22},{17,22},{34,23},{64,21},{45,13},{0,0},{52,21},{34,10},{ 0, 0}}, // M_Solitaire
|
|
{ {64,50},{29,50},{81,22},{12,22},{31, 8},{67, 8},{46, 5},{0,0},{53,21},{ 0, 0},{ 0, 0}}, // M_Sunder
|
|
{ {62,53},{33,53},{84,36},{17,36},{22, 9},{65, 9},{51,13},{0,0},{55,19},{ 0, 0},{ 0, 0}}, // M_Templar
|
|
{ {64,48},{31,48},{84,12},{11,12},{33, 8},{65, 8},{52, 7},{0,0},{56,15},{ 0, 0},{ 0, 0}}, // M_Thanatos
|
|
{ {65,51},{31,51},{78,22},{19,22},{37,17},{64,22},{49,20},{0,0},{41,21},{62, 6},{ 0, 0}}, // M_Thor
|
|
{ {60,40},{18,40},{79,21},{ 4,22},{37,11},{58,11},{47,19},{0,0},{53,23},{ 0, 0},{ 0, 0}}, // M_Uller
|
|
{ {60,40},{18,40},{79,21},{ 4,22},{37,11},{58,11},{47,19},{0,0},{53,23},{ 0, 0},{ 0, 0}}, // M_Urbanmech
|
|
{ {69,52},{17,52},{81,23},{13,23},{30, 9},{69, 9},{46,11},{0,0},{53,35},{46,48},{ 0, 0}}, // M_Uziel
|
|
{ {60,51},{32,51},{78,24},{19,25},{22,16},{64,16},{42, 6},{0,0},{52,15},{ 0, 0},{ 0, 0}}, // M_Victor
|
|
{ {60,45},{20,45},{78,28},{18,28},{38, 9},{65, 9},{52, 7},{0,0},{55, 4},{44,43},{ 0, 0}}, // M_Vulture
|
|
{ {58,49},{24,49},{80,26},{16,26},{34,13},{57,13},{45,20},{0,0},{52,23},{72, 6},{21, 6}}, // M_Warhammer
|
|
{ {66,55},{34,55},{73,14},{23,15},{41,21},{62,21},{46, 8},{0,0},{52,14},{ 0, 0},{ 0, 0}}, // M_Wolfhound
|
|
{ {60,53},{30,53},{77,32},{20,32},{21, 9},{66, 9},{42, 4},{0,0},{53,20},{ 0, 0},{ 0, 0}} // M_Zeus
|
|
};
|
|
}
|
|
|
|
using namespace HUDDAMAGE;
|
|
|
|
HUDDamage::HUDDamage()
|
|
{
|
|
int i;
|
|
|
|
//labels - black background HD LT CT RT LA RA RL LL S1 S2 CTR
|
|
AddTexture ("hud\\hud4",20,115,119,127,127);
|
|
AddTexture ("hud\\hud4",21,129,119,141,127);
|
|
AddTexture ("hud\\hud4",22,143,119,155,127);
|
|
AddTexture ("hud\\hud4",23,157,119,169,127);
|
|
AddTexture ("hud\\hud4",24,171,119,183,127);
|
|
AddTexture ("hud\\hud4",25,185,119,197,127);
|
|
AddTexture ("hud\\hud4",26,199,119,211,127);
|
|
AddTexture ("hud\\hud4",27,213,119,225,127);
|
|
AddTexture ("hud\\hud4",28,229,119,241,127);
|
|
AddTexture ("hud\\hud4",29,243,119,255,127);
|
|
AddTexture ("hud\\hud4",30,229,50,254,58);
|
|
|
|
for (i=20;i<=30;i++)
|
|
{
|
|
m_Textures[i]->BlendMode (gos_BlendDecal);
|
|
}
|
|
|
|
|
|
//labels - white background HD LT CT RT LA RA RL LL S1 S2 CTR
|
|
AddTexture ("hud\\hud4",40,115,110,127,118);
|
|
AddTexture ("hud\\hud4",41,129,110,141,118);
|
|
AddTexture ("hud\\hud4",42,143,110,155,118);
|
|
AddTexture ("hud\\hud4",43,157,110,169,118);
|
|
AddTexture ("hud\\hud4",44,171,110,183,118);
|
|
AddTexture ("hud\\hud4",45,185,110,197,118);
|
|
AddTexture ("hud\\hud4",46,199,110,211,118);
|
|
AddTexture ("hud\\hud4",47,213,110,225,118);
|
|
AddTexture ("hud\\hud4",48,229,110,241,118);
|
|
AddTexture ("hud\\hud4",49,243,110,255,118);
|
|
AddTexture ("hud\\hud4",50,229,41,254,49);
|
|
|
|
// AddTexture ("hud\\hud3",50,232,0,256,57);
|
|
// AddTexture ("hud\\hud3",51,232,67,241,117);
|
|
// AddTexture ("hud\\hud3",52,232,67,241,117);
|
|
|
|
|
|
Size (Point3D (152,133,0));
|
|
Location (Point3D (657,466,0));
|
|
|
|
m_DamageColors[0] = MakeColor(100, 225, 100, 225);
|
|
m_DamageColors[1] = MakeColor(225, 225, 0, 200);
|
|
m_DamageColors[2] = MakeColor(255, 150, 0, 175);
|
|
m_DamageColors[3] = MakeColor(255, 50, 0, 150);
|
|
m_DamageColors[4] = MakeColor(255, 50, 0, 125);
|
|
m_DamageColors[5] = MakeColor(0, 0, 0, 100);
|
|
|
|
Color (MakeColor (0,175,0,150));
|
|
m_DamageFlashTime = 0;
|
|
m_HitFlashTime = 0;
|
|
//sanghoon begin
|
|
VehicleInterface::GetInstance()->hudDamageMode=false;
|
|
//sanghoon end
|
|
m_ArmorMode = VehicleInterface::GetInstance()->hudDamageMode;
|
|
for (i=0;i<MAX_HUD_DAMAGE_ZONE+1;i++)
|
|
{
|
|
m_HitFlashCount[i] = 0;
|
|
m_DamageValues[i] = 0;
|
|
m_ArmorValues[i] = 0;
|
|
}
|
|
m_MechID = 0;
|
|
|
|
m_RearText = new HUDText ();
|
|
MWApplication *app;
|
|
app = MWApplication::GetInstance ();
|
|
m_RearText->UpdateText (app->GetLocString (IDS_HUDREAR));
|
|
m_RearText->SetSize (HUDText::SMALL_SIZE);
|
|
m_RearText->Color (MakeColor (73,231,73,255));
|
|
}
|
|
|
|
HUDDamage::~HUDDamage()
|
|
{
|
|
delete m_RearText;
|
|
}
|
|
|
|
void HUDDamage::SetVehicle(Vehicle *vehicle)
|
|
{
|
|
inherited::SetVehicle (vehicle);
|
|
|
|
if (m_Vehicle.GetCurrent ())
|
|
{
|
|
Mech *mech;
|
|
mech = Cast_Object (Mech *,m_Vehicle.GetCurrent ());
|
|
const Mech__GameModel *model = static_cast<const Mech__GameModel *> (mech->GetGameModel ());
|
|
#if 0
|
|
static int s_nMechID = 0;
|
|
m_MechID = s_nMechID;
|
|
s_nMechID++;
|
|
if (LastMechID < s_nMechID)
|
|
s_nMechID = 0;
|
|
#else
|
|
m_MechID = model->mechID;
|
|
#endif
|
|
}
|
|
else
|
|
m_MechID = 0;
|
|
}
|
|
|
|
void HUDDamage::Reset (void)
|
|
{
|
|
m_DamageFlashTime = 0;
|
|
m_HitFlashTime = 0;
|
|
int i;
|
|
for (i=0;i<MAX_HUD_DAMAGE_ZONE+1;i++)
|
|
{
|
|
m_HitFlashCount[i] = 0;
|
|
m_DamageValues[i] = 0;
|
|
m_ArmorValues[i] = 0;
|
|
}
|
|
Verify (m_MechID >=0);
|
|
Verify (m_MechID <= LastMechID);
|
|
AddTexture (texturename[m_MechID],0,texuv[m_MechID][0][0],texuv[m_MechID][0][1],texuv[m_MechID][0][2],texuv[m_MechID][0][3],128,128); // left leg
|
|
AddTexture (texturename[m_MechID],1,texuv[m_MechID][1][0],texuv[m_MechID][1][1],texuv[m_MechID][1][2],texuv[m_MechID][1][3],128,128); // right leg
|
|
AddTexture (texturename[m_MechID],2,texuv[m_MechID][2][0],texuv[m_MechID][2][1],texuv[m_MechID][2][2],texuv[m_MechID][2][3],128,128); // left arm
|
|
AddTexture (texturename[m_MechID],3,texuv[m_MechID][3][0],texuv[m_MechID][3][1],texuv[m_MechID][3][2],texuv[m_MechID][3][3],128,128); // right arm
|
|
AddTexture (texturename[m_MechID],4,texuv[m_MechID][4][0],texuv[m_MechID][4][1],texuv[m_MechID][4][2],texuv[m_MechID][4][3],128,128); // right torso
|
|
AddTexture (texturename[m_MechID],5,texuv[m_MechID][5][0],texuv[m_MechID][5][1],texuv[m_MechID][5][2],texuv[m_MechID][5][3],128,128); // left torso
|
|
AddTexture (texturename[m_MechID],6,texuv[m_MechID][6][0],texuv[m_MechID][6][1],texuv[m_MechID][6][2],texuv[m_MechID][6][3],128,128); // center torso
|
|
AddTexture ("hud\\hud5",7,220,0,252,50); // center torso rear
|
|
AddTexture (texturename[m_MechID],8,texuv[m_MechID][8][0],texuv[m_MechID][8][1],texuv[m_MechID][8][2],texuv[m_MechID][8][3],128,128); // head
|
|
AddTexture (texturename[m_MechID],9,texuv[m_MechID][9][0],texuv[m_MechID][9][1],texuv[m_MechID][9][2],texuv[m_MechID][9][3],128,128); // special 1
|
|
AddTexture (texturename[m_MechID],10,texuv[m_MechID][10][0],texuv[m_MechID][10][1],texuv[m_MechID][10][2],texuv[m_MechID][10][3],128,128); // special 2
|
|
AddTexture ("hud\\hud5",11,229,68,238,118); // special 1 rear
|
|
AddTexture ("hud\\hud5",12,243,68,254,118); // special 2 rear
|
|
if(!hsh_initialized)
|
|
{
|
|
;
|
|
}
|
|
else
|
|
{
|
|
//sanghoon
|
|
mfd_device.LoadDamageTexture(texturename[m_MechID]);
|
|
radar_device.LoadRadarDamageTexture(texturename[m_MechID]);
|
|
}
|
|
}
|
|
|
|
void HUDDamage::Update (Stuff::Time till)
|
|
{
|
|
if (m_DamageFlashTime == 0)
|
|
m_DamageFlashTime = till;
|
|
if (m_HitFlashTime == 0)
|
|
m_HitFlashTime = till;
|
|
|
|
while (m_DamageFlashTime <= till)
|
|
{
|
|
m_DamageFlash = !m_DamageFlash;
|
|
m_DamageFlashTime += 1.0/6.0;
|
|
}
|
|
|
|
while (m_HitFlashTime <= till)
|
|
{
|
|
int i;
|
|
for (i=0;i<MAX_HUD_DAMAGE_ZONE+1;i++)
|
|
{
|
|
if (m_HitFlashCount[i])
|
|
m_HitFlashCount[i]++;
|
|
if (m_HitFlashCount[i] == MAX_FLASH)
|
|
m_HitFlashCount[i] = 0;
|
|
}
|
|
m_HitFlashTime += 1.0/6.0;
|
|
}
|
|
|
|
inherited::Update (till);
|
|
}
|
|
|
|
void HUDDamage::DamageValue (int values[MAX_HUD_DAMAGE_ZONE+1])
|
|
{
|
|
int i;
|
|
for (i=0;i<MAX_HUD_DAMAGE_ZONE+1;i++)
|
|
{
|
|
m_DamageValues[i] = values[i];
|
|
}
|
|
}
|
|
|
|
void HUDDamage::ArmorValue (Scalar values[MAX_HUD_DAMAGE_ZONE+1],bool firstpass)
|
|
{
|
|
int i;
|
|
for (i=0;i<MAX_HUD_DAMAGE_ZONE+1;i++)
|
|
{
|
|
if ((m_ArmorValues[i] != values[i]) && (!firstpass))
|
|
m_HitFlashCount[i] = 1;
|
|
m_ArmorValues[i] = values[i];
|
|
}
|
|
}
|
|
//sanghoon begin
|
|
|
|
//nst DWORD SH_DamageColor[6]={0xFFFFFFFF,0xFFCCCCCC,0xFF999999,0xFF666666,0xFF333333,0xFF000000};
|
|
const DWORD SH_DamageColor[6]={0xFFFFFFFF,0xFFDDDDDD,0xFFBBBBBB,0xFF999999,0xFF777777,0xFF333333};
|
|
|
|
static const float sm2_texture[][4]=
|
|
{
|
|
{172, 0,231,140},//left leg
|
|
{109, 0,168,140},//right leg
|
|
{ 30,144, 67,246},//left arm
|
|
{ 0, 36, 36,128},//right arm
|
|
{ 37, 24, 66,101},//right torso
|
|
{ 0,132, 28,209},//left torso
|
|
{ 67, 33, 99,125},//center torso
|
|
{0,0,0,0}, //blank rear?
|
|
{ 67, 0, 99, 31},//head
|
|
{0,0,0,0}, //special1
|
|
{0,0,0,0}, //special2
|
|
};
|
|
|
|
static const float sm2_offset[][2]={
|
|
{29*3, 35*3}, //leftleg
|
|
{ 6*3, 35*3}, //rightleg
|
|
{43*3, 11*3}, //leftarm
|
|
{ 0*3, 11*3}, //rightarm
|
|
{12*3, 7*3}, //righttorso
|
|
{33*3, 7*3}, //lefttorso
|
|
{22*3, 10*3}, //centertorso
|
|
{ 0, 0}, //blank rear?
|
|
{22*3, 0*3}, //head
|
|
{ 0, 0}, //special1
|
|
{ 0, 0}, //special2
|
|
};
|
|
|
|
|
|
void RenderAux4SmallMech(int part,DWORD color)
|
|
{
|
|
if(sm2_texture[part][2]!=0){
|
|
mfd_device.DrawTexture(
|
|
sm2_offset[part][0]+320+80,
|
|
sm2_offset[part][1]+150,
|
|
color,
|
|
sm2_texture[part][0],
|
|
sm2_texture[part][1],
|
|
sm2_texture[part][2],
|
|
sm2_texture[part][3]);
|
|
}
|
|
}
|
|
|
|
static const float back_texture[][4]=
|
|
{
|
|
{ 72, 151, 140, 252},//back
|
|
{147, 151, 173, 252},//back right
|
|
{186, 151, 215, 252},//back left
|
|
};
|
|
|
|
static const float back_offset[][2]={
|
|
{534, 66}, //back
|
|
{520,262}, //back right
|
|
{588,262}, //back left
|
|
};
|
|
|
|
void RenderAux5MechBack(int part,DWORD color)
|
|
{
|
|
mfd_device.DrawTexture(
|
|
back_offset[part][0],
|
|
back_offset[part][1],
|
|
color,
|
|
back_texture[part][0],
|
|
back_texture[part][1],
|
|
back_texture[part][2],
|
|
back_texture[part][3]);
|
|
}
|
|
|
|
static char mfd_text_damage_COOP[8][32]={
|
|
"",
|
|
"VIEW MODE",
|
|
"",
|
|
"ARMOR MODE",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
};
|
|
|
|
static char mfd_text_damage[8][32]={
|
|
"MUTE",
|
|
"NEAREST\nENEMY",
|
|
"CROSSHAIR\nTARGET",
|
|
"ARMOR MODE",
|
|
"ZOOM MODE",
|
|
"JUMP MODE",
|
|
"FLUSH MODE",
|
|
"LIGHT AMP MODE",
|
|
};
|
|
|
|
static RECT damage_back_frames[4]={
|
|
{9,49,497,381},
|
|
{504,49,634,183},
|
|
{504,245,566,382},
|
|
{573,245,634,382},
|
|
};
|
|
//sanghoon end
|
|
|
|
void HUDDamage::DrawImplementation(void)
|
|
{
|
|
if(!hsh_initialized)
|
|
{
|
|
Point3D loc,size;
|
|
int i;
|
|
const bartable[10] = {658,671,685,699,713,727,741,755,771,785};
|
|
|
|
loc = Location ();
|
|
|
|
DWORD color = MakeColor (0,32,0,150); // <- (32,32,32,150)
|
|
|
|
{
|
|
my_DrawRect (771,466,799,520,color); // rear
|
|
my_DrawRect (771,523,799,531,color); // rear text
|
|
my_DrawRect (771,534,783,585,color); // left s1
|
|
my_DrawRect (786,534,799,585,color); // right s2
|
|
// my_DrawRect (657,587,799,599,color); // bottom area
|
|
|
|
color = MakeColor (0,126,0,255); // <- (126,126,126,255)
|
|
DrawSpecFrame (771,466,799,520,color); // rear
|
|
DrawSpecFrame (771,523,799,531,color); // rear text
|
|
DrawSpecFrame (771,534,783,585,color); // left s1
|
|
DrawSpecFrame (786,534,799,585,color); // right s2
|
|
// DrawSpecFrame (657,587,799,599,color);
|
|
}
|
|
|
|
color = MakeColor (0,32,0,150); // <- (32,32,32,150)
|
|
if (m_ArmorMode)
|
|
{
|
|
my_DrawRect (658,488,768,586,color); // mech
|
|
my_DrawRect (658,466,768,485,color); // name
|
|
color = MakeColor (0,126,0,255);
|
|
DrawSpecFrame (658,488,768,485,color); // name
|
|
DrawSpecFrame (658,466,768,586,color); // mech
|
|
}
|
|
else
|
|
{
|
|
my_DrawRect (658,466,768,586,color); // mech
|
|
color = MakeColor (0,126,0,255); // <- (126,126,126,255)
|
|
DrawSpecFrame (658,466,768,586,color); // mech
|
|
}
|
|
|
|
int x,y;
|
|
size = m_Textures[20]->Size ();
|
|
x = 658;
|
|
y = 590;
|
|
color = MakeColor (0,126,0,255); // <- (126,126,0,255)
|
|
DrawLine (658,589,769,589,color);
|
|
DrawLine (658,598,769,598,color);
|
|
|
|
for (x=0;x<10;x++)
|
|
{
|
|
DrawLine (bartable[x],589,bartable[x],598,color);
|
|
}
|
|
DrawLine (769,589,769,598,color);
|
|
|
|
DrawLine (771,589,799,589,color);
|
|
DrawLine (771,598,799,598,color);
|
|
DrawLine (799,589,799,598,color);
|
|
|
|
color = Color ();
|
|
for (i=0;i<10;i++)
|
|
{
|
|
//Is this where text is drawn??
|
|
m_Textures[20+i]->Draw (Point3D ((Scalar) bartable[i]+1.0f,(Scalar) y,0.9f),size,MakeColor (255,255,255,255),HUDTexture::NO_FLIP,true);
|
|
if (!(m_HitFlashCount[trans_array[i]] & 0x01))
|
|
{
|
|
m_Textures[40+i]->Draw (Point3D ((Scalar) bartable[i]+1.0f,(Scalar) y-1.0f,0.9f),size,MakeColor (255,255,255,255));
|
|
}
|
|
}
|
|
|
|
if (!(m_HitFlashCount[trans_array[10]] & 0x01))
|
|
m_RearText->Color (MakeColor (73,231,73,255));
|
|
else
|
|
m_RearText->Color (MakeColor (255,255,255,255));
|
|
DWORD tx,ty;
|
|
m_RearText->DrawSize (tx,ty);
|
|
tx >>= 1;
|
|
ty >>= 1;
|
|
m_RearText->Draw (Point3D (785.0f-tx,529.0f-ty,0.9f));
|
|
/*
|
|
size = m_Textures[30]->Size ();
|
|
m_Textures[30]->Draw (Point3D (773.0f,524.0f,0.9f),size,MakeColor (255,255,255,255),HUDTexture::NO_FLIP,true);
|
|
if (!(m_HitFlashCount[trans_array[10]] & 0x01))
|
|
m_Textures[50]->Draw (Point3D (773.0f,523.0f,0.9f),size,MakeColor (255,255,255,255));
|
|
*/
|
|
|
|
size = Size ();
|
|
|
|
if (m_ArmorMode)
|
|
{
|
|
Scalar height;
|
|
int x,y;
|
|
|
|
size = m_Textures[20]->Size ();
|
|
for (i=0;i<MAX_HUD_DAMAGE_ZONE+1;i++)
|
|
{
|
|
x = 659;
|
|
y = 582;
|
|
if (m_ArmorValues[trans_array[i]] != -1)
|
|
{
|
|
switch (trans_array[i])
|
|
{
|
|
case 7: // rear
|
|
x = 778;
|
|
y = 518;
|
|
height = (m_ArmorValues[trans_array[i]]) * 50.0f;
|
|
if (height > 2.0f)
|
|
{
|
|
if (m_HitFlashCount[trans_array[i]] & 0x01)
|
|
{
|
|
my_DrawRect (x,y,(int) (x+13),(int) (y-height),MakeColor (255,255,255,255));
|
|
}
|
|
else
|
|
{
|
|
my_DrawRect (x,y,(int) (x+13),(int) (y-height),m_DamageColors[m_DamageValues[trans_array[i]]]);
|
|
}
|
|
}
|
|
DrawFrame (x,y,x+13,y-50,Color ());
|
|
break;
|
|
case 9: // s1
|
|
x = bartable[i]+2;
|
|
height = (m_ArmorValues[trans_array[i]]) * 45.0f;
|
|
if (height > 2.0f)
|
|
{
|
|
if (m_HitFlashCount[trans_array[i]] & 0x01)
|
|
{
|
|
my_DrawRect (x+3,y,(int) (x+YOUR_BARWIDTH-3),(int) (y-height),MakeColor (255,255,255,255));
|
|
}
|
|
else
|
|
{
|
|
my_DrawRect (x+3,y,(int) (x+YOUR_BARWIDTH-3),(int) (y-height),m_DamageColors[m_DamageValues[trans_array[i]]]);
|
|
}
|
|
}
|
|
DrawFrame (x+3,y,x+YOUR_BARWIDTH-3,y-45,Color ());
|
|
break;
|
|
case 10: //s2
|
|
x = bartable[i]+2;
|
|
height = (m_ArmorValues[trans_array[i]]) * 45.0f;
|
|
if (height > 2.0f)
|
|
{
|
|
if (m_HitFlashCount[trans_array[i]] & 0x01)
|
|
{
|
|
my_DrawRect (x+3,y,(int) (x+YOUR_BARWIDTH-3),(int) (y-height),MakeColor (255,255,255,255));
|
|
}
|
|
else
|
|
{
|
|
my_DrawRect (x+3,y,(int) (x+YOUR_BARWIDTH-3),(int) (y-height),m_DamageColors[m_DamageValues[trans_array[i]]]);
|
|
}
|
|
}
|
|
DrawFrame (x+3,y,x+YOUR_BARWIDTH-3,y-45,Color ());
|
|
break;
|
|
default:
|
|
x = bartable[i];
|
|
height = (m_ArmorValues[trans_array[i]]) * YOUR_BARHEIGHT;
|
|
if (height > 2.0f)
|
|
{
|
|
if (m_HitFlashCount[trans_array[i]] & 0x01)
|
|
{
|
|
my_DrawRect (x+3,y,(int) (x+YOUR_BARWIDTH-1),(int) (y-height),MakeColor (255,255,255,255));
|
|
}
|
|
else
|
|
{
|
|
my_DrawRect (x+3,y,(int) (x+YOUR_BARWIDTH-1),(int) (y-height),m_DamageColors[m_DamageValues[trans_array[i]]]);
|
|
}
|
|
}
|
|
DrawFrame (x+3,y,x+YOUR_BARWIDTH-1,y-YOUR_BARHEIGHT,Color ());
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Point3D boxloc;
|
|
boxloc = Location ();
|
|
loc.x = boxloc.x;
|
|
loc.y = boxloc.y;
|
|
|
|
int fred;
|
|
fred = 0;
|
|
|
|
for (i=0;i<11;i++)
|
|
{//What does the number 13 mean here?
|
|
#if 0
|
|
if (i != fred)
|
|
{
|
|
continue;
|
|
}
|
|
#endif
|
|
Verify (m_Textures[i]);
|
|
switch (i)
|
|
{
|
|
case 7: // rear
|
|
if ((m_DamageValues[i] <= 5) && (m_DamageValues[i]>=0))
|
|
{
|
|
if ((m_DamageValues[i] != 4) || (m_DamageFlash))
|
|
{
|
|
loc.x = 765;
|
|
loc.y = 469;
|
|
size = m_Textures[i]->Size ();
|
|
m_Textures[i]->Draw (loc,size,m_DamageColors[m_DamageValues[i]]);
|
|
}
|
|
}
|
|
break;
|
|
case 11: // s1
|
|
if ((m_DamageValues[9] <= 5) && (m_DamageValues[9]>=0))
|
|
{
|
|
if ((m_DamageValues[9] != 4) || (m_DamageFlash))
|
|
{
|
|
loc.x = 773;
|
|
loc.y = 535;
|
|
size = m_Textures[i]->Size ();
|
|
m_Textures[i]->Draw (loc,size,m_DamageColors[m_DamageValues[9]]);
|
|
}
|
|
}
|
|
break;
|
|
case 12: // s2
|
|
if ((m_DamageValues[10] <= 5) && (m_DamageValues[10]>=0))
|
|
{
|
|
if ((m_DamageValues[10] != 4) || (m_DamageFlash))
|
|
{
|
|
loc.x = 788;
|
|
loc.y = 535;
|
|
size = m_Textures[i]->Size ();
|
|
m_Textures[i]->Draw (loc,size,m_DamageColors[m_DamageValues[10]]);
|
|
}
|
|
}
|
|
break;
|
|
default:
|
|
if ((m_DamageValues[i] <= 5) && (m_DamageValues[i]>=0))
|
|
{
|
|
if ((m_DamageValues[i] != 4) || (m_DamageFlash))
|
|
{
|
|
loc.x = boxloc.x + (offset[m_MechID][i][0]);
|
|
loc.y = boxloc.y + (offset[m_MechID][i][1]);
|
|
size = m_Textures[i]->Size ();
|
|
m_Textures[i]->Draw (loc,size,m_DamageColors[m_DamageValues[i]]);
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if(mfd_device.BeginChannel(2))
|
|
{
|
|
mfd_device.pD3DDevice->SetTexture(0,0);
|
|
mfd_device.DrawThickFrameList(4,damage_back_frames,1,0xFFFFFFFF);
|
|
|
|
static int s_naStates[8] = { 1, 1, 1, 1, 1, 1, 1, 1 };
|
|
if (g_bCOOP) {
|
|
mfd_device.DrawMFDBackText(mfd_text_damage_COOP, s_naStates);
|
|
} else {
|
|
if (g_bMuteMode)
|
|
s_naStates[0] = 2;
|
|
else
|
|
s_naStates[0] = 1;
|
|
|
|
// MSL 5.02 Pinky Button
|
|
if (g_bZoomMode)
|
|
s_naStates[4] = 2;
|
|
else
|
|
s_naStates[4] = 1;
|
|
|
|
if (g_bJumpMode)
|
|
s_naStates[5] = 2;
|
|
else
|
|
s_naStates[5] = 1;
|
|
|
|
if (g_bFlushMode)
|
|
s_naStates[6] = 2;
|
|
else
|
|
s_naStates[6] = 1;
|
|
|
|
if (g_bLightAmpMode)
|
|
s_naStates[7] = 2;
|
|
else
|
|
s_naStates[7] = 1;
|
|
|
|
if (g_bNextTargetMode)
|
|
s_naStates[1] = 2;
|
|
else
|
|
s_naStates[1] = 1;
|
|
|
|
if (g_bCrossTargetMode)
|
|
s_naStates[2] = 2;
|
|
else
|
|
s_naStates[2] = 1;
|
|
|
|
mfd_device.DrawMFDBackText(mfd_text_damage, s_naStates);
|
|
}
|
|
|
|
int i;
|
|
|
|
mfd_device.pD3DDevice->SetTexture(0,mfd_device.pDDSTexture);
|
|
//enable Alpha
|
|
mfd_device.pD3DDevice->SetRenderState( D3DRENDERSTATE_ALPHABLENDENABLE, TRUE );
|
|
mfd_device.pD3DDevice->SetRenderState( D3DRENDERSTATE_SRCBLEND, D3DBLEND_SRCALPHA );
|
|
mfd_device.pD3DDevice->SetRenderState( D3DRENDERSTATE_DESTBLEND, D3DBLEND_INVSRCALPHA );
|
|
|
|
//The original spacing is 13,14,14,14,14,14,14,14,16,14.
|
|
const hsh_bartable[11] = {26+61*0,26+61*1,26+61*2,26+61*3,26+61*4,26+61*5,26+61*6,26+61*7,522,591,540};
|
|
|
|
DWORD color=0xFFFFFFFF;
|
|
const DWORD color_nohit=0xFF808080;
|
|
const DWORD color_hit=0xFFFFFFFF;
|
|
|
|
for(i=0;i<8;i++)
|
|
{
|
|
color=(m_HitFlashCount[trans_array[i]] & 0x01)? color_hit:color_nohit;
|
|
mfd_device.DrawTexture(10+58*i,392,color,0+58*i,403,0+58*(i+1),447);
|
|
}
|
|
color=(m_HitFlashCount[trans_array[8]] & 0x01)? color_hit:color_nohit;
|
|
mfd_device.DrawTexture(506,392,color,0,452,60,496);
|
|
|
|
color=(m_HitFlashCount[trans_array[9]] & 0x01)? color_hit:color_nohit;
|
|
mfd_device.DrawTexture(571,392,color,60,452,118,496);
|
|
|
|
color=(m_HitFlashCount[trans_array[10]] & 0x01)? color_hit:color_nohit;
|
|
mfd_device.DrawTexture(506,194,color,178,452,308,496);
|
|
|
|
// MSL 5.03 Damage on Secondary
|
|
if (g_nAuxilMode == 1)
|
|
{
|
|
// if(radar_device.pDDSRadarDamageTexture==0)
|
|
radar_device.LoadRadarDamageTexture(texturename[m_MechID]);
|
|
|
|
// clear back ground texture
|
|
RECT rc={140,407,340,607};
|
|
DDBLTFX fx={0,};
|
|
fx.dwSize=sizeof(fx);
|
|
fx.dwFillColor=0;
|
|
radar_device.pDDSTarget->Blt(&rc,NULL,NULL,DDBLT_COLORFILL ,&fx);
|
|
|
|
for (i=0;i<11;i++)
|
|
{//What does the number 13 mean here?
|
|
int dv=m_DamageValues[i];
|
|
DWORD color=0xFF000000;
|
|
if(0<=dv && dv<=5)
|
|
color=SH_DamageColor[dv];
|
|
if ((m_DamageValues[i] <= 5) && (m_DamageValues[i]>=0))
|
|
{
|
|
if ((m_DamageValues[i] != 4) || (m_DamageFlash))
|
|
{
|
|
color = m_DamageColors[m_DamageValues[i]];
|
|
radar_device.pD3DDevice->SetTexture(0,radar_device.pDDSRadarDamageTexture);
|
|
radar_device.pD3DDevice->SetRenderState( D3DRENDERSTATE_ALPHABLENDENABLE, TRUE );
|
|
radar_device.pD3DDevice->SetRenderState( D3DRENDERSTATE_SRCBLEND, D3DBLEND_SRCALPHA );
|
|
radar_device.pD3DDevice->SetRenderState( D3DRENDERSTATE_DESTBLEND, D3DBLEND_INVSRCALPHA );
|
|
radar_device.tw=256,radar_device.th=256;
|
|
radar_device.DrawTexture(
|
|
(offset3[m_MechID][i][0]/2)+138,
|
|
(offset3[m_MechID][i][1]/2)+406,
|
|
color,
|
|
texuv3[m_MechID][i][0]/2,
|
|
texuv3[m_MechID][i][1]/2,
|
|
texuv3[m_MechID][i][2]/2,
|
|
texuv3[m_MechID][i][3]/2
|
|
);
|
|
radar_device.tw=512,radar_device.th=512;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if (m_ArmorMode)
|
|
{
|
|
mfd_device.pD3DDevice->SetTexture(0,0);
|
|
|
|
int hsh_x;
|
|
Scalar hsh_height;
|
|
|
|
for (int i=0;i<MAX_HUD_DAMAGE_ZONE+1;i++)
|
|
{
|
|
if (m_ArmorValues[trans_array[i]] != -1)
|
|
{
|
|
hsh_x=hsh_bartable[i];//Exception at index 7.
|
|
int tr=trans_array[i];
|
|
|
|
DWORD color=(m_HitFlashCount[tr] & 0x01)? 0xFFFFFFFF : SH_DamageColor[m_DamageValues[tr]];
|
|
|
|
switch (tr)
|
|
{
|
|
case 7: // rear
|
|
hsh_x=hsh_bartable[10];
|
|
hsh_height=m_ArmorValues[tr]*126;
|
|
if (hsh_height > 2.0f)
|
|
{
|
|
mfd_device.DrawQuad(hsh_x,(int)(179-hsh_height),598,179,color);
|
|
}
|
|
mfd_device.DrawFrame(hsh_x,179-126,598,179,0xFFFFFFFF);
|
|
break;
|
|
case 9: // s1
|
|
hsh_height=m_ArmorValues[tr]*110;
|
|
if (hsh_height > 2.0f)
|
|
{
|
|
mfd_device.DrawQuad(hsh_x,(int)(375-hsh_height),hsh_x+26,375,color);
|
|
}
|
|
mfd_device.DrawFrame(hsh_x,375-110,hsh_x+26,375,0xFFFFFFFF);
|
|
break;
|
|
case 10: // s2
|
|
hsh_height=m_ArmorValues[tr]*110;
|
|
if (hsh_height > 2.0f)
|
|
{
|
|
mfd_device.DrawQuad(hsh_x,(int)(375-hsh_height),hsh_x+26,375,color);
|
|
}
|
|
mfd_device.DrawFrame(hsh_x,375-110,hsh_x+26,375,0xFFFFFFFF);
|
|
break;
|
|
default:
|
|
hsh_height=m_ArmorValues[tr]*300;
|
|
hsh_x=26+58*i;
|
|
if (hsh_height > 2.0f)
|
|
{
|
|
mfd_device.DrawQuad(hsh_x,(int)(375-hsh_height),hsh_x+26,375,color);
|
|
}
|
|
mfd_device.DrawFrame(hsh_x,375-300,hsh_x+26,375,0xFFFFFFFF);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{//!ArmorMode
|
|
if(mfd_device.pDDSDamageTexture==0)
|
|
mfd_device.LoadDamageTexture(texturename[m_MechID]);
|
|
|
|
for (i=0;i<13;i++)
|
|
{//What does the number 13 mean here?
|
|
int dv=m_DamageValues[i];
|
|
DWORD color=0xFF000000;
|
|
if(0<=dv && dv<=5)color=SH_DamageColor[dv];
|
|
switch (i)
|
|
{
|
|
case 7: // rear
|
|
if ((m_DamageValues[i] <= 5) && (m_DamageValues[i]>=0))
|
|
if ((m_DamageValues[i] != 4) || (m_DamageFlash))
|
|
{
|
|
mfd_device.pD3DDevice->SetTexture(0,mfd_device.pDDSTexture);
|
|
mfd_device.pD3DDevice->SetRenderState( D3DRENDERSTATE_ALPHABLENDENABLE, TRUE );
|
|
mfd_device.pD3DDevice->SetRenderState( D3DRENDERSTATE_SRCBLEND, D3DBLEND_SRCALPHA );
|
|
mfd_device.pD3DDevice->SetRenderState( D3DRENDERSTATE_DESTBLEND, D3DBLEND_INVSRCALPHA );
|
|
RenderAux5MechBack(0,color);
|
|
}
|
|
break;
|
|
case 11: // rear s1
|
|
{
|
|
int dv=m_DamageValues[9];
|
|
DWORD color=0xFF000000;
|
|
if(0<=dv && dv<=5)color=SH_DamageColor[dv];
|
|
if ((m_DamageValues[9] <= 5) && (m_DamageValues[9]>=0))
|
|
if ((m_DamageValues[9] != 4) || (m_DamageFlash))
|
|
{
|
|
mfd_device.pD3DDevice->SetTexture(0,mfd_device.pDDSTexture);
|
|
mfd_device.pD3DDevice->SetRenderState( D3DRENDERSTATE_ALPHABLENDENABLE, TRUE );
|
|
mfd_device.pD3DDevice->SetRenderState( D3DRENDERSTATE_SRCBLEND, D3DBLEND_SRCALPHA );
|
|
mfd_device.pD3DDevice->SetRenderState( D3DRENDERSTATE_DESTBLEND, D3DBLEND_INVSRCALPHA );
|
|
RenderAux5MechBack(1,color);
|
|
}
|
|
}
|
|
break;
|
|
case 12: // rear s2
|
|
{
|
|
int dv=m_DamageValues[10];
|
|
DWORD color=0xFF000000;
|
|
if(0<=dv && dv<=5)color=SH_DamageColor[dv];
|
|
if ((m_DamageValues[10] <= 5) && (m_DamageValues[10]>=0))
|
|
if ((m_DamageValues[10] != 4) || (m_DamageFlash))
|
|
{
|
|
mfd_device.pD3DDevice->SetTexture(0,mfd_device.pDDSTexture);
|
|
mfd_device.pD3DDevice->SetRenderState( D3DRENDERSTATE_ALPHABLENDENABLE, TRUE );
|
|
mfd_device.pD3DDevice->SetRenderState( D3DRENDERSTATE_SRCBLEND, D3DBLEND_SRCALPHA );
|
|
mfd_device.pD3DDevice->SetRenderState( D3DRENDERSTATE_DESTBLEND, D3DBLEND_INVSRCALPHA );
|
|
RenderAux5MechBack(2,color);
|
|
}
|
|
}
|
|
break;
|
|
default:
|
|
if ((m_DamageValues[i] <= 5) && (m_DamageValues[i]>=0))
|
|
{
|
|
if ((m_DamageValues[i] != 4) || (m_DamageFlash))
|
|
{
|
|
mfd_device.pD3DDevice->SetTexture(0,mfd_device.pDDSDamageTexture);
|
|
mfd_device.pD3DDevice->SetRenderState( D3DRENDERSTATE_ALPHABLENDENABLE, TRUE );
|
|
mfd_device.pD3DDevice->SetRenderState( D3DRENDERSTATE_SRCBLEND, D3DBLEND_SRCALPHA );
|
|
mfd_device.pD3DDevice->SetRenderState( D3DRENDERSTATE_DESTBLEND, D3DBLEND_INVSRCALPHA );
|
|
|
|
mfd_device.DrawTexture(
|
|
offset2[m_MechID][i][0]+100,
|
|
offset2[m_MechID][i][1]+40,
|
|
color,
|
|
texuv2[m_MechID][i][0],
|
|
texuv2[m_MechID][i][1],
|
|
texuv2[m_MechID][i][2],
|
|
texuv2[m_MechID][i][3]
|
|
);
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
mfd_device.EndChannel();
|
|
}
|
|
}
|
|
|
|
namespace NHUDTARGETDAMAGE
|
|
{
|
|
const int WeaponTransTable[85][2] = {
|
|
{W_SmallLaser ,27},
|
|
{W_MediumLaser ,18},
|
|
{W_LargeLaser ,11},
|
|
{W_SmallPulse ,28},
|
|
{W_MediumPulse ,19},
|
|
{W_LargePulse ,12},
|
|
{W_ERSmallLaser ,27},
|
|
{W_ERMediumLaser ,18},
|
|
{W_ERLargeLaser ,11},
|
|
{W_SmallXPulse, 28},
|
|
{W_MedXPulse ,28},
|
|
{W_LargeXPulse ,28},
|
|
{W_ClanSmallPulse ,52},
|
|
{W_ClanMediumPulse,49},
|
|
{W_ClanLargePulse ,44},
|
|
{W_ClanERSmallLaser ,38},
|
|
{W_ClanERMediumLaser ,36},
|
|
{W_ClanERLargeLaser ,35},
|
|
{W_PPC ,26},
|
|
{W_ERPPC, 26},
|
|
{W_ClanERPPC ,37},
|
|
{W_Flamer,4},
|
|
{W_ERFlamer,4},
|
|
{W_Bombast ,3},
|
|
{W_SRM2 ,29},
|
|
{W_SRM4 ,30},
|
|
{W_SRM6 ,31},
|
|
{W_ClanSRM2 ,29},
|
|
{W_ClanSRM4 ,30},
|
|
{W_ClanSRM6 ,31},
|
|
{W_SSRM2 ,53},
|
|
{W_SSRM4 ,54},
|
|
{W_SSRM6 ,55},
|
|
{W_ClanSSRM2 ,53},
|
|
{W_ClanSSRM4 ,54},
|
|
{W_ClanSSRM6 ,55},
|
|
{W_MRM10 ,21},
|
|
{W_MRM20 ,22},
|
|
{W_MRM30 ,23},
|
|
{W_MRM40 ,24},
|
|
{W_SMRM10 ,21},
|
|
{W_SMRM20 ,22},
|
|
{W_SMRM30 ,23},
|
|
{W_SMRM40 ,24},
|
|
{W_ClanSMRM10 ,21},
|
|
{W_ClanSMRM20 ,22},
|
|
{W_ClanSMRM30 ,23},
|
|
{W_ClanSMRM40 ,24},
|
|
{W_LRM5 ,17},
|
|
{W_LRM10 ,14},
|
|
{W_LRM15 ,15},
|
|
{W_LRM20 ,16},
|
|
{W_ClanLRM5 ,48},
|
|
{W_ClanLRM10 ,45},
|
|
{W_ClanLRM15 ,46},
|
|
{W_ClanLRM20 ,47},
|
|
{W_Thunderbolt ,32},
|
|
{W_NarcBeacon ,25},
|
|
{W_ClanNarcBeacon ,51},
|
|
{W_Flare ,51},
|
|
{W_HighExplosive ,51},
|
|
{W_ArtilleryStrike ,51},
|
|
{W_AC2 ,1},
|
|
{W_AC5 ,1},
|
|
{W_AC10 ,0},
|
|
{W_AC20 ,0},
|
|
{W_LBXAC10 ,9},
|
|
{W_LBXAC20 ,10},
|
|
{W_ClanLBXAC10 ,42},
|
|
{W_ClanLBXAC20 ,43},
|
|
{W_UltraAC2 ,33},
|
|
{W_UltraAC5 ,34},
|
|
{W_UltraAC10 ,34},
|
|
{W_UltraAC20 ,34},
|
|
{W_ClanUltraAC2 ,56},
|
|
{W_ClanUltraAC5 ,57},
|
|
{W_ClanUltraAC10 ,57},
|
|
{W_ClanUltraAC20 ,51},
|
|
{W_LightGauss ,8},
|
|
{W_Gauss ,6},
|
|
{W_HeavyGauss ,51},
|
|
{W_ClanGauss ,40},
|
|
{W_MachineGun ,20},
|
|
{W_ClanMachineGun ,50},
|
|
{W_LongTom ,13},
|
|
// {W_RTXAC2, 77},
|
|
// {W_RTXAC5, 78},
|
|
};
|
|
int LookupWeapon (int id)
|
|
{
|
|
int i;
|
|
for (i=0;i<85;i++)
|
|
{
|
|
if (WeaponTransTable[i][0] == id)
|
|
{
|
|
return WeaponTransTable[i][1];
|
|
}
|
|
}
|
|
return -1;
|
|
}
|
|
};
|
|
|
|
using namespace NHUDTARGETDAMAGE;
|
|
|
|
HUDTargetDamage::HUDTargetDamage() :
|
|
m_TargetVehicle(NULL)
|
|
{
|
|
|
|
int i;
|
|
|
|
AddTexture ("hud\\hud4",0,29,43,49,91); //leftleg
|
|
AddTexture ("hud\\hud4",1,6,43,26,92); //rightleg
|
|
AddTexture ("hud\\hud4",2,43,11,56,42); //leftarm
|
|
AddTexture ("hud\\hud4",3,0,11,12,42); //rightarm
|
|
AddTexture ("hud\\hud4",4,12,7,22,33); //righttorso
|
|
AddTexture ("hud\\hud4",5,33,7,43,33); //lefttorso
|
|
AddTexture ("hud\\hud4",6,22,10,33,41); //centertorso
|
|
AddTexture ("hud\\hud4",7,0,0,0,0); //blank rear?
|
|
AddTexture ("hud\\hud4",8,22,0,33,10); //head
|
|
AddTexture ("hud\\hud4",9,0,0,0,0); //special1
|
|
AddTexture ("hud\\hud4",10,0,0,0,0); //special2
|
|
|
|
AddTexture ("hud\\hud4",20,115,119,127,127);
|
|
AddTexture ("hud\\hud4",21,129,119,141,127);
|
|
AddTexture ("hud\\hud4",22,143,119,155,127);
|
|
AddTexture ("hud\\hud4",23,157,119,169,127);
|
|
AddTexture ("hud\\hud4",24,171,119,183,127);
|
|
AddTexture ("hud\\hud4",25,185,119,197,127);
|
|
AddTexture ("hud\\hud4",26,199,119,211,127);
|
|
AddTexture ("hud\\hud4",27,213,119,225,127);
|
|
AddTexture ("hud\\hud4",28,229,119,241,127);
|
|
AddTexture ("hud\\hud4",29,243,119,255,127);
|
|
AddTexture ("hud\\hud4",30,157,119,169,127);
|
|
|
|
for (i=20;i<=30;i++)
|
|
{
|
|
m_Textures[i]->BlendMode (gos_BlendDecal);
|
|
}
|
|
|
|
|
|
AddTexture ("hud\\hud4",40,115,110,127,118);
|
|
AddTexture ("hud\\hud4",41,129,110,141,118);
|
|
AddTexture ("hud\\hud4",42,143,110,155,118);
|
|
AddTexture ("hud\\hud4",43,157,110,169,118);
|
|
AddTexture ("hud\\hud4",44,171,110,183,118);
|
|
AddTexture ("hud\\hud4",45,185,110,197,118);
|
|
AddTexture ("hud\\hud4",46,199,110,211,118);
|
|
AddTexture ("hud\\hud4",47,213,110,225,118);
|
|
AddTexture ("hud\\hud4",48,229,110,241,118);
|
|
AddTexture ("hud\\hud4",49,243,110,255,118);
|
|
AddTexture ("hud\\hud4",50,157,110,169,118);
|
|
|
|
for (i=0;i<58;i++)
|
|
{
|
|
AddTexture ("hud\\hud4",100+i,60,24+(i*4.0f),87,28+(i*4.0f));
|
|
}
|
|
|
|
m_DamageColors[0] = MakeColor(100, 225, 100, 225);
|
|
m_DamageColors[1] = MakeColor(225, 225, 0, 200);
|
|
m_DamageColors[2] = MakeColor(255, 150, 0, 175);
|
|
m_DamageColors[3] = MakeColor(255, 50, 0, 150);
|
|
m_DamageColors[4] = MakeColor(255, 50, 0, 125);
|
|
m_DamageColors[5] = MakeColor(0, 0, 0, 100);
|
|
|
|
m_TargetName = new HUDText ();
|
|
m_TargetName->Justification (HUDText::LEFT_ALIGN);
|
|
m_TargetRangeText = new HUDNumberText ();
|
|
m_TargetRangeText->Justification (HUDText::LEFT_ALIGN);
|
|
//sanghoon
|
|
// m_TargetRangeText->SetSize(HUDText::LARGE_SIZE);
|
|
m_TargetRangeText->SetSize(HUDText::MEDIUM_SIZE);
|
|
m_TargetAlignment = 0;
|
|
m_TargetTonnage = -1;
|
|
m_TargetName->UpdateText ("");
|
|
m_TargetRangeText->UpdateText ("");
|
|
Color (MakeColor (0,175,0,150));
|
|
m_DamageFlashTime = 0;
|
|
m_HitFlashTime = 0;
|
|
for (i=0;i<MAX_HUD_DAMAGE_ZONE+1;i++)
|
|
{
|
|
m_HitFlashCount[i] = 0;
|
|
m_DamageValues[i] = 0;
|
|
m_ArmorValues[i] = 0;
|
|
}
|
|
// MSL 5.03 Target Damage Display
|
|
m_TargetMechID = 0;
|
|
|
|
m_Weapons.clear ();
|
|
//sanghoon begin
|
|
VehicleInterface::GetInstance()->hudTargetDamageMode=false;
|
|
//sanghoon end
|
|
m_ArmorMode = VehicleInterface::GetInstance()->hudTargetDamageMode;
|
|
m_LastMechMode = false;
|
|
}
|
|
HUDTargetDamage::~HUDTargetDamage()
|
|
{
|
|
delete m_TargetName;
|
|
delete m_TargetRangeText;
|
|
}
|
|
|
|
void HUDTargetDamage::Reset (void)
|
|
{
|
|
m_DamageFlashTime = 0;
|
|
m_HitFlashTime = 0;
|
|
int i;
|
|
m_Weapons.clear ();
|
|
for (i=0;i<MAX_HUD_DAMAGE_ZONE+1;i++)
|
|
{
|
|
m_HitFlashCount[i] = 0;
|
|
m_DamageValues[i] = 0;
|
|
m_ArmorValues[i] = 0;
|
|
}
|
|
// MSL 5.03 Target Damage Display
|
|
Verify (m_TargetMechID >=0);
|
|
Verify (m_TargetMechID <= LastMechID);
|
|
AddTexture (texturename[m_TargetMechID],0,texuv[m_TargetMechID][0][0],texuv[m_TargetMechID][0][1],texuv[m_TargetMechID][0][2],texuv[m_TargetMechID][0][3],128,128); // left leg
|
|
AddTexture (texturename[m_TargetMechID],1,texuv[m_TargetMechID][1][0],texuv[m_TargetMechID][1][1],texuv[m_TargetMechID][1][2],texuv[m_TargetMechID][1][3],128,128); // right leg
|
|
AddTexture (texturename[m_TargetMechID],2,texuv[m_TargetMechID][2][0],texuv[m_TargetMechID][2][1],texuv[m_TargetMechID][2][2],texuv[m_TargetMechID][2][3],128,128); // left arm
|
|
AddTexture (texturename[m_TargetMechID],3,texuv[m_TargetMechID][3][0],texuv[m_TargetMechID][3][1],texuv[m_TargetMechID][3][2],texuv[m_TargetMechID][3][3],128,128); // right arm
|
|
AddTexture (texturename[m_TargetMechID],4,texuv[m_TargetMechID][4][0],texuv[m_TargetMechID][4][1],texuv[m_TargetMechID][4][2],texuv[m_TargetMechID][4][3],128,128); // right torso
|
|
AddTexture (texturename[m_TargetMechID],5,texuv[m_TargetMechID][5][0],texuv[m_TargetMechID][5][1],texuv[m_TargetMechID][5][2],texuv[m_TargetMechID][5][3],128,128); // left torso
|
|
AddTexture (texturename[m_TargetMechID],6,texuv[m_TargetMechID][6][0],texuv[m_TargetMechID][6][1],texuv[m_TargetMechID][6][2],texuv[m_TargetMechID][6][3],128,128); // center torso
|
|
AddTexture ("hud\\hud5",7,220,0,252,50); // center torso rear
|
|
AddTexture (texturename[m_TargetMechID],8,texuv[m_TargetMechID][8][0],texuv[m_TargetMechID][8][1],texuv[m_TargetMechID][8][2],texuv[m_TargetMechID][8][3],128,128); // head
|
|
AddTexture (texturename[m_TargetMechID],9,texuv[m_TargetMechID][9][0],texuv[m_TargetMechID][9][1],texuv[m_TargetMechID][9][2],texuv[m_TargetMechID][9][3],128,128); // special 1
|
|
AddTexture (texturename[m_TargetMechID],10,texuv[m_TargetMechID][10][0],texuv[m_TargetMechID][10][1],texuv[m_TargetMechID][10][2],texuv[m_TargetMechID][10][3],128,128); // special 2
|
|
AddTexture ("hud\\hud5",11,229,68,238,118); // special 1 rear
|
|
AddTexture ("hud\\hud5",12,243,68,254,118); // special 2 rear
|
|
if(!hsh_initialized)
|
|
{
|
|
;
|
|
}
|
|
else
|
|
{
|
|
//sanghoon
|
|
mfd_device.LoadTargetTexture(texturename[m_TargetMechID]);
|
|
}
|
|
|
|
}
|
|
|
|
void HUDTargetDamage::Update (Stuff::Time till)
|
|
{
|
|
if (m_DamageFlashTime == 0)
|
|
m_DamageFlashTime = till;
|
|
if (m_HitFlashTime == 0)
|
|
m_HitFlashTime = till;
|
|
|
|
while (m_DamageFlashTime <= till)
|
|
{
|
|
m_DamageFlash = !m_DamageFlash;
|
|
m_DamageFlashTime += 1.0/6.0;
|
|
}
|
|
while (m_HitFlashTime <= till)
|
|
{
|
|
int i;
|
|
for (i=0;i<MAX_HUD_DAMAGE_ZONE+1;i++)
|
|
{
|
|
if (m_HitFlashCount[i])
|
|
m_HitFlashCount[i]++;
|
|
if (m_HitFlashCount[i] == MAX_FLASH)
|
|
m_HitFlashCount[i] = 0;
|
|
}
|
|
m_HitFlashTime += 1.0/6.0;
|
|
}
|
|
|
|
inherited::Update (till);
|
|
}
|
|
|
|
void HUDTargetDamage::TargetTonnage (Stuff::Scalar value)
|
|
{
|
|
m_TargetTonnage = value;
|
|
if (m_TargetVehicle.GetCurrent ())
|
|
{
|
|
if (m_TargetVehicle.GetCurrent ()->IsDerivedFrom (Vehicle::DefaultData))
|
|
{
|
|
Vehicle *veh;
|
|
veh = Cast_Object (Vehicle *,m_TargetVehicle.GetCurrent ());
|
|
int i;
|
|
for (i=0;i<MAX_HUD_DAMAGE_ZONE+1;i++)
|
|
{
|
|
m_ArmorValues[i] = veh->armorArray[i];
|
|
}
|
|
}
|
|
if (value> 0)
|
|
{
|
|
Verify (m_TargetVehicle.GetCurrent ()->IsDerivedFrom (Mech::DefaultData));
|
|
Mech *mech = Cast_Object(Mech *, m_TargetVehicle.GetCurrent());
|
|
Check_Object (mech);
|
|
int i;
|
|
for (i=0;i<MAX_HUD_DAMAGE_ZONE+1;i++)
|
|
{
|
|
m_DamageValues[i] = mech->damageArray[i];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
bool HUDTargetDamage::ToggleMode (void)
|
|
{
|
|
if (m_TargetVehicle.GetCurrent ())
|
|
{
|
|
if (!m_TargetVehicle.GetCurrent ()->IsDerivedFrom (Mech::DefaultData))
|
|
m_ArmorMode = false;
|
|
else
|
|
{
|
|
m_ArmorMode = !m_ArmorMode;
|
|
m_LastMechMode = m_ArmorMode;
|
|
}
|
|
}
|
|
else
|
|
m_ArmorMode = false;
|
|
|
|
VehicleInterface::GetInstance()->hudTargetDamageMode = m_ArmorMode;
|
|
return m_ArmorMode;
|
|
}
|
|
|
|
void HUDTargetDamage::Target (Entity *veh)
|
|
{
|
|
int i;
|
|
Vehicle *vehicle = m_Vehicle.GetCurrent();
|
|
if (!vehicle)
|
|
return;
|
|
|
|
if (veh && (vehicle->GetRelativeAlignment(veh->GetAlignment()) == Entity::Player))
|
|
m_ShowData = true;
|
|
else
|
|
m_ShowData = false;
|
|
m_Weapons.clear ();
|
|
m_TargetVehicle.Remove ();
|
|
for (i=0;i<MAX_HUD_DAMAGE_ZONE+1;i++)
|
|
{
|
|
m_ArmorValues[i] = -1;
|
|
m_DamageValues[i] = -1;
|
|
}
|
|
if (veh)
|
|
{
|
|
Check_Object (veh);
|
|
m_TargetVehicle.Add (veh);
|
|
// MSL 5.04 Target MFD Weapon Listing
|
|
// Works for Bots
|
|
// What about Players?
|
|
// To Much info for Players?
|
|
// Is the Weapon Listing matching up with the actual weapon?
|
|
if(!MWApplication::GetInstance()->networkingFlag)
|
|
// if(MWApplication::GetInstance()->networkingFlag)
|
|
{
|
|
if (veh->IsDerivedFrom (Vehicle::DefaultData))
|
|
{
|
|
Vehicle *vehicle = Cast_Object (Vehicle *,veh);
|
|
Stuff::ChainIteratorOf<Weapon *> weaponIterator (&vehicle->weaponChain);
|
|
m_Weapons.reserve (vehicle->weaponChain.GetSize ());
|
|
Weapon *weapon;
|
|
while((weapon = weaponIterator.ReadAndNext()) != NULL)
|
|
{
|
|
Check_Object(weapon);
|
|
const Weapon__GameModel *model = weapon->GetGameModel ();
|
|
Verify (model);
|
|
|
|
m_Weapons.push_back (WeaponData (LookupWeapon (model->itemID),weapon->internalLocation));
|
|
}
|
|
}
|
|
if (!veh->IsDerivedFrom (Mech::DefaultData))
|
|
{
|
|
m_ArmorMode = false;
|
|
}
|
|
else
|
|
{
|
|
m_ArmorMode = m_LastMechMode;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
const char weapon_name[58][8]={
|
|
"AC10",
|
|
"AC5",
|
|
"AM5",
|
|
"BMB LAS",
|
|
"FLAMER",
|
|
"FLARE",
|
|
"GAUSS",
|
|
"HIGH EX",
|
|
"L GAUSS",
|
|
"LBX10",
|
|
"LBX20",
|
|
"LG LAS",
|
|
"LG PLS",
|
|
"LNG TOM",
|
|
"LRM10",
|
|
"LRM15",
|
|
"LRM20",
|
|
"LRM5",
|
|
"MD LAS",
|
|
"MD PLS",
|
|
"MG",
|
|
"MRM10",
|
|
"MRM20",
|
|
"MRM30",
|
|
"MRM40",
|
|
"NARC",
|
|
"PPC",
|
|
"SM LAS",
|
|
"SM PLS",
|
|
"SRM2",
|
|
"SRM4",
|
|
"SRM6",
|
|
"THDRBLT",
|
|
"ULTRA 2",
|
|
"ULTRA 5",
|
|
"C ERLGL",
|
|
"C ERMDL",
|
|
"C ERPPC",
|
|
"C ERSML",
|
|
"C ELAMR",
|
|
"C GAUSS",
|
|
"C LAMS",
|
|
"C LBX10",
|
|
"C LBX20",
|
|
"C LGPLS",
|
|
"C LRM10",
|
|
"C LRM15",
|
|
"C LRM20",
|
|
"C LRM5",
|
|
"C MDPLS",
|
|
"C MG",
|
|
"C NARC",
|
|
"C SMPLS",
|
|
"C STRK2",
|
|
"C STRK4",
|
|
"C STRK6",
|
|
"C UAC2",
|
|
"C UAC5"
|
|
// {W_SmallLaser ,27},
|
|
// {W_MediumLaser ,18},
|
|
// {W_LargeLaser ,11},
|
|
// {W_SmallPulse ,28},
|
|
// {W_MediumPulse ,19},
|
|
// {W_LargePulse ,12},
|
|
// {W_ERSmallLaser ,27},
|
|
// {W_ERMediumLaser ,18},
|
|
// {W_ERLargeLaser ,11},
|
|
// {W_SmallXPulse, 28},
|
|
// {W_MedXPulse ,28},
|
|
// {W_LargeXPulse ,28},
|
|
// {W_ClanSmallPulse ,52},
|
|
// {W_ClanMediumPulse,49},
|
|
// {W_ClanLargePulse ,44},
|
|
// {W_ClanERSmallLaser ,38},
|
|
// {W_ClanERMediumLaser ,36},
|
|
// {W_ClanERLargeLaser ,35},
|
|
// {W_PPC ,26},
|
|
// {W_ERPPC, 26},
|
|
// {W_ClanERPPC ,37},
|
|
// {W_Flamer,4},
|
|
// {W_ERFlamer,4},
|
|
// {W_Bombast ,3},
|
|
// {W_SRM2 ,29},
|
|
// {W_SRM4 ,30},
|
|
// {W_SRM6 ,31},
|
|
// {W_SSRM2 ,53},
|
|
// {W_SSRM4 ,54},
|
|
// {W_SSRM6 ,55},
|
|
// {W_ClanSSRM2 ,53},
|
|
// {W_ClanSSRM4 ,54},
|
|
// {W_ClanSSRM6 ,55},
|
|
// {W_MRM10 ,21},
|
|
// {W_MRM20 ,22},
|
|
// {W_MRM30 ,23},
|
|
// {W_MRM40 ,24},
|
|
// {W_SMRM10 ,21},
|
|
// {W_SMRM20 ,22},
|
|
// {W_SMRM30 ,23},
|
|
// {W_SMRM40 ,24},
|
|
// {W_ClanSMRM10 ,21},
|
|
// {W_ClanSMRM20 ,22},
|
|
// {W_ClanSMRM30 ,23},
|
|
// {W_ClanSMRM40 ,24},
|
|
// {W_LRM5 ,17},
|
|
// {W_LRM10 ,14},
|
|
// {W_LRM15 ,15},
|
|
// {W_LRM20 ,16},
|
|
// {W_ClanLRM5 ,48},
|
|
// {W_ClanLRM10 ,45},
|
|
// {W_ClanLRM15 ,46},
|
|
// {W_ClanLRM20 ,47},
|
|
// {W_Thunderbolt ,32},
|
|
// {W_NarcBeacon ,25},
|
|
// {W_ClanNarcBeacon ,51},
|
|
// {W_Flare ,51},
|
|
// {W_HighExplosive ,51},
|
|
// {W_ArtilleryStrike ,51},
|
|
// {W_AC2 ,1},
|
|
// {W_AC5 ,1},
|
|
// {W_AC10 ,0},
|
|
// {W_AC20 ,0},
|
|
// {W_LBXAC10 ,9},
|
|
// {W_LBXAC20 ,10},
|
|
// {W_ClanLBXAC10 ,42},
|
|
// {W_ClanLBXAC20 ,43},
|
|
// {W_UltraAC2 ,33},
|
|
// {W_UltraAC5 ,34},
|
|
// {W_UltraAC10 ,34},
|
|
// {W_UltraAC20 ,34},
|
|
// {W_ClanUltraAC2 ,56},
|
|
// {W_ClanUltraAC5 ,57},
|
|
// {W_ClanUltraAC10 ,57},
|
|
// {W_ClanUltraAC20 ,51},
|
|
// {W_LightGauss ,8},
|
|
// {W_Gauss ,6},
|
|
// {W_HeavyGauss ,51},
|
|
// {W_ClanGauss ,40},
|
|
// {W_MachineGun ,20},
|
|
// {W_ClanMachineGun ,50},
|
|
// {W_LongTom ,13},
|
|
// {W_RTXAC2, 77},
|
|
// {W_RTXAC5, 78},
|
|
};
|
|
|
|
static char mfd_text_targetdamage[8][32]={
|
|
"NEAREST\nFRIENDLY","NEXT\nFRIENDLY","PREV\nFRIENDLY","TARGET\nMODE",
|
|
"NEAREST\nENEMY","NEXT\nENEMY","PREV\nENEMY","CROSSHAIR\nTARGET",
|
|
};
|
|
|
|
// MSL ADD MECH
|
|
// -1 = OFF
|
|
static index_redirection[LastMechID+1]={
|
|
0 , // Annihilator
|
|
1 , // Archer
|
|
2 , // Arctic Wolf
|
|
3 , // Ares
|
|
4 , // Argus
|
|
5 , // Assassin2
|
|
6 , // Atlas
|
|
7 , // Avatar
|
|
8 , // Awesome
|
|
9 , // Battlemaster
|
|
10 , // BattlemasterIIc
|
|
11 , // Behemoth
|
|
12 , // Behemoth II
|
|
13 , // Black Hawk
|
|
14 , // Black Knight
|
|
15 , // Black Lanner
|
|
16 , // Brigand
|
|
17 , // Bushwacker
|
|
18 , // Catapult
|
|
19 , // cauldron-born
|
|
20 , // Chimera
|
|
21 , // Commando
|
|
22 , // Cougar
|
|
23 , // Cyclops
|
|
24 , // Daishi
|
|
25 , // Deimos
|
|
26 , // Dragon
|
|
27 , // Fafnir
|
|
28 , // Flea
|
|
29 , // Gladiator
|
|
30 , // Grizzly
|
|
31 , // Hauptmann
|
|
32 , // Hellhound
|
|
33 , // Hellspawn
|
|
34 , // Highlander
|
|
35 , // Hollander II
|
|
36 , // Hunchback
|
|
37 , // Kodiak
|
|
38 , // Loki
|
|
39 , // Longbow
|
|
40 , // Madcat
|
|
41 , // Madcat Mk. II
|
|
42 , // Masakari
|
|
43 , // Mauler
|
|
44 , // Novacat
|
|
45 , // Osiris
|
|
46 , // Owens
|
|
47 , // Puma
|
|
48 , // Raven
|
|
49 , // Rifleman
|
|
50 , // Ryoken
|
|
51 , // Shadowcat
|
|
52 , // Solitaire
|
|
53 , // Sunder
|
|
54 , // Templar
|
|
55 , // Thanatos
|
|
56 , // Thor
|
|
57 , // Uller
|
|
58 , // Urbanmech
|
|
59 , // Uziel
|
|
60 , // Victor
|
|
61 , // Vulture
|
|
62 , // Warhammer
|
|
63 , // Wolfhound
|
|
64 , // Zeus
|
|
|
|
};
|
|
|
|
|
|
int GetMechIndex(int idx_org)
|
|
{
|
|
// MSL 5.02
|
|
// if(0<=idx_org && idx_org<21){
|
|
if(0<=idx_org && idx_org<LastMechID+1){
|
|
return index_redirection[idx_org];
|
|
}
|
|
return -1;
|
|
}
|
|
|
|
void HUDTargetDamage::DrawImplementation(void)
|
|
{
|
|
if(!hsh_initialized){
|
|
Point3D size;
|
|
// const bartable[10] = {658,671,685,699,713,727,741,755,771,785};
|
|
// 0 1 2 3 4 5 6 7 8 9
|
|
const bartable[11] = {658,670,683,696,709,722,735,748,763,776,789};
|
|
|
|
DWORD color = MakeColor (0,32,0,150);
|
|
|
|
if (m_ArmorMode)
|
|
{
|
|
my_DrawRect (0,467,141,485,color); // name
|
|
my_DrawRect (0,488,141,586,color); // armor
|
|
|
|
color = MakeColor (0,126,0,255);
|
|
DrawSpecFrame (0,467,141,485,color);
|
|
DrawSpecFrame (0,488,141,586,color);
|
|
}
|
|
else
|
|
{
|
|
my_DrawRect (0,467,183,485,color); // name
|
|
my_DrawRect (73,488,183,599,color); // diagram
|
|
my_DrawRect (0,568,70,599,color); // weapons
|
|
|
|
color = MakeColor (0,126,0,255);
|
|
|
|
DrawSpecFrame (0,467,183,485,color); // name
|
|
DrawSpecFrame (0,488,70,565,color); // camera
|
|
DrawSpecFrame (73,488,183,599,color); // diagram
|
|
DrawSpecFrame (0,568,70,599,color); // weapons
|
|
}
|
|
if (!m_TargetVehicle.GetCurrent ())
|
|
return;
|
|
|
|
// MSL 5.03 Target Damage Display
|
|
if (m_TargetVehicle.GetCurrent ())
|
|
{
|
|
Mech *targetmech;
|
|
targetmech = Cast_Object (Mech *,m_TargetVehicle.GetCurrent ());
|
|
const Mech__GameModel *model = static_cast<const Mech__GameModel *> (targetmech->GetGameModel ());
|
|
m_TargetMechID = model->mechID;
|
|
}
|
|
else
|
|
{
|
|
m_TargetMechID = 0;
|
|
}
|
|
|
|
|
|
if (m_ShowData)
|
|
{
|
|
if (!m_ArmorMode)
|
|
{
|
|
stlport::vector<WeaponData>::iterator iter;
|
|
int cury,curx;
|
|
cury = 570;
|
|
curx = 3;
|
|
size = m_Textures[100]->Size ();
|
|
for (iter= m_Weapons.begin ();iter != m_Weapons.end ();iter++)
|
|
{
|
|
if (iter->m_TextureID == -1)
|
|
continue;
|
|
color = m_DamageColors[m_DamageValues[iter->m_PartLoc]];
|
|
my_DrawRect (curx,cury,curx+30,cury+6,color);
|
|
m_Textures[100+(iter->m_TextureID)]->Draw (Point3D (curx+1.0f,cury+1.0f,0.9f),size,0xFF000000,HUDTexture::NO_FLIP,true);
|
|
cury += 6;
|
|
if ((cury+6) >= 598)
|
|
{
|
|
cury = 570;
|
|
curx = 33;
|
|
}
|
|
}
|
|
}
|
|
|
|
color = MakeColor (0,200,0,150);
|
|
|
|
if (m_TargetTonnage == -1)
|
|
{
|
|
//When target is not a mech..
|
|
Verify (!m_ArmorMode); // only mechs show armor mode
|
|
if (m_TargetVehicle.GetCurrent()->IsDerivedFrom (MWObject::DefaultData))
|
|
{
|
|
MWObject *veh = Cast_Object (MWObject *,m_TargetVehicle.GetCurrent ());
|
|
if (m_ArmorValues[0] != (veh->m_HitPoints / veh->m_MaxHitPoints))
|
|
m_HitFlashCount[0] = 1;
|
|
m_ArmorValues[0] = (veh->m_HitPoints / veh->m_MaxHitPoints);
|
|
int x,y;
|
|
size = m_Textures[20]->Size ();
|
|
|
|
x = 78;
|
|
y = 594;
|
|
|
|
color = Color ();
|
|
if (m_ArmorValues[0] != -1)
|
|
{
|
|
Scalar height;
|
|
Scalar tx;
|
|
tx = 141-73-10;
|
|
height = (m_ArmorValues[0]) * (599-488-10);
|
|
Clamp (height,0,(599-488-10));
|
|
// if (height > 2.0f)
|
|
{
|
|
// if (m_HitFlashCount[MAX_HUD_DAMAGE_ZONE] & 0x01)
|
|
// my_DrawRect (x,y,(int) (x+tx),(int) (y-height),MakeColor (255,255,255,255));
|
|
// else
|
|
{
|
|
int level;
|
|
level = (int) ((m_ArmorValues[0]*(MAX_HUD_DAMAGE_LEVEL))+0.5f);
|
|
level = MAX_HUD_DAMAGE_LEVEL - level;
|
|
Clamp (level,0,MAX_HUD_DAMAGE_LEVEL-2);
|
|
my_DrawRect (x,y,(int) (x+tx),(int) (y-height),m_DamageColors[level]);
|
|
}
|
|
}
|
|
DrawFrame (x,y,(int) (x+tx),y-(599-488-10),Color ());
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
//When target is a mech..
|
|
Verify (m_TargetVehicle.GetCurrent ()->IsDerivedFrom (Mech::DefaultData));
|
|
Mech *mech = Cast_Object(Mech *, m_TargetVehicle.GetCurrent());
|
|
Check_Object (mech);
|
|
|
|
int i;
|
|
for (i=0;i<MAX_HUD_DAMAGE_ZONE;i++)
|
|
{
|
|
if (m_DamageValues[i] != mech->damageArray[i])
|
|
m_HitFlashCount[i] = 1;
|
|
m_DamageValues[i] = mech->damageArray[i];
|
|
if (m_ArmorValues[i] != mech->armorArray[i])
|
|
m_HitFlashCount[i] = 1;
|
|
m_ArmorValues[i] = mech->armorArray[i];
|
|
}
|
|
|
|
color = MakeColor (0, 0, 0, 150);
|
|
Point3D size,loc;
|
|
|
|
if (m_ArmorMode)
|
|
{
|
|
//When target is a mech and in armor mode
|
|
int x,y;
|
|
size = m_Textures[20]->Size ();
|
|
|
|
// DrawLine (771-658,589,799-658,589,color);
|
|
// DrawLine (771-658,599,799-658,599,color);
|
|
// DrawLine (799-658,589,799-658,599,color);
|
|
x = 5;
|
|
y = 582;
|
|
|
|
color = Color ();
|
|
size = m_Textures[20]->Size ();
|
|
for (i=0;i<MAX_HUD_DAMAGE_ZONE;i++)
|
|
{
|
|
if (m_ArmorValues[trans_array[i]] != -1)
|
|
{
|
|
x = bartable[i]-658;
|
|
Scalar height;
|
|
Scalar tx;
|
|
tx = (TARGET_BARWIDTH - size.x)/2.0f;
|
|
height = (m_ArmorValues[trans_array[i]]) * TARGET_BARHEIGHT;
|
|
|
|
m_Textures[20+i]->Draw (Point3D ((Scalar) bartable[i]+1.0f-658,590.0f,0.9f),size,MakeColor (255,255,255,255),HUDTexture::NO_FLIP,true);
|
|
if (!(m_HitFlashCount[trans_array[i]] & 0x01))
|
|
m_Textures[40+i]->Draw (Point3D ((Scalar) bartable[i]+1.0f-658,589.0f,0.9f),size,MakeColor (255,255,255,255));
|
|
if (height > 2.0f)
|
|
{
|
|
if (m_HitFlashCount[trans_array[i]] & 0x01)
|
|
my_DrawRect (x+3,y,(int) (x+TARGET_BARWIDTH-1),(int) (y-height),MakeColor (255,255,255,255));
|
|
else
|
|
my_DrawRect (x+3,y,(int) (x+TARGET_BARWIDTH-1),(int) (y-height),m_DamageColors[m_DamageValues[trans_array[i]]]);
|
|
}
|
|
DrawFrame (x+3,y,x+TARGET_BARWIDTH-1,y-TARGET_BARHEIGHT,Color ());
|
|
}
|
|
}
|
|
|
|
color = MakeColor (0,126,0,255);
|
|
DrawLine (0,589,142,589,color);
|
|
DrawLine (0,599,142,599,color);
|
|
|
|
for (x=0;x<11;x++)
|
|
{
|
|
DrawLine (bartable[x]-658,589,bartable[x]-658,599,color);
|
|
}
|
|
DrawLine (142,589,142,599,color);
|
|
}
|
|
else
|
|
{
|
|
|
|
// MSL 5.03 Target Damage Display
|
|
Verify (m_TargetMechID >=0);
|
|
Verify (m_TargetMechID <= LastMechID);
|
|
AddTexture (texturename[m_TargetMechID],0,texuv[m_TargetMechID][0][0],texuv[m_TargetMechID][0][1],texuv[m_TargetMechID][0][2],texuv[m_TargetMechID][0][3],128,128); // left leg
|
|
AddTexture (texturename[m_TargetMechID],1,texuv[m_TargetMechID][1][0],texuv[m_TargetMechID][1][1],texuv[m_TargetMechID][1][2],texuv[m_TargetMechID][1][3],128,128); // right leg
|
|
AddTexture (texturename[m_TargetMechID],2,texuv[m_TargetMechID][2][0],texuv[m_TargetMechID][2][1],texuv[m_TargetMechID][2][2],texuv[m_TargetMechID][2][3],128,128); // left arm
|
|
AddTexture (texturename[m_TargetMechID],3,texuv[m_TargetMechID][3][0],texuv[m_TargetMechID][3][1],texuv[m_TargetMechID][3][2],texuv[m_TargetMechID][3][3],128,128); // right arm
|
|
AddTexture (texturename[m_TargetMechID],4,texuv[m_TargetMechID][4][0],texuv[m_TargetMechID][4][1],texuv[m_TargetMechID][4][2],texuv[m_TargetMechID][4][3],128,128); // right torso
|
|
AddTexture (texturename[m_TargetMechID],5,texuv[m_TargetMechID][5][0],texuv[m_TargetMechID][5][1],texuv[m_TargetMechID][5][2],texuv[m_TargetMechID][5][3],128,128); // left torso
|
|
AddTexture (texturename[m_TargetMechID],6,texuv[m_TargetMechID][6][0],texuv[m_TargetMechID][6][1],texuv[m_TargetMechID][6][2],texuv[m_TargetMechID][6][3],128,128); // center torso
|
|
AddTexture ("hud\\hud5",7,220,0,252,50); // center torso rear
|
|
AddTexture (texturename[m_TargetMechID],8,texuv[m_TargetMechID][8][0],texuv[m_TargetMechID][8][1],texuv[m_TargetMechID][8][2],texuv[m_TargetMechID][8][3],128,128); // head
|
|
AddTexture (texturename[m_TargetMechID],9,texuv[m_TargetMechID][9][0],texuv[m_TargetMechID][9][1],texuv[m_TargetMechID][9][2],texuv[m_TargetMechID][9][3],128,128); // special 1
|
|
AddTexture (texturename[m_TargetMechID],10,texuv[m_TargetMechID][10][0],texuv[m_TargetMechID][10][1],texuv[m_TargetMechID][10][2],texuv[m_TargetMechID][10][3],128,128); // special 2
|
|
AddTexture ("hud\\hud5",11,229,68,238,118); // special 1 rear
|
|
AddTexture ("hud\\hud5",12,243,68,254,118); // special 2 rear
|
|
if(!hsh_initialized)
|
|
{
|
|
;
|
|
}
|
|
else
|
|
{
|
|
//sanghoon
|
|
mfd_device.LoadTargetTexture(texturename[m_TargetMechID]);
|
|
}
|
|
|
|
Point3D boxloc;
|
|
boxloc = Location ();
|
|
loc.x = boxloc.x;
|
|
loc.y = boxloc.y;
|
|
|
|
int fred;
|
|
fred = 0;
|
|
|
|
for (i=0;i<11;i++)
|
|
{//What does the number 13 mean here?
|
|
#if 0
|
|
if (i != fred)
|
|
{
|
|
continue;
|
|
}
|
|
#endif
|
|
Verify (m_Textures[i]);
|
|
switch (i)
|
|
{
|
|
case 7: // rear
|
|
break;
|
|
case 11: // s1
|
|
break;
|
|
case 12: // s2
|
|
break;
|
|
default:
|
|
if ((m_DamageValues[i] <= 5) && (m_DamageValues[i]>=0))
|
|
{
|
|
if ((m_DamageValues[i] != 4) || (m_DamageFlash))
|
|
{
|
|
loc.x = 73 + (offset[m_TargetMechID][i][0]);
|
|
loc.y = 482 + (offset[m_TargetMechID][i][1]);
|
|
size = m_Textures[i]->Size ();
|
|
m_Textures[i]->Draw (loc,size,m_DamageColors[m_DamageValues[i]]);
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// move it here so that the target range text readout is on top of the damage bars
|
|
m_TargetName->Color (MakeColor (73,231,73,255));
|
|
m_TargetName->TopLeft (2,468);
|
|
m_TargetName->BottomRight (140,484);
|
|
m_TargetRangeText->Color (MakeColor (241,33,33,255));
|
|
m_TargetRangeText->TopLeft (2,468);
|
|
m_TargetRangeText->BottomRight (50,484);
|
|
|
|
DWORD textw,texth;
|
|
m_TargetName->DrawSize (textw,texth);
|
|
m_TargetName->Draw (Point3D (140.0f - textw,468,0.9f));
|
|
m_TargetRangeText->DrawSize (textw,texth);
|
|
m_TargetRangeText->Draw (Point3D (50.0f - textw,468,0.9f));
|
|
}
|
|
else
|
|
if(mfd_device.BeginChannel(3))
|
|
{
|
|
mfd_device.DrawMFDBackText( mfd_text_targetdamage);
|
|
|
|
mfd_device.pD3DDevice->SetTexture(0,0);
|
|
mfd_device.pD3DDevice->SetRenderState( D3DRENDERSTATE_ALPHABLENDENABLE, TRUE );
|
|
mfd_device.pD3DDevice->SetRenderState( D3DRENDERSTATE_SRCBLEND, D3DBLEND_SRCALPHA );
|
|
mfd_device.pD3DDevice->SetRenderState( D3DRENDERSTATE_DESTBLEND, D3DBLEND_INVSRCALPHA );
|
|
if (m_ArmorMode)
|
|
{
|
|
mfd_device.DrawThickFrame(7,102,635,390,2,0xFFFFFFFF);
|
|
}
|
|
else
|
|
{
|
|
mfd_device.DrawThickFrame( 7,102,317,331,2,0xFFFFFFFF);
|
|
mfd_device.DrawThickFrame( 7,337,317,434,2,0xFFFFFFFF);
|
|
mfd_device.DrawThickFrame(323,102,635,434,2,0xFFFFFFFF);
|
|
}
|
|
|
|
mfd_device.DrawThickFrame(7,44,635,95,2,0xFFFFFFFF);
|
|
|
|
if (m_TargetVehicle.GetCurrent ())
|
|
{
|
|
//Draw 3D target or 2D target.
|
|
if (!m_ArmorMode)
|
|
{
|
|
if(g_f3dtarget)
|
|
{
|
|
mfd_device.pD3DDevice->SetTexture(0,mfd_device.pDDSMechTexture);
|
|
mfd_device.pD3DDevice->SetRenderState( D3DRENDERSTATE_ALPHABLENDENABLE, FALSE);
|
|
mfd_device.pD3DDevice->SetTextureStageState(0,D3DTSS_MAGFILTER,D3DTFG_LINEAR);
|
|
mfd_device.pD3DDevice->SetTextureStageState(0,D3DTSS_MINFILTER,D3DTFG_LINEAR);
|
|
mfd_device.tw=128,mfd_device.th=128;
|
|
mfd_device.DrawTexture2(42,104,240,204,0xFFFFFFFF,0,10,120,112);
|
|
mfd_device.tw=512,mfd_device.th=512;
|
|
mfd_device.pD3DDevice->SetTexture(0,0);
|
|
}
|
|
else
|
|
{
|
|
if(m_TargetTonnage != -1)
|
|
{
|
|
Mech *mech = Cast_Object(Mech *, m_TargetVehicle.GetCurrent());
|
|
const Mech__GameModel *model = static_cast<const Mech__GameModel *> (mech->GetGameModel ());
|
|
int mechindex=GetMechIndex(model->mechID);
|
|
if(mechindex>=0)
|
|
{
|
|
//Draw only supported mechs.
|
|
// MSL 5.02 Target MFD Image
|
|
int x=(mechindex%8)*128;
|
|
int y=(mechindex/8)*128;
|
|
// int x=(mechindex%4)*128;
|
|
// int y=(mechindex/4)*128;
|
|
|
|
//Draw target in 2D.
|
|
mfd_device.pD3DDevice->SetTexture(0,mfd_device.pDDSMechTexture);
|
|
mfd_device.pD3DDevice->SetRenderState( D3DRENDERSTATE_ALPHABLENDENABLE, FALSE);
|
|
mfd_device.pD3DDevice->SetTextureStageState(0,D3DTSS_MAGFILTER,D3DTFG_LINEAR);
|
|
mfd_device.pD3DDevice->SetTextureStageState(0,D3DTSS_MINFILTER,D3DTFG_LINEAR);
|
|
//Need to write routine to calculate coordinates per mech type...
|
|
// MSL 5.02 Target MFD Image
|
|
// [mfdatlas] height is whatever the driver granted, not a constant
|
|
mfd_device.tw=1024,mfd_device.th=(float)mfd_device.m_nMechAtlasH;
|
|
// MSL 5.02 Target MFD Image Resize
|
|
// mfd_device.DrawTexture2(42,104,240,204,0xFFFFFFFF,x,y,x+120,y+120);
|
|
mfd_device.DrawTexture2(42,104,240,225,0xFFFFFFFF,x,y,x+120,y+120);
|
|
mfd_device.tw=512,mfd_device.th=512;
|
|
mfd_device.pD3DDevice->SetTexture(0,0);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// MSL 5.03 Target Damage Display
|
|
if (m_TargetVehicle.GetCurrent ())
|
|
{
|
|
Mech *targetmech;
|
|
targetmech = Cast_Object (Mech *,m_TargetVehicle.GetCurrent ());
|
|
const Mech__GameModel *model = static_cast<const Mech__GameModel *> (targetmech->GetGameModel ());
|
|
m_TargetMechID = model->mechID;
|
|
}
|
|
else
|
|
{
|
|
m_TargetMechID = 0;
|
|
}
|
|
|
|
// MSL 5.03 Damage on Secondary
|
|
if (g_nAuxilMode == 2)
|
|
{
|
|
if (m_ShowData)
|
|
{
|
|
// if(radar_device.pDDSRadarDamageTexture==0)
|
|
radar_device.LoadRadarDamageTexture(texturename[m_TargetMechID]);
|
|
|
|
// clear back ground texture
|
|
RECT rc={140,407,340,607};
|
|
DDBLTFX fx={0,};
|
|
fx.dwSize=sizeof(fx);
|
|
fx.dwFillColor=0;
|
|
radar_device.pDDSTarget->Blt(&rc,NULL,NULL,DDBLT_COLORFILL ,&fx);
|
|
|
|
for (int i=0;i<11;i++)
|
|
{//What does the number 13 mean here?
|
|
int dv=m_DamageValues[i];
|
|
DWORD color=0xFF000000;
|
|
if(0<=dv && dv<=5)
|
|
color=SH_DamageColor[dv];
|
|
if ((m_DamageValues[i] <= 5) && (m_DamageValues[i]>=0))
|
|
{
|
|
if ((m_DamageValues[i] != 4) || (m_DamageFlash))
|
|
{
|
|
color = m_DamageColors[m_DamageValues[i]];
|
|
radar_device.pD3DDevice->SetTexture(0,radar_device.pDDSRadarDamageTexture);
|
|
radar_device.pD3DDevice->SetRenderState( D3DRENDERSTATE_ALPHABLENDENABLE, TRUE );
|
|
radar_device.pD3DDevice->SetRenderState( D3DRENDERSTATE_SRCBLEND, D3DBLEND_SRCALPHA );
|
|
radar_device.pD3DDevice->SetRenderState( D3DRENDERSTATE_DESTBLEND, D3DBLEND_INVSRCALPHA );
|
|
radar_device.tw=256,radar_device.th=256;
|
|
radar_device.DrawTexture(
|
|
(offset3[m_TargetMechID][i][0]/2)+138,
|
|
(offset3[m_TargetMechID][i][1]/2)+406,
|
|
color,
|
|
texuv3[m_TargetMechID][i][0]/2,
|
|
texuv3[m_TargetMechID][i][1]/2,
|
|
texuv3[m_TargetMechID][i][2]/2,
|
|
texuv3[m_TargetMechID][i][3]/2
|
|
);
|
|
radar_device.tw=512,radar_device.th=512;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// clear back ground texture
|
|
RECT rc={140,407,340,607};
|
|
DDBLTFX fx={0,};
|
|
fx.dwSize=sizeof(fx);
|
|
fx.dwFillColor=0;
|
|
radar_device.pDDSTarget->Blt(&rc,NULL,NULL,DDBLT_COLORFILL ,&fx);
|
|
}
|
|
}
|
|
|
|
if (m_ShowData)
|
|
{
|
|
|
|
//Routine to display weapon status of target in lower-left..
|
|
if (!m_ArmorMode)
|
|
{
|
|
stlport::vector<WeaponData>::iterator iter;
|
|
const int iy=350;//initial y;
|
|
const int rh=18;//row height
|
|
const int cw=80;//column width
|
|
int cury= iy;
|
|
int curx = 20;
|
|
for (iter= m_Weapons.begin ();iter != m_Weapons.end ();iter++)
|
|
{
|
|
if (iter->m_TextureID == -1)continue;
|
|
|
|
int dv=m_DamageValues[iter->m_PartLoc];//damagevalue
|
|
if(dv<5)
|
|
{
|
|
DWORD shcolor=SH_DamageColor[dv];
|
|
mfd_device.DrawQuad(curx,cury,curx+cw-5,cury+rh-1,shcolor);
|
|
mfd_device.pFont[1].DrawText(curx,cury+rh/2,0xFF000000,weapon_name[iter->m_TextureID],TEXTALIGN_LEFT|TEXTALIGN_VCENTER);
|
|
}
|
|
cury += rh;
|
|
if ((cury+rh) >= 430)
|
|
{
|
|
cury = iy;
|
|
curx += cw;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (m_TargetTonnage == -1)
|
|
{
|
|
//When target is not a mech..
|
|
Verify (!m_ArmorMode); // only mechs show armor mode
|
|
if (m_TargetVehicle.GetCurrent()->IsDerivedFrom (MWObject::DefaultData))
|
|
{
|
|
MWObject *veh = Cast_Object (MWObject *,m_TargetVehicle.GetCurrent ());
|
|
if (m_ArmorValues[0] != (veh->m_HitPoints / veh->m_MaxHitPoints))
|
|
m_HitFlashCount[0] = 1;
|
|
|
|
m_ArmorValues[0] = (veh->m_HitPoints / veh->m_MaxHitPoints);
|
|
if (m_ArmorValues[0] != -1)
|
|
{
|
|
//Draw damage bar graph. Height and color are expressed simultaneously.
|
|
int level;
|
|
level = (int) ((m_ArmorValues[0]*(MAX_HUD_DAMAGE_LEVEL))+0.5f);
|
|
level = MAX_HUD_DAMAGE_LEVEL - level;
|
|
Clamp (level,0,MAX_HUD_DAMAGE_LEVEL-2);
|
|
float armorval=m_ArmorValues[0];
|
|
Clamp(armorval,0,1);
|
|
|
|
mfd_device.DrawQuad(480-60,(int)(430-armorval*316),480+60,430,SH_DamageColor[level]);
|
|
mfd_device.DrawFrame(480-60,114,480+60,430,0xFFFFFFFF);
|
|
}
|
|
}
|
|
}//When the target is not a mech.
|
|
else
|
|
{
|
|
//When target is a mech..
|
|
Verify (m_TargetVehicle.GetCurrent ()->IsDerivedFrom (Mech::DefaultData));
|
|
Mech *mech = Cast_Object(Mech *, m_TargetVehicle.GetCurrent());
|
|
Check_Object (mech);
|
|
|
|
int i;
|
|
for (i=0;i<MAX_HUD_DAMAGE_ZONE;i++)
|
|
{
|
|
if (m_DamageValues[i] != mech->damageArray[i]) m_HitFlashCount[i] = 1;
|
|
|
|
m_DamageValues[i] = mech->damageArray[i];
|
|
|
|
if (m_ArmorValues[i] != mech->armorArray[i]) m_HitFlashCount[i] = 1;
|
|
m_ArmorValues[i] = mech->armorArray[i];
|
|
}
|
|
|
|
if (m_ArmorMode)
|
|
{
|
|
//When target is a mech and in armor mode
|
|
for (i=0;i<MAX_HUD_DAMAGE_ZONE;i++)
|
|
{
|
|
int tr=trans_array[i];
|
|
if (m_ArmorValues[tr] != -1)
|
|
{
|
|
int x = i*58;
|
|
int h=(int)(m_ArmorValues[tr]*280);
|
|
int u1=i%8*58;
|
|
int v1=403+i/8*49;
|
|
int u2=u1+58;
|
|
int v2=v1+42;
|
|
Clamp(h,0,280);
|
|
DWORD hsh_color=(m_HitFlashCount[tr] & 0x01)?0xFFFFFFFF:SH_DamageColor[m_DamageValues[tr]];
|
|
DWORD hsh_color2=(m_HitFlashCount[tr] & 0x01)?0xFFFFFFFF:0xFFC0C0C0;
|
|
mfd_device.pD3DDevice->SetTexture(0,mfd_device.pDDSTexture);
|
|
mfd_device.DrawTexture(x,392,hsh_color2,u1,v1,u2,v2);
|
|
x+=10;
|
|
mfd_device.pD3DDevice->SetTexture(0,0);
|
|
mfd_device.DrawQuad(x,388-h,x+38,388,hsh_color);
|
|
mfd_device.DrawFrame(x,388-280,x+38,388,0xFFFFFFFF);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
|
|
// MSL 5.03 Target Damage Display
|
|
mfd_device.LoadTargetTexture(texturename[m_TargetMechID]);
|
|
|
|
//When target is a mech and NOT in armor mode..
|
|
if(mfd_device.pDDSTargetTexture==0)
|
|
mfd_device.LoadTargetTexture(texturename[m_TargetMechID]);
|
|
|
|
for (i=0;i<11;i++)
|
|
{//What does the number 13 mean here?
|
|
int dv=m_DamageValues[i];
|
|
DWORD color=0xFF000000;
|
|
if(0<=dv && dv<=5)color=SH_DamageColor[dv];
|
|
switch (i)
|
|
{
|
|
case 7: // rear
|
|
break;
|
|
case 11: // s1
|
|
break;
|
|
case 12:
|
|
break;
|
|
default:
|
|
if ((m_DamageValues[i] <= 5) && (m_DamageValues[i]>=0))
|
|
{
|
|
if ((m_DamageValues[i] != 4) || (m_DamageFlash))
|
|
{
|
|
mfd_device.pD3DDevice->SetTexture(0,mfd_device.pDDSTargetTexture);
|
|
mfd_device.pD3DDevice->SetRenderState( D3DRENDERSTATE_ALPHABLENDENABLE, TRUE );
|
|
mfd_device.pD3DDevice->SetRenderState( D3DRENDERSTATE_SRCBLEND, D3DBLEND_SRCALPHA );
|
|
mfd_device.pD3DDevice->SetRenderState( D3DRENDERSTATE_DESTBLEND, D3DBLEND_INVSRCALPHA );
|
|
|
|
mfd_device.DrawTexture(
|
|
offset2[m_TargetMechID][i][0]+312,
|
|
offset2[m_TargetMechID][i][1]+92,
|
|
color,
|
|
texuv2[m_TargetMechID][i][0],
|
|
texuv2[m_TargetMechID][i][1],
|
|
texuv2[m_TargetMechID][i][2],
|
|
texuv2[m_TargetMechID][i][3]
|
|
);
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}//When the target is a mech.
|
|
}//m_ShowData
|
|
mfd_device.pFont[0].DrawText(40,69,0xFFFFFFFF,hsh_targetrange,TEXTALIGN_LEFT|TEXTALIGN_VCENTER);
|
|
mfd_device.pFont[0].DrawText(605,69,0xFFFFFFFF,hsh_targetname,TEXTALIGN_RIGHT|TEXTALIGN_VCENTER);
|
|
}
|
|
mfd_device.EndChannel();
|
|
}
|
|
}
|
|
|
|
|