game: Add support of target_gravity, target_soundfx

This commit is contained in:
Denis Pauk 2024-09-29 11:27:34 +03:00
parent 660412a525
commit d443fdc092
7 changed files with 97 additions and 3 deletions

View file

@ -438,7 +438,7 @@ use_target_explosion(edict_t *self, edict_t *other /* unused */, edict_t *activa
{
if (!self)
{
return;
return;
}
self->activator = activator;
@ -1474,6 +1474,90 @@ SP_target_earthquake(edict_t *self)
}
}
/*
* QUAKED target_gravity (1 0 0) (-8 -8 -8) (8 8 8) NOTRAIL NOEFFECTS
* [Sam-KEX] Changes gravity, as seen in the N64 version
*/
void
use_target_gravity(edict_t *self, edict_t *other, edict_t *activator)
{
gi.cvar_set("sv_gravity", va("%f", self->gravity));
}
void
SP_target_gravity(edict_t* self)
{
self->use = use_target_gravity;
self->gravity = atof(st.gravity);
}
/*
* QUAKED target_soundfx (1 0 0) (-8 -8 -8) (8 8 8) NOTRAIL NOEFFECTS
* [Sam-KEX] Plays a sound fx, as seen in the N64 version
*/
void
update_target_soundfx(edict_t *self)
{
gi.positioned_sound(self->s.origin, self, CHAN_VOICE, self->noise_index,
self->volume, self->attenuation, 0);
}
void
use_target_soundfx(edict_t *self, edict_t *other, edict_t *activator)
{
self->think = update_target_soundfx;
self->nextthink = level.time + self->delay;
}
void
SP_target_soundfx(edict_t* self)
{
if (!self->volume)
{
self->volume = 1.0;
}
if (!self->attenuation)
{
self->attenuation = 1.0;
}
else if (self->attenuation == -1)
{
/* use -1 so 0 defaults to 1 */
self->attenuation = 0;
}
self->noise_index = atoi(st.noise);
switch(self->noise_index)
{
case 1:
self->noise_index = gi.soundindex("world/x_alarm.wav");
break;
case 2:
self->noise_index = gi.soundindex("world/flyby1.wav");
break;
case 4:
self->noise_index = gi.soundindex("world/amb12.wav");
break;
case 5:
self->noise_index = gi.soundindex("world/amb17.wav");
break;
case 7:
self->noise_index = gi.soundindex("world/bigpump2.wav");
break;
default:
gi.dprintf("%s: unknown noise %d\n", self->classname, self->noise_index);
return;
}
self->use = use_target_soundfx;
}
/*
* QUAKED target_music (1 0 0) (-8 -8 -8) (8 8 8)
* Change music when used
*/
void
target_music_use(edict_t *self, edict_t *other, edict_t *activator)
{

View file

@ -717,7 +717,7 @@ typedef enum
typedef struct
{
char *name;
const char *name;
int ofs;
fieldtype_t type;
int flags;

View file

@ -519,7 +519,7 @@ WriteField1(FILE *f, field_t *field, byte *base)
}
}
void
static void
WriteField2(FILE *f, field_t *field, byte *base)
{
int len;

View file

@ -1439,6 +1439,9 @@ extern void use_target_secret ( edict_t * ent , edict_t * other , edict_t * acti
extern void use_target_spawner ( edict_t * self , edict_t * other , edict_t * activator ) ;
extern void use_target_splash ( edict_t * self , edict_t * other , edict_t * activator ) ;
extern void use_target_steam ( edict_t * self , edict_t * other , edict_t * activator ) ;
extern void use_target_soundfx ( edict_t *self, edict_t *other, edict_t *activator ) ;
extern void use_target_gravity ( edict_t *self, edict_t *other, edict_t *activator ) ;
extern void update_target_soundfx ( edict_t *self);
extern void vengeance_pain ( edict_t * self , edict_t * other , float kick , int damage ) ;
extern void vengeance_think ( edict_t * self ) ;
extern void vengeance_touch ( edict_t * self , edict_t * other , cplane_t * plane , csurface_t * surf ) ;

View file

@ -1435,6 +1435,9 @@
{"use_target_spawner", (byte *)use_target_spawner},
{"use_target_splash", (byte *)use_target_splash},
{"use_target_steam", (byte *)use_target_steam},
{"use_target_gravity", (byte *)use_target_gravity},
{"update_target_soundfx", (byte *)update_target_soundfx},
{"use_target_soundfx", (byte *)use_target_soundfx},
{"vengeance_pain", (byte *)vengeance_pain},
{"vengeance_think", (byte *)vengeance_think},
{"vengeance_touch", (byte *)vengeance_touch},

View file

@ -167,6 +167,7 @@ extern void SP_target_crosslevel_trigger(edict_t * self);
extern void SP_target_earthquake(edict_t * self);
extern void SP_target_explosion ( edict_t * ent ) ;
extern void SP_target_goal ( edict_t * ent ) ;
extern void SP_target_gravity (edict_t * self);
extern void SP_target_help ( edict_t * ent ) ;
extern void SP_target_killplayers(edict_t * self);
extern void SP_target_laser(edict_t * self);
@ -176,6 +177,7 @@ extern void SP_target_music(edict_t * self);
extern void SP_target_orb ( edict_t * ent ) ;
extern void SP_target_secret ( edict_t * ent ) ;
extern void SP_target_sky(edict_t * self);
extern void SP_target_soundfx(edict_t * self);
extern void SP_target_spawner(edict_t * self);
extern void SP_target_speaker ( edict_t * ent ) ;
extern void SP_target_splash(edict_t * self);

View file

@ -173,6 +173,7 @@
{"target_earthquake", SP_target_earthquake},
{"target_explosion", SP_target_explosion},
{"target_goal", SP_target_goal},
{"target_gravity", SP_target_gravity},
{"target_help", SP_target_help},
{"target_killplayers", SP_target_killplayers},
{"target_laser", SP_target_laser},
@ -180,6 +181,7 @@
{"target_mal_laser", SP_target_mal_laser},
{"target_music", SP_target_music},
{"target_orb", SP_target_orb},
{"target_soundfx", SP_target_soundfx},
{"target_secret", SP_target_secret},
{"target_sky", SP_target_sky},
{"target_spawner", SP_target_spawner},