game: minimal implementation of SP_target_camera

Based on:
 * https://github.com/id-Software/quake2-rerelease-dll/blob/main/rerelease/g_target.cpp
This commit is contained in:
Denis Pauk 2024-10-20 16:32:11 +03:00
parent f116fb44eb
commit d226454821
7 changed files with 58 additions and 0 deletions

View file

@ -150,6 +150,10 @@ Goals:
* [x] RGB particles support instead palette based one,
* [x] Get rid of VID_PaletteColor client internal api use,
* [x] Broken maps groups from base2 to next,
* [ ] Group `it_pic` images in vulkan render,
* [ ] Rearange surfaces in vulkan render before render,
* [ ] Fully implement `target_camera`,
* [ ] Fully implement `misc_flare`,
* [ ] Single player ReRelease support,
* [ ] Support effects and additional flags for ReRelease when possible.
* [ ] Use shared model cache in client code insted reimplemnet in each render,

View file

@ -864,6 +864,7 @@ CL_ParseTEnt(void)
break;
case TE_RAILTRAIL: /* railgun effect */
case TE_RAILTRAIL2:
MSG_ReadPos(&net_message, pos);
MSG_ReadPos(&net_message, pos2);
CL_RailTrail(pos, pos2);

View file

@ -1474,6 +1474,55 @@ SP_target_earthquake(edict_t *self)
}
}
/*
* QUAKED target_camera (1 0 0) (-8 -8 -8) (8 8 8)
* [Sam-KEX] Creates a camera path as seen in the N64 version.
*/
void
use_target_camera(edict_t *self, edict_t *other, edict_t *activator)
{
edict_t *target;
if (!self)
{
return;
}
if (self->sounds)
{
gi.configstring(CS_CDTRACK, va("%i", self->sounds));
}
if (!self->killtarget)
{
return;
}
target = G_PickTarget(self->killtarget);
if (!target || !target->use)
{
return;
}
/* TODO: Fully implement target camera logic */
target->use(target, self, activator);
}
void
SP_target_camera(edict_t* self)
{
if (deathmatch->value)
{
/* auto-remove for deathmatch */
G_FreeEdict(self);
return;
}
self->use = use_target_camera;
self->svflags = SVF_NOCLIENT;
}
/*
* QUAKED target_gravity (1 0 0) (-8 -8 -8) (8 8 8) NOTRAIL NOEFFECTS
* [Sam-KEX] Changes gravity, as seen in the N64 version

View file

@ -1434,6 +1434,7 @@ extern void use_killbox ( edict_t * self , edict_t * other , edict_t * activator
extern void use_nuke ( edict_t * self , edict_t * other , edict_t * activator ) ;
extern void use_scanner ( edict_t * self ) ;
extern void use_target_blaster ( edict_t * self , edict_t * other , edict_t * activator ) ;
extern void use_target_camera ( edict_t * self , edict_t * other , edict_t * activator);
extern void use_target_changelevel ( edict_t * self , edict_t * other , edict_t * activator ) ;
extern void use_target_explosion ( edict_t * self , edict_t * other , edict_t * activator ) ;
extern void use_target_goal ( edict_t * ent , edict_t * other , edict_t * activator ) ;

View file

@ -1430,6 +1430,7 @@
{"use_nuke", (byte *)use_nuke},
{"use_scanner", (byte *)use_scanner},
{"use_target_blaster", (byte *)use_target_blaster},
{"use_target_camera", (byte *)use_target_camera},
{"use_target_changelevel", (byte *)use_target_changelevel},
{"use_target_explosion", (byte *)use_target_explosion},
{"use_target_goal", (byte *)use_target_goal},

View file

@ -162,6 +162,7 @@ extern void SP_target_actor(edict_t * self);
extern void SP_target_anger(edict_t * self);
extern void SP_target_blacklight ( edict_t * ent ) ;
extern void SP_target_blaster(edict_t * self);
extern void SP_target_camera(edict_t* self);
extern void SP_target_changelevel ( edict_t * ent ) ;
extern void SP_target_character(edict_t * self);
extern void SP_target_crosslevel_target(edict_t * self);

View file

@ -168,6 +168,7 @@
{"target_anger", SP_target_anger},
{"target_blacklight", SP_target_blacklight},
{"target_blaster", SP_target_blaster},
{"target_camera", SP_target_camera},
{"target_changelevel", SP_target_changelevel},
{"target_character", SP_target_character},
{"target_crosslevel_target", SP_target_crosslevel_target},