Files
firestorm/Gameleap/code/mw4/Code/MW4/NetWeapon.hpp
T
Cyd 2b8ca921cb Initial full mirror of c:\VWE (source + assets + toolchain + outputs) via Git LFS
Complete disaster-recovery snapshot: engine/game source, game data assets,
VC6 toolchain + DX SDKs, build outputs, deployed game, and _UNUSED archive.
Large binaries in Git LFS; text preserved byte-for-byte (core.autocrlf=false,
no eol attributes). See RECOVERY.md for the one-clone rebuild procedure.
2026-06-24 21:28:16 -05:00

153 lines
4.4 KiB
C++

//===========================================================================//
// File: NetWeapon.hpp
//---------------------------------------------------------------------------//
// Date Who Modification //
// -------- --- ---------------------------------------------------------- //
// 01/06/2000 JSE Inital coding
//---------------------------------------------------------------------------//
// Copyright (C) 1998, Microsoft Corp. //
// All Rights reserved worldwide //
// This unpublished sourcecode is PROPRIETARY and CONFIDENTIAL //
//===========================================================================//
#pragma once
#include "NetConstants.hpp"
#include "NetUpdateManager.hpp"
namespace MechWarrior4
{
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void NetWeaponSecurityCheckStart();
void NetWeaponSecurityCheckStop();
class WeaponUpdate:
public Stuff::Plug
{
public:
private:
static Stuff::MemoryBlock *AllocatedMemory;
public:
void*
operator new(size_t)
{return AllocatedMemory->New();}
void
operator delete(void *where)
{AllocatedMemory->Delete(where);}
WeaponUpdate():
Stuff::Plug(DefaultData),
originator(NULL),
target(NULL)
{
weaponFired = 0;
targetOffset = Point3D::Identity;
lockTime = 0.0f;
};
void Reset()
{
weaponFired = 0;
originator.Remove();
target.Remove();
targetOffset = Point3D::Identity;
lockTime = 0.0f;
};
// bit field of the weapons fired
DWORD weaponFired;
// the person pulling the trigger
SlotOf<Entity *> originator;
// the person being hit
SlotOf<Entity *> target;
// offset of the hit to the target.
// Multiply the world hit point by the inverse of the targets local to world
// if you hit nothing or hit the ground just world co-ords with no extra transform
Point3D targetOffset;
// how long you have been locked
// currently not implemented
Scalar lockTime;
// If you fire a missile you need to call missilesubsystem->GetAMSNumber() after you call fireweapon.
// put that number into AntiWeaponCount[weaponsubsystem->GetWeaponID()]
// You probably can do this every frame after you would have potentially called fireweapon()
// as long as weaponfired doesn't have the missile in it, this value won't be sent over the network.
int AntiWeaponCount[32];
// FOR OFFICE USE ONLY! DO NOT FILL IN
// this flag is for reading on the server/client
// if the target or originator is not found
// than obsolete is set to true and the packet is ignored
bool obsolete;
static void
InitializeClass();
static void
TerminateClass();
};
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
struct WeaponCommand
{
public:
enum {
TargetOffsetXEntryID = 0,
TargetOffsetYEntryID,
TargetOffsetZEntryID,
TerrainXEntryID,
TerrainZEntryID,
NoTargetXEntryID,
NoTargetYEntryID,
NoTargetZEntryID,
UpdateEntryCount
};
enum {
UpdateType = UpdateManager::WeaponCommandID
};
static int GetUpdateEntryCount(){return UpdateEntryCount;};
static int GetUpdateEntryType(){return UpdateManager::WeaponCommandID;};
static void Decode(Entity *entity, MemoryStream *memory_stream, Time till, Scalar packet_latency, int connection, int debug_level, int bandwidth, Scalar rate){STOP(("NOT SUPPORTED"));};
static void Skip(MemoryStream *memory_stream, int size, Time till, int connection, int debug_level, int bandwidth){STOP(("NOT SUPPORTED"));};
static void Encode(Entity *entity, DynamicMemoryStream *memory_stream, int connection, int debug_level, int bandwidth){STOP(("NOT SUPPORTED"));};
static int SizeFunction(Entity *entity){return -1;};
static int MaxSize(Entity *entity, int debug_level, int bandwidth){return -1;};
static bool MaintainActiveFlagFunction(Entity *entity,Point3D cull_location){return true;}
static void SpecialDecode(int connection, int type, WeaponUpdate &weapon_command, MemoryStream *memory_stream);
static void SpecialEncode(int connection, int type, WeaponUpdate &weapon_command, DynamicMemoryStream *memory_stream);
};
};