diff options
| author | Felix Morgner <felix.morgner@gmail.com> | 2026-08-24 11:16:07 +0200 |
|---|---|---|
| committer | Felix Morgner <felix.morgner@gmail.com> | 2026-08-24 11:16:07 +0200 |
| commit | c068f22329d5cc722622a2183bbb22eef2093df7 (patch) | |
| tree | 12d56c1aede67988a55e241364606bfbb4dba933 /src/libparsec/include/g_emp.h | |
| download | openparsec-main.tar.xz openparsec-main.zip | |
Diffstat (limited to 'src/libparsec/include/g_emp.h')
| -rw-r--r-- | src/libparsec/include/g_emp.h | 249 |
1 files changed, 249 insertions, 0 deletions
diff --git a/src/libparsec/include/g_emp.h b/src/libparsec/include/g_emp.h new file mode 100644 index 0000000..e0879a9 --- /dev/null +++ b/src/libparsec/include/g_emp.h @@ -0,0 +1,249 @@ +/* + * PARSEC HEADER: s_emp.h + */ + +#ifndef _S_EMP_H_ +#define _S_EMP_H_ + + + + +// use emp as duration weapon +#define EMP_FIRE_CONTINUOUSLY + + + + + +#define EMP_MAX_TEX_NAME 128 +// emp custom type structure -------------------------------------------------- +// +struct Emp : CustomObject { + + int upgradelevel; + Xmatrx WorldXmatrx; // object- to worldspace matrix + Vertex3* ObjVtxs; + Vertex3* WorldVtxs; // vertices in worldspace + TextureMap* texmap; + char texname[ EMP_MAX_TEX_NAME + 1 ]; + dword OwnerHostObjno; // needed for animation calculation + GenObject* ownerpo; + int Owner; + int vtxsnr; + int lod; + bams_t lat; + bams_t rot; + long alive; + int delay; + int red; + int green; + int blue; + int alpha; + dword damage; // hitpoints fractional per refframe +}; + +// number of upgrade levels --------------------------------------------------- +// +#define EMP_UPGRADES 3 + + +// preset emp type property values -------------------------------------------- +// +#define EMP_MAX_LIFETIME 6000 +#define EMP_MIN_LIFETIME 60 +#define EMP_MAX_WAVES 100 +#define EMP_MIN_WAVES 1 +#define EMP_MAX_DELAY 2400 +#define EMP_MIN_DELAY 0 + +// emp standard property values +#define EMP_TEXNAME "in01_00a.3df" +#define EMP_LOD 16 +#define EMP_MAX_WIDTH 200.0f +#define EMP_LAT 0x2000 // 45 deg +#define EMP_RED 220 +#define EMP_GREEN 220 +#define EMP_BLUE 220 +#define EMP_ALPHA 255 +#define EMP_LIFETIME 400 +#define EMP_FADEOUT 400 +#define EMP_LAMBDA 0.2 +#define EMP_ROT 32 +#define EMP_DELAY 200 +#define EMP_WAVES 1 +#define EMP_ENERGY 0 +#define EMP_DAMAGE 2000 + +// emp upgrade level 1 property values +#define EMP_UP1_TEXNAME "in01_00a.3df" +#define EMP_UP1_LOD 16 +#define EMP_UP1_MAX_WIDTH 200.0f +#define EMP_UP1_LAT 0x2000 // 45 deg +#define EMP_UP1_RED 220 +#define EMP_UP1_GREEN 220 +#define EMP_UP1_BLUE 220 +#define EMP_UP1_ALPHA 180 +#define EMP_UP1_LIFETIME 200 +#define EMP_UP1_FADEOUT 200 +#define EMP_UP1_LAMBDA 2.0 +#define EMP_UP1_ROT ( BAMS_DEG45 / 16 ) +#define EMP_UP1_DELAY 40 +#define EMP_UP1_WAVES 6 +#define EMP_UP1_ENERGY 6 +#define EMP_UP1_DAMAGE 1000 + +// emp upgrade level 2 property values +#define EMP_UP2_TEXNAME "in01_00a.3df" +#define EMP_UP2_LOD 16 +#define EMP_UP2_MAX_WIDTH 200.0f +#define EMP_UP2_LAT 0x2000 // 45 deg +#define EMP_UP2_RED 220 +#define EMP_UP2_GREEN 200 +#define EMP_UP2_BLUE 0 +#define EMP_UP2_ALPHA 90 +#define EMP_UP2_LIFETIME 800 +#define EMP_UP2_FADEOUT 800 +#define EMP_UP2_LAMBDA 4.0 +#define EMP_UP2_ROT 16 +#define EMP_UP2_DELAY 80 +#define EMP_UP2_WAVES 6 +#define EMP_UP2_ENERGY 40 +#define EMP_UP2_DAMAGE 2000 + + + +#define OFS_TEXNAME offsetof( Emp, texname ) +#define OFS_LOD offsetof( Emp, lod ) +#define OFS_LAT offsetof( Emp, lat ) +#define OFS_ROT offsetof( Emp, rot ) +#define OFS_RED offsetof( Emp, red ) +#define OFS_GREEN offsetof( Emp, green ) +#define OFS_BLUE offsetof( Emp, blue ) +#define OFS_ALPHA offsetof( Emp, alpha ) +#define OFS_DAMAGE offsetof( Emp, damage ) + + +// assigned type id for emp type ---------------------------------------------- +// +extern dword emp_type_id[ EMP_UPGRADES ]; + + +// full table for emp expansion ----------------------------------------------- +// +static float *emp_expansion_tab[ EMP_UPGRADES ] = { + NULL, NULL, NULL, +}; + + +// emp behaviour properties --------------------------------------------------- +// +static int emp_lifetime[ EMP_UPGRADES ] = { + EMP_LIFETIME, + EMP_UP1_LIFETIME, + EMP_UP2_LIFETIME, +}; +static geomv_t emp_max_width[ EMP_UPGRADES ] = { + FLOAT_TO_GEOMV( EMP_MAX_WIDTH ), + FLOAT_TO_GEOMV( EMP_UP1_MAX_WIDTH ), + FLOAT_TO_GEOMV( EMP_UP2_MAX_WIDTH ), +}; + +static float emp_lambda[ EMP_UPGRADES ] = { + EMP_LAMBDA, + EMP_UP1_LAMBDA, + EMP_UP2_LAMBDA, +}; + +static int emp_fadeout[ EMP_UPGRADES ] = { + EMP_FADEOUT, + EMP_UP1_FADEOUT, + EMP_UP2_FADEOUT, +}; + +static int emp_waves[ EMP_UPGRADES ] = { + EMP_WAVES, + EMP_UP1_WAVES, + EMP_UP2_WAVES, +}; + +static int emp_delay[ EMP_UPGRADES ] = { + EMP_DELAY, + EMP_UP1_DELAY, + EMP_UP2_DELAY, +}; + +static int emp_energy[ EMP_UPGRADES ] = { + EMP_ENERGY, + EMP_UP1_ENERGY, + EMP_UP2_ENERGY, +}; + + +// macro to set the properties of a itervertex -------------------------------- +// +#define SET_ITER_VTX( itvtx, vtx, u, v, r, g, b, a ) \ + (itvtx)->X = (vtx)->X; \ + (itvtx)->Y = (vtx)->Y; \ + (itvtx)->Z = (vtx)->Z; \ + (itvtx)->W = GEOMV_1; \ + (itvtx)->U = (u); \ + (itvtx)->V = (v); \ + (itvtx)->R = (r); \ + (itvtx)->G = (g); \ + (itvtx)->B = (b); \ + (itvtx)->A = (a); + + +// color combination macro ---------------------------------------------------- +// +#define COLOR_MUL(t,a,b) { \ + int tmp; \ + tmp = ( (int)(a) * (int)(b) ) / 255; \ + if ( tmp > 255 ) \ + tmp = 255; \ + (t) = tmp; \ +} + +#ifdef PARSEC_SERVER + +// mathematics header +#include "utl_math.h" + +// local module header +#include "e_gameserver.h" + +// proprietary module headers +#include "con_arg.h" +#include "con_aux_sv.h" +#include "con_com_sv.h" +#include "con_main_sv.h" +#include "e_colldet.h" +#include "g_extra.h" + +#include "obj_clas.h" +//#include "e_stats.h" +#include "g_main_sv.h" +#include "e_simulator.h" +#include "sys_refframe_sv.h" +#include "sys_util_sv.h" +#endif + +void CreateEmp( GenObject *ownerpo, int delay, int alive, int upgradelevel, int nClientID=0 ); +// external functions +#ifndef PARSEC_SERVER +void WFX_EmpBlast( ShipObject *shippo ); +void WFX_RemoteEmpBlast( ShipObject *shippo, int curupgrade ); +void WFX_CreateEmpWaves( ShipObject *shippo ); +int WFX_ActivateEmp( ShipObject *shippo ); +void WFX_DeactivateEmp( ShipObject *shippo ); +void WFX_RemoteActivateEmp( int playerid ); +void WFX_RemoteDeactivateEmp( int playerid ); +#else + +int EmpShipCollision( Emp *emp, ShipObject* shippo ); +int EmpAnimate( CustomObject *base ); +#endif + +#endif // _S_EMP_H_ + + |
